About

In this worksheet we look at different distribution functions, sampling methods, and probability calculations. Next we consider a calculation of a Europen option using Monte Carlo simulation, and compare results to calculation using Black-Scholes.

Setup

Remember to always set your working directory to the source file location. Go to ‘Session’, scroll down to ‘Set Working Directory’, and click ‘To Source File Location’. Read carefully the below and follow the instructions to complete the tasks and answer any questions. Submit your work to RPubs as detailed in previous notes.

Note

Always read carefully the instructions on Sakai. For clarity, tasks/questions to be completed/answered are highlighted in red color (visible in preview) and numbered according to their particular placement in the task section. Quite often you will need to add your own code chunk.

Execute all code chunks, preview, publish, and submit link on Sakai follwoing the naming convention. Make sure to add comments to your code where appropriate. Use own language!


Task 1: Distribution, Sampling & Probability

#Install package quantmod 
if(!require("quantmod",quietly = TRUE))
  install.packages("quantmod",dependencies = TRUE, repos = "https://cloud.r-project.org")

Consider the free cash flow example with an estimated range set by a minimum of -$25M and maximum $275M. We start by generating a sample random set. Following is an example to generate a random set of 10 data points from a uniform distribution with probability \(\frac{1}{b-a}\), a minimum of a, and a maximum of b.

ud = runif(10, min=5, max=15) # runif is in reference to uniform distribution
# Other R functions needed for this task are hist(), mean(), sd(), punif(), runif(),  pnorm(), and rnorm(). Check the Help command in R for more details about these functions.

##### 1A) Assuming a uniform probability distribution, generate a sample of 100 random observations (or deviates) representing the cash flows

udcf=runif(100,min = -25000000,max = 275000000)
udcf
  [1] 249408177  81984139 237487218 144939027  50362165 -12069633 103156800
  [8]  36903113 237372554  22052457   4113214  72531543 229368017  48181772
 [15]  -6288833 170330048 208067941 220336251 214150020 106349133 104831416
 [22] -19496400  55048382 186161722  52881304 202798188 155214115 192158170
 [29]  21643173  79565972  87946761 167013427 211921652 141620290  87328579
 [36]  39020893  87732329 225855454 163638958  18194428 152110891  23032105
 [43] 156046279 158696730 -12631380 133698423 134967440  49933202 192104056
 [50] 155492858 132536455 126961856 260621062 245335560  12044259 218201056
 [57]  44556645  93982533  19271832 176953640 -22371858 204010959 122256124
 [64] 218371990  81783064 163297824 201358670 247733435 195917963 137375378
 [71] 202799894 227065303  34690601 176154377 141180688 257344593  79634218
 [78]  91332700 259469852 -23102239 200831133 217978191 182601417  -3032009
 [85] 142528475  11829782 132868944 151773208 212615066  60868150 137410170
 [92]  33181419 188562646 216060632  96536830 215473276  63595986 168294055
 [99]  60382320  45816459

Next we plot a histogram to describe the generated sample data, and calculate the mean and standard deviation of the sample using the proper R-functions

##### 1B) Plot a histogram and calculate the mean and standard deviation of your sample. Compare the mean and standard deviation of the sample to the theoretical values obtained using the proper formulas.

hist(udcf)

u1<-mean(udcf)
u1
[1] 126862091
std1<-sd(udcf)
std1
[1] 80804153
a<-(275000000+(-25000000))/2

Manually calculate \(mean=(275000000+(-25000000))/2=1.25e+8\), and Standard Deviation\(=(275000000-(-25000000))^2/12=7.5e+15\)

##### 1C) Repeat 1A & 1B above by increasing the sample size to 1000. Share your insights.

udcf2<-runif(1000,min = -25000000,max = 275000000)
udcf2
   [1] -19389865.9 166922009.5 269791572.0 -20637561.0  56053521.5 245398854.4
   [7]  34912746.3 -13460326.6 257959173.1 153413608.2  68093181.9 -10858385.1
  [13]  44469778.9 187794526.1 167830062.8 212710425.4 151345768.9  45514943.6
  [19]  64162724.9 -13088853.1 234557835.3 224609603.3  16774456.6  16192489.7
  [25]  -8600101.6 150438041.1 244605298.4 -19033536.3 213141071.4 116264791.1
  [31] 239610632.9  40319828.0 124011799.9 103394296.8 269697758.8 235442326.7
  [37]  64808441.9  22825137.2   7324188.0  15231210.2  -6751163.4 -19932507.3
  [43] 249124410.4 132947333.8 140203457.0 227081242.3 254473686.3  79414144.0
  [49]  82217204.5 139322351.0  78095664.0 -15344728.9 263622761.4 101938083.0
  [55] 263848810.5 209607002.6  54838377.7  91354978.9 219951651.6  63359590.4
  [61] 256301379.2 266595087.0  14003276.6 189936274.3 154688495.6 244379570.7
  [67] 166001859.5 226116686.6 161151906.7 147958674.8 101847784.6  48027443.8
  [73]  12227941.7  91993381.4 158394819.5  69561083.2 204924377.5 180276468.4
  [79]  24416493.3   1503064.3 207888178.6 201287361.5 180958037.4 116606791.3
  [85] 245253825.3 204961854.9 132765539.5 116955896.3 168932784.8  55211669.4
  [91]  16086337.8 -15782520.8  58282696.4  81687509.7  -4434869.1 133257952.6
  [97] 110759169.9 -20096723.0 169681460.8  78020429.8  59381080.2 121665233.6
 [103] 150794130.1  23056591.8  -9051447.9 182356536.8 255777086.9  62795080.7
 [109] 131144389.7 103873500.7 234169086.9 138370519.0 237662149.4  47696084.2
 [115]  17510180.4 256302191.3 145165689.3 148102797.6  18589029.0 131352385.5
 [121] -22950991.5 135961257.8 220353098.8 -21064795.6  -4752184.6 -17016240.1
 [127] 126902111.6  32675343.7 267760922.2 125716290.0 210608099.3  47300105.9
 [133] 105095574.9 174630298.8 178594248.0 212737891.7 235884802.2  31349095.1
 [139] 110684159.2 123943582.4 252223634.9 151837306.3  30089842.7 265740138.0
 [145] 160489019.7 115229522.9  84919250.7 181624392.4  62392412.4 266797190.6
 [151]  92196573.1   9280505.0 259300539.4  46774713.2  -5494642.8 204719005.6
 [157] 131075575.6  92481824.3  -7509028.1  -7091690.2  50448931.7  99665366.9
 [163] -16089348.6 252017546.0  91771694.9  20993521.6 196631465.8 241935514.6
 [169] 201751909.3  18769313.7 245294845.4 178686599.9 256802071.0 -18997278.5
 [175] 140526823.7 219853229.4 209829373.8   7337486.9 101162704.6 214892910.1
 [181]  75888327.3 163254674.2 161838741.9 269556420.6 124021415.6 141567139.5
 [187] 115345600.6 159798365.8 170190732.7  90904011.3 123026145.8 189510637.4
 [193]  90664489.1 128792605.9  25770762.9 273095523.1  90621131.4   1744279.9
 [199] 215096630.3 217520170.1  40252683.0 223291138.4 155753463.4  89075940.6
 [205]   4129163.5  29684999.1 120285220.7 190499585.8   2873076.3  45740170.1
 [211] 196392359.5 268142925.1 182428497.3 222046734.2   8734219.5 111183201.0
 [217]  -4990876.5 259624169.6  29746954.3  48993827.4 181772595.8 198066426.8
 [223]  96986545.5  74174287.8  53014852.4 146070074.1 160002023.6  97798715.4
 [229] 156457238.0  21413202.5 267270630.7 219192011.8 220595719.5 115226631.1
 [235]  64099037.4 119313588.2 154914401.3   8706196.3 200175471.4  66649371.1
 [241] 102286847.2 191464866.1 205934115.3 -21383538.2 254968727.9  82972427.7
 [247]  -1730508.0  60044973.9 262189151.9 234320894.3 238492236.3 173994727.8
 [253] 270618433.2 144207666.4 155915667.6 257663899.5  63274453.6  30708537.6
 [259] 125717452.3 272904734.7 150582221.1  91007756.5 265735949.9  45434007.7
 [265]  -3816358.4  89471039.0 194094730.8 -16045398.7  15844947.2  57387941.7
 [271] 186763425.9 164496998.5  91910335.7 170360592.3  78576938.2 109802179.9
 [277] 138291662.9  10812578.7  22837052.5 213417661.8  14133552.7  94379026.9
 [283]  71069725.8  94537592.0 155081570.8  76701077.1 110979969.2 155751418.4
 [289]  97207430.5   4243943.7 -22360015.2 170057436.8 127847080.9  94283319.2
 [295]  79451013.4  37844240.4 216789270.6 242217900.4 265108843.7  47979181.5
 [301]  92237137.8 270839700.6 151674343.5 195260456.1 113660225.0 205302472.6
 [307] 263778629.9 195053297.3  58976325.7 257309463.4  63573012.7   8712419.8
 [313] 166666285.7  57422215.4 262987489.7  54473549.5 -18690831.2 201306033.2
 [319] 238853867.2  96985536.3 252701637.0 134060162.8 173475862.0 250786576.3
 [325] 102709238.0 137482470.6 176426828.5  79043753.9 113293424.3 151258366.2
 [331] 220586328.1  51003601.2 270082329.9 148023420.9 156932856.8  14358023.9
 [337] -21733080.5 241916448.7  83653707.4 191668095.4 174215454.2  99336849.5
 [343] 168348528.5 241677616.6 142015041.6 246285548.5  62175046.3  22951990.9
 [349] 231610682.5  90667310.1  35947950.4   3372649.9 105184451.3  19283828.4
 [355]  -5299188.9  75132467.7 201222899.1  60807546.5 212498960.9  86869714.1
 [361] 247563324.4 165357571.3  33938765.2   8886159.4 188538082.9 119333369.5
 [367] 241503317.4 175515179.2 162480423.6 143286494.9   2167302.6 243155308.9
 [373]  95357618.8  57058975.8 131283391.9 216146870.9  85315098.6 -24225375.7
 [379]  23511933.2 122789025.3  24012596.0 101436495.2 176975046.5 208604758.6
 [385] 216169509.3  89890400.6 246099840.3   3388349.2  62423900.6  46064113.4
 [391] 216259503.5  59258390.9  86009700.9  75203450.6 134074606.1 125007315.2
 [397]  29955727.6 185724932.5  17231640.4 129234776.4 132921384.0 155882181.4
 [403] 100438965.6  51663672.1 209653429.2 242821677.4 263566019.2   3624427.9
 [409] 269444149.4 135197601.9 -23473491.8  85002542.1 238898333.8  88635695.9
 [415] 202874841.6  74649475.6 145601517.9 149631828.7 252370335.3   8165028.5
 [421] 154484367.3 117018147.0  83997889.9 190139415.7  32945886.1 119033805.8
 [427]  49227569.8  90974607.9 211389822.1  83351910.4  21515100.2 169817036.6
 [433]  33812815.7 175102479.6  98379007.0 103229491.8 260143057.0   1198739.2
 [439]  -4570707.8 218107997.1   4955384.1 260745309.3 121201896.2 130132051.3
 [445]  15159923.5  45798805.7 108814838.5  81092657.7  58418814.7 205746341.7
 [451]  88623687.9   4992134.7 174360528.6 -15199638.5 -15603649.1  -7381263.4
 [457] -10546619.0 263194108.3 142479292.4 252513311.5 192291140.2   3612838.5
 [463]   8413021.7 269488179.4 191280910.3  60861863.1  75559739.3  19144484.5
 [469] 115329498.9 125885566.2 209737940.8 130904331.6  97452093.1  53500479.7
 [475] 205548880.9 209729728.1  46793936.9 201880356.8   9216472.8 -23019301.5
 [481]  30792371.7  27739676.4 206792043.1 238230792.6  30831141.6 255440871.2
 [487] 114729144.0  43501947.7  36861776.9 257826079.3  15522159.7  24941665.5
 [493]  18809529.1 203443509.9 129730228.4 209472738.9 193292441.2   8067821.4
 [499] 227278951.4 104920444.8 263041393.3  -6400345.0  53704538.6 263210004.1
 [505]    152921.0 182658668.3  92968316.5  99844658.0 161029516.5  -6046357.5
 [511] -21858146.6 260630788.7 227668611.2  27856633.1 269554819.3 271968742.6
 [517] 224152804.3 -13220309.7  72595195.7 148495532.4 106887294.3  58343750.5
 [523] 102300583.9 113005362.0 252655511.3  27181864.5 154814497.8 150803222.9
 [529] 130912724.3  52169488.0 174419434.1  15587674.7 129097162.0  71408398.7
 [535] 252432978.7 269086412.2 183988297.7 219264568.7  -8816423.6  59956539.3
 [541] 107017765.2 109917150.0  -7998851.2 187925394.7 209303475.0  87214862.2
 [547] 150774909.0 224244892.8 125738474.7 241350367.1 158180751.0   1641433.7
 [553] 241883360.1 243690525.7 210120950.5 -23941628.3 -23641110.6 266734607.3
 [559] 179428103.4 193962362.6 141893372.5 153858359.0  -8864045.1 192391496.2
 [565] 212027101.4 238976928.6  65745084.8  39957794.0  19343129.8 194221133.5
 [571] 208515615.2   7631191.6 240175738.7  75669474.7 107664682.3 246996959.5
 [577] 252983664.1 274640016.0  70793144.6 247803346.2 -18848239.2 228388581.9
 [583] 243430479.5    420001.0 195867752.1 -15003052.7 219645828.0  96337608.3
 [589]  82626971.6 141081999.1 -24646626.9  -2007663.7  99599175.5 146134208.0
 [595]  19626052.7  40165346.8   5015560.6  80828145.3 203780527.5 101567751.1
 [601] 172898291.4 158546781.7 257622741.6 269531281.1  32036180.3 104281902.7
 [607] 232575535.3 161765670.5  10649881.0 105990870.1  82667618.5 131275379.9
 [613] 112722046.9 169722105.4  68399435.1 225868840.5   1171146.7  -9767118.4
 [619] 273512784.4 216926713.8  69396081.8  14097073.4 269412545.9 190495465.6
 [625] -10354743.3 263395306.0  -3261397.5 -17530591.7  74597887.2 105380697.7
 [631]  77436201.1  65139095.0  88997269.6 123677870.8  17699211.6 -16674058.8
 [637] 263652825.8 272066745.6 146097463.5 247055117.8 -23617795.3  57518811.9
 [643] 141842381.7 170576127.2 -24158875.1 249569987.4 124883688.9 206843959.7
 [649] 237652639.6 130718580.7 161191090.7 143217501.0 243551743.5 199993751.8
 [655] 155090317.5  38757869.0  50087621.5  68182771.9  46109173.2 102491530.7
 [661] 166877744.1  85881615.6 267114070.5 145445603.7 140252832.6 255134726.5
 [667] 191445513.9 210655673.7  -2211129.5 145423249.9  88190540.7  -9917430.8
 [673] 205427354.2  84944026.4  24130395.7 198191533.0 198630212.0 245729691.8
 [679]  30501606.2 -19055133.4  49267276.1  57524484.6 142413661.1  14927472.2
 [685] 225650803.4  32843903.8 243722584.3  54276796.2 242356832.1 238079837.8
 [691]  34981342.4  43804730.3 260867215.8 153504867.4 263333946.3 -20862018.9
 [697]  52331318.3 204421704.8 272408088.6  60098097.8  59725212.7 168292985.5
 [703] 245084467.8  61831609.0  96001892.1 151257339.8 109734002.9  88969655.2
 [709]  17407539.3  27724445.5  54891140.9 139662660.0 182924143.5 264969842.4
 [715]  -8672424.8 110730247.4 263625514.2 187044848.9 121578650.2 138135511.9
 [721] 184364214.7 264866474.1 117127646.6  36636771.8 -22571923.8  51285568.3
 [727]  87620025.0  77989228.3 123041463.2 249336476.8 269869565.0 121440799.5
 [733]  57381141.6 196000346.1  33091685.0 128193430.2 -22262380.7 257030681.6
 [739]  57412623.0 223278996.5 171975347.4 150216419.4 244683418.5 130409415.3
 [745] 153966041.3  14342232.6 132376528.0  71811425.0 153715818.4 149534293.3
 [751]  -6085440.7    178034.5 -19254641.3  -5527024.0 107580059.5  80397979.5
 [757]  71577276.5  53185369.2  98884606.7 173873268.2 131829125.9 150810306.2
 [763] 151632978.8 161342105.9 236862088.6  63838369.5 101625226.3 242164160.2
 [769]  87142324.9  24137555.7  97241606.5  48701205.2 254734853.0 137929667.1
 [775]  39766248.2 174687338.7  74787700.3 194017265.0  45466197.6  72102159.0
 [781] 261535934.2 259586754.2 -11569164.6 106876683.9  85067091.6  13677893.8
 [787]  73337030.2 165859958.0 147645692.8 125215017.8 255219245.2 215694414.8
 [793]  88463269.4 -21268916.0 233729722.9  48944353.8  73905950.0   6407885.3
 [799] 136667078.5 123186421.4 242575635.8 248986316.9 -20092096.8 222629454.2
 [805]  49848974.4 192242199.6 245827982.4 268439801.3  80048537.0 -12569507.3
 [811] 246541804.1  36971862.0 126038561.5  20874570.0 116596951.2  66985839.3
 [817]  92512672.7  43785437.8 159574587.7 101297971.5 187020128.1 130556560.2
 [823]  64839481.7 158312053.8 105846022.4  74329660.8  31620236.6  49139812.5
 [829] 239240159.6  66858879.2 183857010.4 162517300.5  40847307.1  85802880.4
 [835] 223759911.8  22363199.8  24413534.1  53649952.9 -22338732.1 246073393.0
 [841] 211607390.3  73838461.1 165554455.8 144150950.8   6796048.5  92361025.8
 [847]  95219572.0 126106069.6  99983785.3 188296629.8 -17653037.9 167619083.4
 [853]  25335171.4 219306660.6  70277783.1 183524378.0 191090621.3 246345912.1
 [859] 165177884.2   6491891.3 252100909.9 129904435.5 236616811.6  78242609.8
 [865]  86727712.1 208450888.3  68750739.4 232088021.5  30924235.0 177469274.1
 [871] 164907930.3 252048331.9 133154181.0 -22279379.2  43874360.4 146053494.8
 [877]  79369612.5  52661496.2 268324886.4 140908604.8 197858963.2 131981520.4
 [883]  70235892.2 246941589.0  24138739.2 242507284.1 106450174.0 101521375.4
 [889]  -1333885.6  79530266.0  -2778415.8 258181852.8 200392070.7 134923856.6
 [895]  53291246.4 263896940.1  -8810780.1  27493483.5 272382077.4 214551907.1
 [901]  99252313.0   6864258.9 253904885.6 270507452.2 198334958.9 122432672.7
 [907] 261663926.4 129747189.3  89556506.5  17900267.2 132263920.5 254634056.1
 [913]  67963830.8 130373064.2 256434315.0 205387305.2 253618425.4  14857535.1
 [919]   4477775.1 185142060.0 187554231.8 -21559632.9  65351253.4 120889798.3
 [925] 226562812.3  33659840.9  37283019.0  47421777.1 120045107.1 261703719.7
 [931] 274779449.1 139618950.2  57657300.3  38806653.4 126834137.3  89475490.0
 [937]  52539840.5 125853651.6  -2661526.6  70035273.2 219727029.3 243604822.5
 [943] 191380239.9 -15211297.7  72346305.1 229876301.4 269954528.5 112363190.5
 [949]  33434018.9 255597337.9  -7949778.9  85112531.0   6074990.7 232755828.6
 [955]  43570689.9 138322852.3  -5260523.9 145206473.8 127144385.5 240350857.0
 [961]  74108218.7 160287107.5 150970245.6 153785249.5 251693370.2 189180011.9
 [967]  78218389.4  39261931.6  21298659.3  35583004.8 165257353.0 257918636.8
 [973] 133453697.7  96376861.9 146049865.8 167627668.1 193790714.1  94482440.9
 [979] 272715825.6  52228171.6  10274653.7  48101435.9 256911716.7 -16088090.2
 [985] 107536625.6  -7896058.1  56921877.3  52229228.4  30910400.3 175948152.0
 [991] 238790476.8   8120524.9 226069426.8 124056583.6  62008745.0 154729024.3
 [997] 173335484.6  58121393.9 106907024.9 223626386.6
hist(udcf2)

u2<-mean(udcf2)
u2
[1] 123345628
std2<-sd(udcf2)
std2
[1] 87842902

The more sample i extracted from uniform distribution population, the closer mean of samples is with mean of uniform distribution population.

Given the characteristics of a probability distribution we should be able to compute various probability scenarios using the proper functions in R.

##### 1D) Calculate the probability that the free cash flow is negative

In the formula \(F(x)=(x-a)/(b-a),where~x<=0\),\(F(x)=(0-(-25000000))/(275000000+25000000)=0.083333333\)

We will now repeat the above exercises 1A, 1B, 1C using instead a normal distribution.

##### 1E) Repeat steps A-C for the case of a portfolio daily returns with normal probability distribution,a mean=1.2% and a standard deviation= 3.7%

##step A 100 sample from normal probability distribution
returnsp1<-rnorm(100,mean = 0.012,sd=0.037)
returnsp1
  [1]  0.040267183  0.044355109  0.071536291  0.092088095  0.093792787
  [6]  0.030116050 -0.015622326 -0.100114911  0.016125264 -0.001377532
 [11] -0.037819015  0.019122074 -0.039083229  0.017671370  0.016815810
 [16] -0.007216261  0.002970092 -0.007799216  0.082165980 -0.020571825
 [21]  0.023202761  0.029830533  0.064364509 -0.001292286  0.017487363
 [26]  0.018607737 -0.002545700 -0.012210533 -0.036057107 -0.075795048
 [31]  0.077169681 -0.002898958 -0.009775244  0.034459550  0.007265953
 [36]  0.046046064  0.009422382  0.028041830 -0.010090225  0.027598157
 [41]  0.060845163  0.017908041  0.013230400  0.030020137 -0.068833491
 [46] -0.049184216 -0.018824309  0.063091365  0.021306961 -0.055556074
 [51]  0.062465807  0.034585773 -0.014102277  0.002218087  0.051018291
 [56]  0.113741409  0.042604828  0.012874867  0.001693535 -0.008133617
 [61]  0.002465431 -0.031391609 -0.018600473  0.064208334 -0.015496367
 [66]  0.039603294  0.010894871 -0.035246017  0.069536413 -0.006726914
 [71] -0.015672365  0.013422180  0.081598497  0.001259999  0.040959669
 [76]  0.037574699  0.113358268  0.027474652  0.021071059 -0.007027780
 [81]  0.012889977 -0.003142883  0.025573196  0.022008509  0.028635201
 [86]  0.010184814  0.022080392  0.041993461 -0.005368156  0.008677136
 [91] -0.006006913 -0.015810297  0.003935129  0.020654713  0.009077921
 [96]  0.040534852 -0.019076790  0.013428178 -0.014224323  0.072716692
## step B Plot a histogram and calculate the mean and standard deviation of your sample. Compare the mean and standard deviation of the sample to the theoretical values obtained using the proper formulas.
hist(returnsp1)

remean1<-mean(returnsp1)
remean1
[1] 0.01505251
returnsd1<-sd(returnsp1)
returnsd1
[1] 0.03819783
# step C by increasing the sample size to 1000. Share your insights.
returnsp2<-rnorm(1000,mean = 0.012,sd=0.037)
hist(returnsp2)

remean2<-mean(returnsp2)
remean2
[1] 0.01285766
returnsd2<-sd(returnsp2)
returnsd2
[1] 0.03687359

The more sample i extracted from normal distribution population, the closer vaule of mean and standard deviation of sample are with mean 1.2% and standard deviation 3.7%. Meanwhile, the more sample i extracted from normal distribution population, the more similar graph is with normal distribution graph.

Similarly we should be able to compute various probability senarios with our obtained normal distribution.

##### 1F) Calculate the probability that returns will be negative using the values for mean and standard deviation as in 1E

prob<-pnorm(0,mean=0.012,sd=0.037,lower.tail = TRUE)
prob
[1] 0.3728463

##### 1G) Repeat the calculation in 1F using instead the standard Z-value. Share insights.

z<-(0-0.012)/0.037
zprob<-pnorm(z,mean = 0,sd=1,lower.tail = TRUE)
zprob
[1] 0.3728463

The probability of normal distribution is same with the probability of standardization normal distribution. It means that standardization normal distribution can be used to compared with different order of magnitudes distribution. Standardization is like ruler to put different clothes in same scale and measure size.

Task 2: MC Simulation & European Option Pricing

Follow the Algorithm 5.2 example on p 167 (*) to calculate the price of a European option using a MC simulation. Note that the code in the book example is missing one detail and a correction. Those are left for your investigation.

##### 2A) Identify and explain the nature of the missing detail and the correction needed.

Missing detail is to reset price to current price and payoff to zero when next simulation is calculated. Correction is rnorm function. Random numbers created from normal distribution with zero mean and one variance. It should be rnorm(1,mean=0,sd=1)

Given the MC simulation we should be able to price a European option. Note the introduction of user defined function in the book. Below is an example of a user defined function and usage. The function returns the squared value.

myfunction <- function(x=2){
  y=x^2
return(y)}

myfunction(x=5)

##### 2B) Use MC simulation to price a European Call option on a stock with initial price of $155, strike price $140, a time to expiration equal to six months, a risk-free interest rate of 2.5% and a volatility of 23%. Consider a number of periods n=100 and a number of simulations m=1000

optionprice<-function(Type,S0,K,T,r,sigma,n,m){
  sum=0
  for (i in 1:m) { # number of simulations
    S=S0
    
    for (j in 1:n) { # length of path
        E<-rnorm(1,0,1) # rnorm 
        S=S+r*S*T/n+sigma*S*sqrt(T/n)*E 
    }
    if(Type=="c"){payoff=max(S-K,0)}
    else if(Type=="p"){payoff=max(K-S,0)}
    else{payoff=max(S-K,0)} # default
  sum=sum+payoff}
  optionvalue=(sum*exp(-r*T))/m
return(optionvalue)}
optionprice("c",155,140,0.5,0.025,0.23,100,1000)
[1] 20.39072

##### 2C) Write the mathematical representation of the discrete pricing equation modeled in the MC simulation. Explain what each variable in the equation represents, and provide the associated numerical value.

\(P_T=P_0e((u-1/2\sigma^2)T+\sigma\varepsilon\sqrt{T/n})\) where \(\varepsilon\)~N(0,1) and then if the type is call, option value=max(\(P_T\)-K,0); if the type is put, option value = max(K-\(P_T\),0). In the equation, u is 2.5% risk-free interest rate, \(\sigma\) is 23% volatility,T is 0.5,which means half year to expiration,and \(P_0\) is 155 current stock price. After \(P_T\) is cumulatively calculated, \(P_T\) has to be discounted to present value and average m number of simulations, which is 1000.

##### 2D) Compare the price obtained from the MC simulation to the option price using the Black-Scholes function pricing GBSOption(). Share insights.

#Install package fOptions for pricing and evaluating basic options
if(!require("fOptions",quietly = TRUE))
  install.packages("fOptions",dependencies = TRUE, repos = "https://cloud.r-project.org")
GBSOption(TypeFlag = "c", S = 155, X = 140, Time = 6/12, r = 0.025,b = 0.025, sigma = 0.23)

Title:
 Black Scholes Option Valuation 

Call:
 GBSOption(TypeFlag = "c", S = 155, X = 140, Time = 6/12, r = 0.025, 
     b = 0.025, sigma = 0.23)

Parameters:
          Value:
 TypeFlag c     
 S        155   
 X        140   
 Time     0.5   
 r        0.025 
 b        0.025 
 sigma    0.23  

Option Price:
 20.11899 

Description:
 Tue Jan 29 18:19:09 2019 

The option price calculated by GBSOption is constant, but the option price from Monte Carlo simulation varies around 19 to 21. but the precision option price of Monte Carlo simulation will be increased, increasing numbers of simulations.

*http://computationalfinance.lsi.upc.edu

LS0tCnRpdGxlOiAiRklOQzYyMSBXaW50ZXIgMjAxOC0xOSBMYWIgV29ya3NoZWV0IDA2IgphdXRob3I6ICJZdSBKaWEiCmRhdGU6ICIyMDE4LTAxLTIyIgpvdXRwdXQ6CiAgaHRtbF9ub3RlYm9vazogZGVmYXVsdAogIGh0bWxfZG9jdW1lbnQ6IGRlZmF1bHQKc3VidGl0bGU6IERpc3RyaWJ1dGlvbnMsIFNhbXBsaW5nIE1ldGhvZHMgJiBNb250ZSBDYXJsbyBTaW11bGF0aW9uICAoZmluYzYyMS1sYWIwNikKLS0tCgojIyMgQWJvdXQKCkluIHRoaXMgd29ya3NoZWV0IHdlIGxvb2sgYXQgZGlmZmVyZW50IGRpc3RyaWJ1dGlvbiBmdW5jdGlvbnMsIHNhbXBsaW5nIG1ldGhvZHMsIGFuZCBwcm9iYWJpbGl0eSBjYWxjdWxhdGlvbnMuICBOZXh0IHdlIGNvbnNpZGVyIGEgY2FsY3VsYXRpb24gb2YgYSBFdXJvcGVuIG9wdGlvbiB1c2luZyBNb250ZSBDYXJsbyBzaW11bGF0aW9uLCBhbmQgY29tcGFyZSByZXN1bHRzIHRvIGNhbGN1bGF0aW9uIHVzaW5nIEJsYWNrLVNjaG9sZXMuCgojIyMgU2V0dXAKClJlbWVtYmVyIHRvIGFsd2F5cyBzZXQgeW91ciB3b3JraW5nIGRpcmVjdG9yeSB0byB0aGUgc291cmNlIGZpbGUgbG9jYXRpb24uIEdvIHRvICdTZXNzaW9uJywgc2Nyb2xsIGRvd24gdG8gJ1NldCBXb3JraW5nIERpcmVjdG9yeScsIGFuZCBjbGljayAnVG8gU291cmNlIEZpbGUgTG9jYXRpb24nLiBSZWFkIGNhcmVmdWxseSB0aGUgYmVsb3cgYW5kIGZvbGxvdyB0aGUgaW5zdHJ1Y3Rpb25zIHRvIGNvbXBsZXRlIHRoZSB0YXNrcyBhbmQgYW5zd2VyIGFueSBxdWVzdGlvbnMuICBTdWJtaXQgeW91ciB3b3JrIHRvIFJQdWJzIGFzIGRldGFpbGVkIGluIHByZXZpb3VzIG5vdGVzLiAKCiMjIyBOb3RlCgpBbHdheXMgcmVhZCBjYXJlZnVsbHkgdGhlIGluc3RydWN0aW9ucyBvbiBTYWthaS4gIEZvciBjbGFyaXR5LCB0YXNrcy9xdWVzdGlvbnMgdG8gYmUgY29tcGxldGVkL2Fuc3dlcmVkIGFyZSBoaWdobGlnaHRlZCBpbiByZWQgY29sb3IgKHZpc2libGUgaW4gcHJldmlldykgYW5kIG51bWJlcmVkIGFjY29yZGluZyB0byB0aGVpciBwYXJ0aWN1bGFyIHBsYWNlbWVudCBpbiB0aGUgdGFzayBzZWN0aW9uLiAgUXVpdGUgb2Z0ZW4geW91IHdpbGwgbmVlZCB0byBhZGQgeW91ciBvd24gY29kZSBjaHVuay4KCkV4ZWN1dGUgYWxsIGNvZGUgY2h1bmtzLCBwcmV2aWV3LCBwdWJsaXNoLCBhbmQgc3VibWl0IGxpbmsgb24gU2FrYWkgZm9sbHdvaW5nIHRoZSBuYW1pbmcgY29udmVudGlvbi4gTWFrZSBzdXJlIHRvIGFkZCBjb21tZW50cyB0byB5b3VyIGNvZGUgd2hlcmUgYXBwcm9wcmlhdGUuIFVzZSBvd24gbGFuZ3VhZ2UhCgotLS0tLS0tLS0tLS0tLQoKIyMjIFRhc2sgMTogRGlzdHJpYnV0aW9uLCBTYW1wbGluZyAmIFByb2JhYmlsaXR5CgoKYGBge3J9CiNJbnN0YWxsIHBhY2thZ2UgcXVhbnRtb2QgCmlmKCFyZXF1aXJlKCJxdWFudG1vZCIscXVpZXRseSA9IFRSVUUpKQogIGluc3RhbGwucGFja2FnZXMoInF1YW50bW9kIixkZXBlbmRlbmNpZXMgPSBUUlVFLCByZXBvcyA9ICJodHRwczovL2Nsb3VkLnItcHJvamVjdC5vcmciKQpgYGAKCkNvbnNpZGVyIHRoZSBmcmVlIGNhc2ggZmxvdyBleGFtcGxlIHdpdGggYW4gZXN0aW1hdGVkIHJhbmdlIHNldCBieSBhIG1pbmltdW0gb2YgLSQyNU0gYW5kIG1heGltdW0gJDI3NU0uIFdlIHN0YXJ0IGJ5IGdlbmVyYXRpbmcgYSBzYW1wbGUgcmFuZG9tIHNldC4gRm9sbG93aW5nIGlzIGFuIGV4YW1wbGUgdG8gZ2VuZXJhdGUgYSByYW5kb20gc2V0IG9mIDEwIGRhdGEgcG9pbnRzIGZyb20gYSB1bmlmb3JtIGRpc3RyaWJ1dGlvbiB3aXRoIHByb2JhYmlsaXR5ICRcZnJhY3sxfXtiLWF9JCwgYSBtaW5pbXVtIG9mIGEsIGFuZCBhIG1heGltdW0gb2YgYi4KCgoKYGBge3J9CnVkID0gcnVuaWYoMTAsIG1pbj01LCBtYXg9MTUpICMgcnVuaWYgaXMgaW4gcmVmZXJlbmNlIHRvIHVuaWZvcm0gZGlzdHJpYnV0aW9uCgojIE90aGVyIFIgZnVuY3Rpb25zIG5lZWRlZCBmb3IgdGhpcyB0YXNrIGFyZSBoaXN0KCksIG1lYW4oKSwgc2QoKSwgcHVuaWYoKSwgcnVuaWYoKSwgIHBub3JtKCksIGFuZCBybm9ybSgpLiBDaGVjayB0aGUgSGVscCBjb21tYW5kIGluIFIgZm9yIG1vcmUgZGV0YWlscyBhYm91dCB0aGVzZSBmdW5jdGlvbnMuCmBgYAoKPHNwYW4gc3R5bGU9ImNvbG9yOnJlZCI+CiMjIyMjIDFBKSBBc3N1bWluZyBhIHVuaWZvcm0gcHJvYmFiaWxpdHkgZGlzdHJpYnV0aW9uLCAgZ2VuZXJhdGUgYSBzYW1wbGUgb2YgMTAwIHJhbmRvbSBvYnNlcnZhdGlvbnMgKG9yIGRldmlhdGVzKSByZXByZXNlbnRpbmcgdGhlIGNhc2ggZmxvd3MKPC9zcGFuPgpgYGB7cn0KdWRjZj1ydW5pZigxMDAsbWluID0gLTI1MDAwMDAwLG1heCA9IDI3NTAwMDAwMCkKdWRjZgpgYGAKCgpOZXh0IHdlIHBsb3QgYSBoaXN0b2dyYW0gdG8gZGVzY3JpYmUgdGhlIGdlbmVyYXRlZCBzYW1wbGUgZGF0YSwgYW5kIGNhbGN1bGF0ZSB0aGUgbWVhbiBhbmQgc3RhbmRhcmQgZGV2aWF0aW9uIG9mIHRoZSBzYW1wbGUgdXNpbmcgdGhlIHByb3BlciBSLWZ1bmN0aW9ucwoKPHNwYW4gc3R5bGU9ImNvbG9yOnJlZCI+CiMjIyMjIDFCKSBQbG90IGEgaGlzdG9ncmFtIGFuZCBjYWxjdWxhdGUgdGhlIG1lYW4gYW5kIHN0YW5kYXJkIGRldmlhdGlvbiBvZiB5b3VyIHNhbXBsZS4gQ29tcGFyZSB0aGUgbWVhbiBhbmQgc3RhbmRhcmQgZGV2aWF0aW9uIG9mIHRoZSBzYW1wbGUgdG8gdGhlIHRoZW9yZXRpY2FsIHZhbHVlcyBvYnRhaW5lZCB1c2luZyB0aGUgcHJvcGVyIGZvcm11bGFzLiAKPC9zcGFuPgpgYGB7cn0KaGlzdCh1ZGNmKQp1MTwtbWVhbih1ZGNmKQp1MQpzdGQxPC1zZCh1ZGNmKQpzdGQxCmE8LSgyNzUwMDAwMDArKC0yNTAwMDAwMCkpLzIKYGBgCk1hbnVhbGx5IGNhbGN1bGF0ZSAkbWVhbj0oMjc1MDAwMDAwKygtMjUwMDAwMDApKS8yPTEuMjVlKzgkLCBhbmQgU3RhbmRhcmQgRGV2aWF0aW9uJD0oMjc1MDAwMDAwLSgtMjUwMDAwMDApKV4yLzEyPTcuNWUrMTUkCgo8c3BhbiBzdHlsZT0iY29sb3I6cmVkIj4KIyMjIyMgMUMpIFJlcGVhdCAxQSAmIDFCICBhYm92ZSBieSBpbmNyZWFzaW5nIHRoZSBzYW1wbGUgc2l6ZSB0byAxMDAwLiBTaGFyZSB5b3VyIGluc2lnaHRzLgo8L3NwYW4+CmBgYHtyfQp1ZGNmMjwtcnVuaWYoMTAwMCxtaW4gPSAtMjUwMDAwMDAsbWF4ID0gMjc1MDAwMDAwKQp1ZGNmMgpoaXN0KHVkY2YyKQp1MjwtbWVhbih1ZGNmMikKdTIKc3RkMjwtc2QodWRjZjIpCnN0ZDIKYGBgClRoZSBtb3JlIHNhbXBsZSBpIGV4dHJhY3RlZCBmcm9tIHVuaWZvcm0gZGlzdHJpYnV0aW9uIHBvcHVsYXRpb24sIHRoZSBjbG9zZXIgbWVhbiBvZiBzYW1wbGVzIGlzIHdpdGggbWVhbiBvZiB1bmlmb3JtIGRpc3RyaWJ1dGlvbiBwb3B1bGF0aW9uLgoKR2l2ZW4gdGhlIGNoYXJhY3RlcmlzdGljcyBvZiBhIHByb2JhYmlsaXR5IGRpc3RyaWJ1dGlvbiB3ZSBzaG91bGQgYmUgYWJsZSB0byBjb21wdXRlIHZhcmlvdXMgcHJvYmFiaWxpdHkgc2NlbmFyaW9zIHVzaW5nIHRoZSBwcm9wZXIgZnVuY3Rpb25zIGluIFIuCgo8c3BhbiBzdHlsZT0iY29sb3I6cmVkIj4KIyMjIyMgMUQpIENhbGN1bGF0ZSB0aGUgcHJvYmFiaWxpdHkgdGhhdCB0aGUgZnJlZSBjYXNoIGZsb3cgaXMgbmVnYXRpdmUKPC9zcGFuPgoKSW4gdGhlIGZvcm11bGEgJEYoeCk9KHgtYSkvKGItYSksd2hlcmV+eDw9MCQsJEYoeCk9KDAtKC0yNTAwMDAwMCkpLygyNzUwMDAwMDArMjUwMDAwMDApPTAuMDgzMzMzMzMzJAoKV2Ugd2lsbCBub3cgcmVwZWF0IHRoZSBhYm92ZSBleGVyY2lzZXMgMUEsIDFCLCAxQyB1c2luZyBpbnN0ZWFkIGEgbm9ybWFsIGRpc3RyaWJ1dGlvbi4gCgo8c3BhbiBzdHlsZT0iY29sb3I6cmVkIj4KIyMjIyMgMUUpIFJlcGVhdCBzdGVwcyBBLUMgZm9yIHRoZSBjYXNlIG9mIGEgcG9ydGZvbGlvIGRhaWx5IHJldHVybnMgd2l0aCBub3JtYWwgcHJvYmFiaWxpdHkgZGlzdHJpYnV0aW9uLGEgbWVhbj0xLjIlIGFuZCBhIHN0YW5kYXJkIGRldmlhdGlvbj0gMy43JQo8L3NwYW4+CmBgYHtyfQojI3N0ZXAgQSAxMDAgc2FtcGxlIGZyb20gbm9ybWFsIHByb2JhYmlsaXR5IGRpc3RyaWJ1dGlvbgpyZXR1cm5zcDE8LXJub3JtKDEwMCxtZWFuID0gMC4wMTIsc2Q9MC4wMzcpCnJldHVybnNwMQojIyBzdGVwIEIgUGxvdCBhIGhpc3RvZ3JhbSBhbmQgY2FsY3VsYXRlIHRoZSBtZWFuIGFuZCBzdGFuZGFyZCBkZXZpYXRpb24gb2YgeW91ciBzYW1wbGUuIENvbXBhcmUgdGhlIG1lYW4gYW5kIHN0YW5kYXJkIGRldmlhdGlvbiBvZiB0aGUgc2FtcGxlIHRvIHRoZSB0aGVvcmV0aWNhbCB2YWx1ZXMgb2J0YWluZWQgdXNpbmcgdGhlIHByb3BlciBmb3JtdWxhcy4KaGlzdChyZXR1cm5zcDEpCnJlbWVhbjE8LW1lYW4ocmV0dXJuc3AxKQpyZW1lYW4xCnJldHVybnNkMTwtc2QocmV0dXJuc3AxKQpyZXR1cm5zZDEKCiMgc3RlcCBDIGJ5IGluY3JlYXNpbmcgdGhlIHNhbXBsZSBzaXplIHRvIDEwMDAuIFNoYXJlIHlvdXIgaW5zaWdodHMuCnJldHVybnNwMjwtcm5vcm0oMTAwMCxtZWFuID0gMC4wMTIsc2Q9MC4wMzcpCmhpc3QocmV0dXJuc3AyKQpyZW1lYW4yPC1tZWFuKHJldHVybnNwMikKcmVtZWFuMgpyZXR1cm5zZDI8LXNkKHJldHVybnNwMikKcmV0dXJuc2QyCmBgYApUaGUgbW9yZSBzYW1wbGUgaSBleHRyYWN0ZWQgZnJvbSBub3JtYWwgZGlzdHJpYnV0aW9uIHBvcHVsYXRpb24sIHRoZSBjbG9zZXIgdmF1bGUgb2YgbWVhbiBhbmQgc3RhbmRhcmQgZGV2aWF0aW9uIG9mIHNhbXBsZSBhcmUgd2l0aCBtZWFuIDEuMiUgYW5kIHN0YW5kYXJkIGRldmlhdGlvbiAzLjclLiAKTWVhbndoaWxlLCB0aGUgbW9yZSBzYW1wbGUgaSBleHRyYWN0ZWQgZnJvbSBub3JtYWwgZGlzdHJpYnV0aW9uIHBvcHVsYXRpb24sIHRoZSBtb3JlIHNpbWlsYXIgZ3JhcGggaXMgd2l0aCBub3JtYWwgZGlzdHJpYnV0aW9uIGdyYXBoLgoKU2ltaWxhcmx5IHdlIHNob3VsZCBiZSBhYmxlIHRvIGNvbXB1dGUgdmFyaW91cyBwcm9iYWJpbGl0eSBzZW5hcmlvcyB3aXRoIG91ciBvYnRhaW5lZCBub3JtYWwgZGlzdHJpYnV0aW9uLgoKPHNwYW4gc3R5bGU9ImNvbG9yOnJlZCI+CiMjIyMjIDFGKSBDYWxjdWxhdGUgdGhlIHByb2JhYmlsaXR5IHRoYXQgcmV0dXJucyB3aWxsIGJlIG5lZ2F0aXZlIHVzaW5nIHRoZSB2YWx1ZXMgZm9yIG1lYW4gYW5kIHN0YW5kYXJkIGRldmlhdGlvbiBhcyBpbiAxRQo8L3NwYW4+CmBgYHtyfQpwcm9iPC1wbm9ybSgwLG1lYW49MC4wMTIsc2Q9MC4wMzcsbG93ZXIudGFpbCA9IFRSVUUpCnByb2IKYGBgCgo8c3BhbiBzdHlsZT0iY29sb3I6cmVkIj4KIyMjIyMgMUcpIFJlcGVhdCB0aGUgY2FsY3VsYXRpb24gaW4gMUYgdXNpbmcgaW5zdGVhZCB0aGUgc3RhbmRhcmQgWi12YWx1ZS4gU2hhcmUgaW5zaWdodHMuCjwvc3Bhbj4KYGBge3J9Cno8LSgwLTAuMDEyKS8wLjAzNwp6cHJvYjwtcG5vcm0oeixtZWFuID0gMCxzZD0xLGxvd2VyLnRhaWwgPSBUUlVFKQp6cHJvYgpgYGAKVGhlIHByb2JhYmlsaXR5IG9mIG5vcm1hbCBkaXN0cmlidXRpb24gaXMgc2FtZSB3aXRoIHRoZSBwcm9iYWJpbGl0eSBvZiBzdGFuZGFyZGl6YXRpb24gbm9ybWFsIGRpc3RyaWJ1dGlvbi4gSXQgbWVhbnMgdGhhdCBzdGFuZGFyZGl6YXRpb24gbm9ybWFsIGRpc3RyaWJ1dGlvbiBjYW4gYmUgdXNlZCB0byBjb21wYXJlZCB3aXRoIGRpZmZlcmVudCBvcmRlciBvZiBtYWduaXR1ZGVzIGRpc3RyaWJ1dGlvbi4gU3RhbmRhcmRpemF0aW9uIGlzIGxpa2UgcnVsZXIgdG8gcHV0IGRpZmZlcmVudCBjbG90aGVzIGluIHNhbWUgc2NhbGUgYW5kIG1lYXN1cmUgc2l6ZS4KCgojIyMgVGFzayAyOiBNQyBTaW11bGF0aW9uICYgRXVyb3BlYW4gT3B0aW9uIFByaWNpbmcKCkZvbGxvdyB0aGUgYCBBbGdvcml0aG0gNS4yIGV4YW1wbGUgb24gcCAxNjcgKCopYCB0byBjYWxjdWxhdGUgdGhlIHByaWNlIG9mIGEgRXVyb3BlYW4gb3B0aW9uIHVzaW5nIGEgTUMgc2ltdWxhdGlvbi4gTm90ZSB0aGF0IHRoZSBjb2RlIGluIHRoZSBib29rIGV4YW1wbGUgaXMgbWlzc2luZyBvbmUgZGV0YWlsIGFuZCBhIGNvcnJlY3Rpb24uIFRob3NlIGFyZSBsZWZ0IGZvciB5b3VyIGludmVzdGlnYXRpb24uIAoKPHNwYW4gc3R5bGU9ImNvbG9yOnJlZCI+CiMjIyMjIDJBKSBJZGVudGlmeSBhbmQgZXhwbGFpbiB0aGUgbmF0dXJlIG9mIHRoZSBtaXNzaW5nIGRldGFpbCBhbmQgdGhlIGNvcnJlY3Rpb24gbmVlZGVkLiAgICAgIAo8L3NwYW4+CgpNaXNzaW5nIGRldGFpbCBpcyB0byByZXNldCBwcmljZSB0byBjdXJyZW50IHByaWNlIGFuZCBwYXlvZmYgdG8gemVybyB3aGVuIG5leHQgc2ltdWxhdGlvbiBpcyBjYWxjdWxhdGVkLgpDb3JyZWN0aW9uIGlzIHJub3JtIGZ1bmN0aW9uLiBSYW5kb20gbnVtYmVycyBjcmVhdGVkIGZyb20gbm9ybWFsIGRpc3RyaWJ1dGlvbiB3aXRoIHplcm8gbWVhbiBhbmQgb25lIHZhcmlhbmNlLiBJdCBzaG91bGQgYmUgcm5vcm0oMSxtZWFuPTAsc2Q9MSkKCgpHaXZlbiB0aGUgTUMgc2ltdWxhdGlvbiB3ZSBzaG91bGQgYmUgYWJsZSB0byBwcmljZSBhIEV1cm9wZWFuIG9wdGlvbi4gIE5vdGUgdGhlIGludHJvZHVjdGlvbiBvZiB1c2VyIGRlZmluZWQgZnVuY3Rpb24gaW4gdGhlIGJvb2suCkJlbG93IGlzIGFuIGV4YW1wbGUgb2YgYSB1c2VyIGRlZmluZWQgZnVuY3Rpb24gYW5kIHVzYWdlLiAgVGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIHNxdWFyZWQgdmFsdWUuCgpgYGB7cn0KbXlmdW5jdGlvbiA8LSBmdW5jdGlvbih4PTIpewogIHk9eF4yCnJldHVybih5KX0KCm15ZnVuY3Rpb24oeD01KQpgYGAKCgo8c3BhbiBzdHlsZT0iY29sb3I6cmVkIj4KIyMjIyMgMkIpIFVzZSBNQyBzaW11bGF0aW9uIHRvIHByaWNlIGEgRXVyb3BlYW4gQ2FsbCBvcHRpb24gb24gYSBzdG9jayB3aXRoIGluaXRpYWwgcHJpY2Ugb2YgJDE1NSwgc3RyaWtlIHByaWNlICQxNDAsIGEgdGltZSB0byBleHBpcmF0aW9uIGVxdWFsIHRvIHNpeCBtb250aHMsIGEgcmlzay1mcmVlIGludGVyZXN0IHJhdGUgb2YgMi41JSBhbmQgYSB2b2xhdGlsaXR5IG9mIDIzJS4gQ29uc2lkZXIgYSBudW1iZXIgb2YgcGVyaW9kcyBuPTEwMCBhbmQgYSBudW1iZXIgb2Ygc2ltdWxhdGlvbnMgbT0xMDAwCjwvc3Bhbj4KYGBge3J9Cm9wdGlvbnByaWNlPC1mdW5jdGlvbihUeXBlLFMwLEssVCxyLHNpZ21hLG4sbSl7CiAgc3VtPTAKICBmb3IgKGkgaW4gMTptKSB7ICMgbnVtYmVyIG9mIHNpbXVsYXRpb25zCiAgICBTPVMwCiAgICAKICAgIGZvciAoaiBpbiAxOm4pIHsgIyBsZW5ndGggb2YgcGF0aAogICAgICAgIEU8LXJub3JtKDEsMCwxKSAjIHJub3JtIAogICAgICAgIFM9UytyKlMqVC9uK3NpZ21hKlMqc3FydChUL24pKkUgCiAgICB9CiAgICBpZihUeXBlPT0iYyIpe3BheW9mZj1tYXgoUy1LLDApfQogICAgZWxzZSBpZihUeXBlPT0icCIpe3BheW9mZj1tYXgoSy1TLDApfQogICAgZWxzZXtwYXlvZmY9bWF4KFMtSywwKX0gIyBkZWZhdWx0CiAgc3VtPXN1bStwYXlvZmZ9CiAgb3B0aW9udmFsdWU9KHN1bSpleHAoLXIqVCkpL20KcmV0dXJuKG9wdGlvbnZhbHVlKX0KYGBgCgpgYGB7cn0Kb3B0aW9ucHJpY2UoImMiLDE1NSwxNDAsMC41LDAuMDI1LDAuMjMsMTAwLDEwMDApCgpgYGAKCjxzcGFuIHN0eWxlPSJjb2xvcjpyZWQiPgojIyMjIyAyQykgV3JpdGUgdGhlIG1hdGhlbWF0aWNhbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGlzY3JldGUgcHJpY2luZyBlcXVhdGlvbiBtb2RlbGVkIGluIHRoZSBNQyBzaW11bGF0aW9uLiBFeHBsYWluIHdoYXQgZWFjaCB2YXJpYWJsZSBpbiB0aGUgZXF1YXRpb24gcmVwcmVzZW50cywgYW5kIHByb3ZpZGUgdGhlIGFzc29jaWF0ZWQgbnVtZXJpY2FsIHZhbHVlLgo8L3NwYW4+CgokUF9UPVBfMGUoKHUtMS8yXHNpZ21hXjIpVCtcc2lnbWFcdmFyZXBzaWxvblxzcXJ0e1Qvbn0pJCB3aGVyZSAkXHZhcmVwc2lsb24kfk4oMCwxKQogYW5kIHRoZW4gaWYgdGhlIHR5cGUgaXMgY2FsbCwgb3B0aW9uIHZhbHVlPW1heCgkUF9UJC1LLDApOyBpZiB0aGUgdHlwZSBpcyBwdXQsIG9wdGlvbiB2YWx1ZSA9IG1heChLLSRQX1QkLDApLiBJbiB0aGUgZXF1YXRpb24sIHUgaXMgMi41JSByaXNrLWZyZWUgaW50ZXJlc3QgcmF0ZSwgJFxzaWdtYSQgaXMgMjMlIHZvbGF0aWxpdHksVCBpcyAwLjUsd2hpY2ggbWVhbnMgaGFsZiB5ZWFyIHRvIGV4cGlyYXRpb24sYW5kICRQXzAkIGlzIDE1NSBjdXJyZW50IHN0b2NrIHByaWNlLiBBZnRlciAkUF9UJCBpcyBjdW11bGF0aXZlbHkgY2FsY3VsYXRlZCwgJFBfVCQgaGFzIHRvIGJlIGRpc2NvdW50ZWQgdG8gcHJlc2VudCB2YWx1ZSBhbmQgYXZlcmFnZSBtIG51bWJlciBvZiBzaW11bGF0aW9ucywgd2hpY2ggaXMgMTAwMC4KIAogCjxzcGFuIHN0eWxlPSJjb2xvcjpyZWQiPgojIyMjIyAyRCkgQ29tcGFyZSB0aGUgcHJpY2Ugb2J0YWluZWQgZnJvbSB0aGUgTUMgc2ltdWxhdGlvbiB0byB0aGUgb3B0aW9uIHByaWNlIHVzaW5nIHRoZSBCbGFjay1TY2hvbGVzIGZ1bmN0aW9uIHByaWNpbmcgR0JTT3B0aW9uKCkuIFNoYXJlIGluc2lnaHRzLgo8L3NwYW4+CmBgYHtyfQojSW5zdGFsbCBwYWNrYWdlIGZPcHRpb25zIGZvciBwcmljaW5nIGFuZCBldmFsdWF0aW5nIGJhc2ljIG9wdGlvbnMKaWYoIXJlcXVpcmUoImZPcHRpb25zIixxdWlldGx5ID0gVFJVRSkpCiAgaW5zdGFsbC5wYWNrYWdlcygiZk9wdGlvbnMiLGRlcGVuZGVuY2llcyA9IFRSVUUsIHJlcG9zID0gImh0dHBzOi8vY2xvdWQuci1wcm9qZWN0Lm9yZyIpCmBgYAoKYGBge3J9CkdCU09wdGlvbihUeXBlRmxhZyA9ICJjIiwgUyA9IDE1NSwgWCA9IDE0MCwgVGltZSA9IDYvMTIsIHIgPSAwLjAyNSxiID0gMC4wMjUsIHNpZ21hID0gMC4yMykKYGBgCgpUaGUgb3B0aW9uIHByaWNlIGNhbGN1bGF0ZWQgYnkgR0JTT3B0aW9uIGlzIGNvbnN0YW50LCBidXQgdGhlIG9wdGlvbiBwcmljZSBmcm9tIE1vbnRlIENhcmxvIHNpbXVsYXRpb24gdmFyaWVzIGFyb3VuZCAxOSB0byAyMS4gYnV0IHRoZSBwcmVjaXNpb24gb3B0aW9uIHByaWNlIG9mIE1vbnRlIENhcmxvIHNpbXVsYXRpb24gd2lsbCBiZSBpbmNyZWFzZWQsIGluY3JlYXNpbmcgbnVtYmVycyBvZiBzaW11bGF0aW9ucy4KCipbaHR0cDovL2NvbXB1dGF0aW9uYWxmaW5hbmNlLmxzaS51cGMuZWR1IF0oaHR0cDovL2NvbXB1dGF0aW9uYWxmaW5hbmNlLmxzaS51cGMuZWR1KQo=