1. MPC response overview
As of 23 March 2023, a total of 360,787 persons or 74,612 families
have been reached by MPC interventions. A total of USD 10.9 million has
been disbursed by 14 implementing agencies across 22 sub-districts.
Only beneficiaries who have received at least USD 100/family/month
have been included.
360,787 people reached, USD 10.9 million disbursed, 23 March 2023
governorate | district | communities | partners | households | beneficiariesa | total_usd | %_beneficiariesb |
Aleppo | A'zaz | 3 | 4 | 1,340 | 6,700 | 201,000 | 1.86 |
Aleppo | Afrin | 74 | 6 | 19,018 | 95,030 | 2,852,700 | 26.34 |
Aleppo | Al Bab | 3 | 2 | 400 | 1,677 | 60,000 | 0.46 |
Aleppo | Jarablus | 1 | 3 | 400 | 2,005 | 60,000 | 0.56 |
Aleppo | Jebel Saman | 8 | 5 | 4,189 | 21,405 | 617,100 | 5.93 |
Idleb | Harim | 39 | 13 | 41,370 | 193,589 | 5,930,500 | 53.66 |
Idleb | Idleb | 11 | 5 | 5,366 | 27,357 | 785,430 | 7.58 |
Idleb | Jisr-Ash-Shugur | 16 | 4 | 2,529 | 13,024 | 349,620 | 3.61 |
Total | - | - | - | 74,612 | 360,787 | 10,856,350 | 100.00 |
aBeneficiary figures include only reported MPC with a minimum transfer value of USD 100 |
bAs percentage of all MPC beneficiaries reached in NW Syria |
225,619 beneficiaries were reached in February 2023 and 135,168 were
reached in March 2023.
2. Map of MPC beneficiaries and collective/reception centres
Data on cash response extracted from FSL
earthquake tracker on March 17 2023. Data on collective centres
extracted from March 15 2023.
A revised version of the map will be available for further reporting
with the revised 4Ws that includes all available codes for temporary
sites.
3. Geographic breakdown of beneficiaries
Coverage is highest in Afrin and Harim districts, which have been
worst-hit by the earthquake.
The current distribution of beneficiaries appears to be aligned with
the worst-hit districts: Harim and Afrin. The figures below only pertain
to populations within the AOC of Northwest Syria and not representative
of the entire district’s population.
Casualties and damaged houses, absolute figures and per 100,000
persons
governorate | district | wounded_dead1 | wounded_dead_100k1 | damaged_houses1 | damaged_houses_100k1 |
Aleppo | A'zaz | 356 | 57.87 | 276 | 44.86 |
Aleppo | Afrin | 2,232 | 478.79 | 2,910 | 624.22 |
Aleppo | Al Bab | 206 | 70.04 | 832 | 282.89 |
Aleppo | Jarablus | 40 | 33.82 | 257 | 217.30 |
Aleppo | Jebel Saman | 616 | 236.80 | 176 | 67.66 |
Idleb | Harim | 8,449 | 507.65 | 3,230 | 194.07 |
Idleb | Idleb | 350 | 48.23 | 946 | 130.37 |
Idleb | Jisr-Ash-Shugur | 595 | 183.68 | 1,915 | 591.18 |
1Data from the Assistance Coordination Unit, Syria 20230307 |
When reviewing the district-level spread of casualties and totally-
and partially-damaged houses, Harim and Afrin do stand out in terms of
the magnitude of the damage. Notably, the share of damaged houses in
Afrin is much higher than in Harim.
Following them, Jebel Saman and Jisr-ash-Shugur have the next most
severe damage, although, as can be seen from the table below, their
populations (within the area of control) are comparatively smaller.
Assessments are still ongoing and the CWG will update these tables
when new data becomes available.
Percentage of population reached by district
governorate | district | total_population1 | beneficiaries | %_reached | partners |
Aleppo | A'zaz | 615,194 | 6,700 | 1.09 | 4 |
Aleppo | Afrin | 466,179 | 95,030 | 20.38 | 6 |
Aleppo | Al Bab | 294,112 | 1,677 | 0.57 | 2 |
Aleppo | Jarablus | 118,271 | 2,005 | 1.70 | 3 |
Aleppo | Jebel Saman | 260,134 | 21,405 | 8.23 | 5 |
Idleb | Harim | 1,664,324 | 193,589 | 11.63 | 13 |
Idleb | Idleb | 725,644 | 27,357 | 3.77 | 5 |
Idleb | Jisr-Ash-Shugur | 323,929 | 13,024 | 4.02 | 4 |
1Total population of sub-districts within the NW AOC, persons not residing in the NW AOC have been excluded from this total |
Although the earthquake damage is not as severe in A’zaz, Al Bab,
Jarablus, Idleb and Jisr-ash-Shugur, a much higher proportion of needs
in these areas remain unmet, given the low percentages of persons
reached.
The establishment of subnational targets at the district and
sub-district level, will go some way towards clarifying how resources
should be allocated across the affected areas.
3.1 Breakdown by partner and district
Harim, by far and away has the highest concentration of partners
(12), double that of the next highest district (Afrin).
3.2 Scatterplot of sub-districts
The plot below shows the total population of each sub-district on the
x-axis (for the moment, all persons in these areas are assumed to be
affected and are included in the PIN) and the number of beneficiaries on
the y-axis.
The size of each point indicates the number of dead or wounded
persons there per 100,000.
Overall, we see fair alignment between the magnitude of the needs
(total population) and the number of beneficiaries – this is evidenced
by the blue line showing a positive relationship.
However, we do note several mismatches – Dana seems to have received
an outsized share of beneficiaries, especially when considering the
casualty rate. And Kafr Takharim seems to have been allocated relatively
fewer resources in comparison to the death toll there. The response in
Dana may be explained by a number of variables outside the scope of the
data collected by the earthquake response tracker, such as population
movements. Did earthquake survivors displace to Dana with the knowledge
that it was a well-served area, where a number of partners were already
operational? The CWG will conduct more consultations with partners to
understand such disparities.
4. Cash response actors and cash disbursed
In the scatterplot below, each point is a single cash working group
partner. The x-axis indicates the number of beneficiaries reached per
agency and the y-axis indicates the number of communities (admin4)
reached.
USD 10.9 million has been distributed across 155 communities and 22
sub-districts in NW Syria.
The table below summarises the information in the scatterplot above
in tabular form:
Reach and footprint of cash response actors
partner_code1 | beneficiaries | districts | communities |
CBR-004 | 66,685 | 3 | 65 |
CBR-006 | 39,000 | 3 | 17 |
CBR-044 | 36,145 | 4 | 10 |
CBR-013 | 27,045 | 7 | 39 |
CBR-008 | 26,703 | 3 | 26 |
CBR-032 | 15,900 | 1 | 3 |
CBR-035 | 15,642 | 4 | 12 |
CBR-038 | 12,000 | 1 | 1 |
CBR-031 | 8,961 | 7 | 21 |
CBR-005 | 8,565 | 4 | 14 |
CBR-042 | 7,008 | 1 | 4 |
CBR-040 | 5,000 | 1 | 1 |
CBR-041 | 3,277 | 2 | 2 |
CBR-037 | 2,500 | 1 | 1 |
1Only partners who provided more than USD 100/family/month |
4.1 USD disbursed by partner
There is very good compliance with CWG standards on the transfer
values of multipurpose cash interventions, as can be seen by the
usd_per_fam
column in the table below.
USD disbursed and families reached by partner
partner_code | usd_total | families | usd_per_fam | %_usd_total |
CBR-004 | 2,704,950 | 18,033 | 150.00 | 24.92 |
CBR-006 | 1,365,000 | 9,100 | 150.00 | 12.57 |
CBR-044 | 1,178,200 | 8,980 | 131.20 | 10.85 |
CBR-032 | 1,116,450 | 7,443 | 150.00 | 10.28 |
CBR-013 | 994,800 | 6,702 | 148.43 | 9.16 |
CBR-008 | 926,100 | 6,174 | 150.00 | 8.53 |
CBR-005 | 793,800 | 5,292 | 150.00 | 7.31 |
CBR-031 | 417,000 | 2,780 | 150.00 | 3.84 |
CBR-038 | 360,000 | 2,400 | 150.00 | 3.32 |
CBR-035 | 312,300 | 3,123 | 100.00 | 2.88 |
CBR-042 | 301,200 | 2,008 | 150.00 | 2.77 |
CBR-040 | 150,000 | 1,000 | 150.00 | 1.38 |
CBR-037 | 139,050 | 927 | 150.00 | 1.28 |
CBR-041 | 97,500 | 650 | 150.00 | 0.90 |
Below is a breakdown of beneficiaries and families reached by
cash-based activities of all values, not just those that qualify as
MPC.
USD transfer values for all cash-based activities, not just MPC
usd_transfer_value | families | beneficiaries1 | %_beneficiaries |
$25 | 180 | 850 | 0.21 |
$45 | 24 | 120 | 0.03 |
$50 | 7,062 | 35,310 | 8.88 |
$60 | 60 | 420 | 0.11 |
$100 | 5,699 | 31,618 | 7.95 |
$120 | 350 | 1,750 | 0.44 |
$130 | 2,000 | 10,000 | 2.52 |
$150 | 66,563 | 317,419 | 79.86 |
1Data from the FSL tracker, all cash response activities reported |
5. CCCM site tracker – searchable table
Data from CCCM
site tracker. Extracted 15 March 2023.
LS0tDQp0aXRsZTogIk5vcnRod2VzdCBTeXJpYSBDYXNoIFdvcmtpbmcgR3JvdXAgRWFydGhxdWFrZSBSZXNwb25zZSBCdWxsZXRpbiINCmRhdGU6ICAiMjMgTWFyY2ggMjAyMyINCm91dHB1dDoNCiAgaHRtbF9kb2N1bWVudDoNCiAgICBjb2RlX2Rvd25sb2FkOiB5ZXMNCiAgICB0aGVtZTogcmVhZGFibGUNCiAgICB0b2M6IHllcw0KICAgIHRvY19kZXB0aDogNA0KICAgIHRvY19mbG9hdDogeWVzDQogICAgbnVtYmVyX3NlY3Rpb25zOiBubw0KICAgIGNvbGxhcHNlZDogbm8NCmFsd2F5c19hbGxvd19odG1sOiB5ZXMNCi0tLQ0KDQpgYGB7Y3NzLCBlY2hvPUZBTFNFfQ0KDQojVE9DOjpiZWZvcmUgew0KICBjb250ZW50OiAiIjsNCiAgZGlzcGxheTogYmxvY2s7DQogIGhlaWdodDogNzBweDsNCiAgbWFyZ2luOiAyZW0gMjBweCA0MHB4IDIwcHg7DQogIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiTldTLUNXRyBsb2dvLlBORyIpOw0KICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47DQogIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciBjZW50ZXI7DQogIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7DQp9DQpgYGANCg0KYGBgez1odG1sfQ0KPHN0eWxlPg0KICAgIGJvZHkgLm1haW4tY29udGFpbmVyIHsNCiAgICAgICAgbWF4LXdpZHRoOiAxMjgwcHg7DQogICAgfQ0KPC9zdHlsZT4NCmBgYA0KDQoNCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBGQUxTRSwgZmlnLndpZHRoPTksIG1lc3NhZ2UgPSBGQUxTRSwgd2FybmluZz1GQUxTRSkNCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShyZWFkeGwpDQpsaWJyYXJ5KGx1YnJpZGF0ZSkNCmxpYnJhcnkoc3RyaW5naSkNCmxpYnJhcnkocGFuZGVyKQ0KbGlicmFyeShqYW5pdG9yKQ0KbGlicmFyeShzY2FsZXMpDQpsaWJyYXJ5KG1hZ3JpdHRyKQ0KbGlicmFyeSh2aXJpZGlzKQ0KbGlicmFyeShwYXRjaHdvcmspDQpsaWJyYXJ5KERUKQ0KbGlicmFyeShzZikNCmxpYnJhcnkocGxvdGx5KQ0KbGlicmFyeShmbGV4dGFibGUpDQpsaWJyYXJ5KGdncmVwZWwpDQpsaWJyYXJ5KG1hZ3JpdHRyKQ0KDQp0aGVtZV9zZXQodGhlbWVfbGlnaHQoKSkNCg0KIyBkaXNhYmxpbmcgc2NpZW50aWZpYyBub3RhdGlvbg0Kb3B0aW9ucyhzY2lwZW4gPSAxMDApDQoNCiMgcGFuZGVyIHRhYmxlcyBhbGwgaW4gb25lIHJvdw0KcGFuZGVyT3B0aW9ucygndGFibGUuc3BsaXQudGFibGUnLCBJbmYpDQoNCiMgcGFuZGVyIHRob3VzYW5kcyBzZXBhcmF0b3INCnBhbmRlck9wdGlvbnMoImJpZy5tYXJrIiwgIiwiKQ0KDQojIHJlcGxhY2UgDQpvcHRzIDwtIG9wdGlvbnMoa25pdHIua2FibGUuTkEgPSAiIikNCg0KYCVvdXQlYCA8LSBOZWdhdGUoYCVpbiVgKQ0KDQojIGZ1bmN0aW9uIGZvciB0cmFuc3Bvc2luZyBkZg0KdHJhbnNwb3NlX2RmIDwtIGZ1bmN0aW9uKGRmKSB7DQogIHRfZGYgPC0gZGF0YS50YWJsZTo6dHJhbnNwb3NlKGRmKQ0KICBjb2xuYW1lcyh0X2RmKSA8LSByb3duYW1lcyhkZikNCiAgcm93bmFtZXModF9kZikgPC0gY29sbmFtZXMoZGYpDQogIHRfZGYgPC0gdF9kZiAlPiUNCiAgICB0aWJibGU6OnJvd25hbWVzX3RvX2NvbHVtbiguZGF0YSA9IC4pICU+JQ0KICAgIHRpYmJsZTo6YXNfdGliYmxlKC4pDQogIHJldHVybih0X2RmKQ0KfQ0KDQojIGZ1bmN0aW9uIGJlbmVmaWNpYXJ5IHN1bW1hcmllcw0Kc3VtX2JlbiA8LSBmdW5jdGlvbihkZiwgY29sdW1uX3Zhcil7DQogIA0KICBjb2x1bW5fdmFyIDwtIGVucXVvKGNvbHVtbl92YXIpDQogIA0KICBkZiAlPiUNCiAgICBncm91cF9ieSghIWNvbHVtbl92YXIpICU+JSAjIG11c3QgYWRkIGJhbmctYmFuZw0KICAgIHN1bW1hcmlzZShiZW5lZmljaWFyaWVzID0gc3VtKG5ld19iZW5lZmljaWFyaWVzLCBuYS5ybSA9IFRSVUUpKSAlPiUgDQogICAgYXJyYW5nZShkZXNjKGJlbmVmaWNpYXJpZXMpKQ0KICAgIA0KfQ0KDQojIGZ1bmN0aW9uIGJlbmVmaWNpYXJ5IHN1bW1hcmllcywgMiBncm91cGVkIHZhcmlhYmxlcw0Kc3VtX2JlbjIgPC0gZnVuY3Rpb24oZGYsIGNvbHVtbl92YXIxLCBjb2x1bW5fdmFyMil7DQogIA0KICBjb2x1bW5fdmFyMSA8LSBlbnF1byhjb2x1bW5fdmFyMSkNCiAgY29sdW1uX3ZhcjIgPC0gZW5xdW8oY29sdW1uX3ZhcjIpDQogIA0KICBkZiAlPiUNCiAgICBncm91cF9ieSghIWNvbHVtbl92YXIxLCAhIWNvbHVtbl92YXIyKSAlPiUgIyBtdXN0IGFkZCBiYW5nLWJhbmcNCiAgICBzdW1tYXJpc2UoYmVuZWZpY2lhcmllcyA9IHN1bShuZXdfYmVuZWZpY2lhcmllcywgbmEucm0gPSBUUlVFKSwgLmdyb3VwcyA9ICJkcm9wIikNCiAgICANCn0NCg0KIyBzY2FsaW5nIGZ1bmN0aW9ucyANCnJhbmdlMDEgPC0gZnVuY3Rpb24oeCl7KHgtbWluKHgpKS8obWF4KHgpLW1pbih4KSl9DQpyYW5nZV93bmEgPC0gZnVuY3Rpb24oeCl7KHgtbWluKHgsIG5hLnJtID0gVFJVRSkpLyhtYXgoeCwgbmEucm0gPSBUUlVFKS1taW4oeCwgbmEucm0gPSBUUlVFKSl9DQoNCiNtb2RlIGZ1bmN0aW9uIA0KbW9kZSA8LSBmdW5jdGlvbih4KSB7DQogIHV4IDwtIHVuaXF1ZSh4KQ0KICB1eFt3aGljaC5tYXgodGFidWxhdGUobWF0Y2goeCwgdXgpKSldDQp9DQoNCmBgYA0KDQpgYGB7ciBkYXRhfQ0KcGNvZGUzX3NoYXBlIDwtIA0KICBzZjo6c3RfcmVhZCgiLi9kYXRhL3N5cl9hZG1ibmRhX3VuY3NfdW5vY2hhXzIwMjAxMjE3L3N5cl9hZG1ibmRhX2FkbTNfdW5jc191bm9jaGFfMjAyMDEyMTcuc2hwIiwgDQogICAgICAgICAgcXVpZXQgPSBUUlVFKQ0KDQpsb2NhdGlvbnMgPC0gcmVhZF9leGNlbCgiLi9kYXRhL0xvY2F0aW9ucy54bHN4IikgJT4lIA0KICBjbGVhbl9uYW1lcygpDQoNCmZzbCA8LSByZWFkX2NzdigiLi9kYXRhL2Zvcl9yZXBvcnQvZnNsLmNzdiIpICU+JSANCiAgbXV0YXRlKHBhcnRuZXJfY29kZSA9IGlmZWxzZShpcy5uYShwYXJ0bmVyX2NvZGUpLCAidGVtcF8xIiwgcGFydG5lcl9jb2RlKSkNCg0Kc2l0ZXMgPC0gcmVhZF9jc3YoIi4vZGF0YS9mb3JfcmVwb3J0L3NpdGVzLmNzdiIpDQoNCnJlbW92ZV9zaXRlcyA8LSByZWFkX2NzdigiLi9kYXRhL2Zvcl9yZXBvcnQvc2l0ZXNfbG9jYXRpb25zX2ZzbC5jc3YiKSAlPiUNCiAgZmlsdGVyKCFpcy5uYShsb25naXR1ZGVfeCkgJiAhaXMubmEobGF0aXR1ZGVfeSkpICU+JSANCiAgc3RfYXNfc2YoY29vcmRzID0gYygibG9uZ2l0dWRlX3giLCAibGF0aXR1ZGVfeSIpLCBjcnMgPSA0MzI2KSAlPiUNCiAgc3RfdHJhbnNmb3JtKHN0X2NycyhwY29kZTNfc2hhcGUpKSAlPiUgDQogIG11dGF0ZShpbnRlcnNlY3Rpb24gPSBhcy5pbnRlZ2VyKHN0X2ludGVyc2VjdHMoZ2VvbWV0cnksIHBjb2RlM19zaGFwZSkpLCANCiAgICAgICAgIGFyZWEgPSBpZmVsc2UoaXMubmEoaW50ZXJzZWN0aW9uKSwgIiIsIHBjb2RlM19zaGFwZSRBRE0zX1BDT0RFW2ludGVyc2VjdGlvbl0pKSAlPiUNCiAgZmlsdGVyKGlzLm5hKGludGVyc2VjdGlvbikpIA0KDQpzaXRlc19sb2NhdGlvbnNfZnNsIDwtIHJlYWRfY3N2KCIuL2RhdGEvZm9yX3JlcG9ydC9zaXRlc19sb2NhdGlvbnNfZnNsLmNzdiIpICU+JSANCiAgYW50aV9qb2luKHJlbW92ZV9zaXRlcywgYnkgPSBjKCJzaXRlX25hbWUiKSkNCg0KbmFtZXNfZXEgPC0gYygNCiAgImRhdGUiLA0KICAiZ292ZXJub3JhdGUiLA0KICAiZGlzdHJpY3QiLA0KICAic3ViX2Rpc3RyaWN0IiwNCiAgImNvbW11bml0eSIsDQogICJhZG1pbjQiLA0KICAiY2FzdWFsdGllcyIsDQogICJpbmp1cmllcyIsDQogICJjb21wbGV0ZWx5X2Rlc3Ryb3llZF9ob3VzZXMiLA0KICAiZGFtYWdlZF91bmloYWJpdGFibGVfaG91c2VzIiwNCiAgInRlbXBvcmFyeV9hY2NvbW1vZGF0aW9uX2NlbnRyZXMiLA0KICAiaWRwc19pbl9hbGxfY2VudHJlcyIsDQogICJzY2hvb2xzX2FzX2FjY29tb2RhdGlvbl9jZW50cmVzIiwNCiAgImlkcHNfaW5fc2Nob29scyIsDQogICJ0ZW50c19uZWVkZWQiLA0KICAiYmxhbmtldHNfbWF0dHJlc3Nlc19uZWVkZWQiLA0KICAidGVtcG9yYXJ5X2FjY29tbW9kYXRpb25fY2VudHJlc19hdmFpbGFibGUiLCANCiAgImFjY2Vzc2libGVfY2l2aWxfZGVmZW5zZSIsDQogICJsYXRyaW5lc19hdmFpbGFibGUiLA0KICAibWVhbHNfbmVlZGVkX3Blcl9kYXkiLA0KICAibmVlZF9ibG9vZF9kb25hdGlvbnMiLA0KICAiaGVhbHRoX3NlcnZpY2VzX2F2YWlsYWJsZSIsDQogICJuZWNlc3NhcnlfbWVkaWNhbF9lcXVpcG1lbnQiLA0KICAicnViYmxlX3ZvbHVudGVlcnMiLA0KICAidGVsZWNvbXNfYXZhaWxhYmxlIiwNCiAgImVsZWN0cmljaXR5X2F2YWlsYWJsZSIsIA0KICAiaGVhdGluZ19mdWVsX25lZWRlZCINCikNCg0KZXEgPC0gcmVhZF9leGNlbCgiLi9kYXRhL3N5cmlhLWVhcnRocXVha2UtaW1wYWN0LTA1LW1hcmNoLTIwMjMueGxzeCIsDQogICAgICAgICAgICAgICAgIHNoZWV0ID0gIkRBVEFTRVQiKSAlPiUgDQogIHNldE5hbWVzKG5hbWVzX2VxKSAlPiUgDQogIGxlZnRfam9pbihsb2NhdGlvbnMgJT4lIHNlbGVjdChhZG1pbjRwY29kZSwgYWRtaW4zcGNvZGUpLCANCiAgICAgICAgICAgIGJ5ID0gYygiYWRtaW40IiA9ICJhZG1pbjRwY29kZSIpKQ0KDQoNCmhubyA8LSByZWFkX2V4Y2VsKCIuL2RhdGEvMjAyM0hOT19QaU5fU2V2ZXJpdHlfZGV0YWlsZWRBb0lfRk9SU0hBUkUgMTUwMzIwMjMueGxzeCIsIHNraXAgPSAxLCANCiAgICAgICAgICAgICAgICAgIHNoZWV0ID0gMSkgJT4lDQogIGNsZWFuX25hbWVzKCkNCg0KbndfcGNvZGUzIDwtIGhubyAlPiUgDQogIGZpbHRlcihhb19jID09ICJOVyIpICU+JSANCiAgcHVsbChhZG1pbjNwY29kZSkNCg0KIyBud19wY29kZTMgJT4lIA0KIyAgIGFzX3RpYmJsZSgpICU+JSANCiMgICB3cml0ZV9jc3YoIm53X3Bjb2RlMy5jc3YiKQ0KYGBgDQoNCg0KDQo8YnI+PGJyPjxicj4NCg0KIyAxLiBNUEMgcmVzcG9uc2Ugb3ZlcnZpZXcNCg0KQXMgb2YgMjMgTWFyY2ggMjAyMywgYSB0b3RhbCBvZiBgciBmc2wgJT4lIGZpbHRlcihhY3Rpdml0eSA9PSAiQ2FzaCBSZXNwb25zZSIgJiBwbGFubmVkX2ltcGxlbWVudGVkID09ICJJbXBsZW1lbnRlZCIpICU+JSB7c3VtKC4kYmVuZWZpY2lhcmllcyl9ICU+JSBmb3JtYXQoYmlnLm1hcmsgPSAiLCIpYCBwZXJzb25zIG9yIGByIGZzbCAlPiUgZmlsdGVyKGFjdGl2aXR5ID09ICJDYXNoIFJlc3BvbnNlIiAmIHBsYW5uZWRfaW1wbGVtZW50ZWQgPT0gIkltcGxlbWVudGVkIikgJT4lIHtzdW0oLiRmYW1pbGllcyl9ICU+JSBmb3JtYXQoYmlnLm1hcmsgPSAiLCIpYCBmYW1pbGllcyBoYXZlIGJlZW4gcmVhY2hlZCBieSBNUEMgaW50ZXJ2ZW50aW9ucy4gDQpBIHRvdGFsIG9mIFVTRCBgciBwYXN0ZShmb3JtYXQocm91bmQoKGZzbCAlPiUgZmlsdGVyKGFjdGl2aXR5ID09ICJDYXNoIFJlc3BvbnNlIiAmIHBsYW5uZWRfaW1wbGVtZW50ZWQgPT0gIkltcGxlbWVudGVkIikgJT4lIG11dGF0ZSh1c2RfdG90YWwgPSBmYW1pbGllcyAqIHF1YW50aXR5KSAlPiUgIHtzdW0oLiR1c2RfdG90YWwpfSkgLyAxMDAwMDAwLCAxKSwgdHJpbSA9IFRSVUUpLCAibWlsbGlvbiIpYCBoYXMgYmVlbiBkaXNidXJzZWQgYnkgYHIgZnNsICU+JSBmaWx0ZXIoYWN0aXZpdHkgPT0gIkNhc2ggUmVzcG9uc2UiICYgcGxhbm5lZF9pbXBsZW1lbnRlZCA9PSAiSW1wbGVtZW50ZWQiKSAlPiUgc3VtbWFyaXNlKG5fZGlzdGluY3QocGFydG5lcl9jb2RlKSkgJT4lIHB1bGwoKWAgaW1wbGVtZW50aW5nIGFnZW5jaWVzIGFjcm9zcyBgciBmc2wgJT4lIGZpbHRlcihhY3Rpdml0eSA9PSAiQ2FzaCBSZXNwb25zZSIgJiBwbGFubmVkX2ltcGxlbWVudGVkID09ICJJbXBsZW1lbnRlZCIpICU+JSBzdW1tYXJpc2Uobl9kaXN0aW5jdChhZG1pbjNwY29kZSkpICU+JSBwdWxsKClgIHN1Yi1kaXN0cmljdHMuIA0KDQpPbmx5IGJlbmVmaWNpYXJpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgYXQgbGVhc3QgVVNEIDEwMC9mYW1pbHkvbW9udGggaGF2ZSBiZWVuIGluY2x1ZGVkLg0KDQoNCjxicj4NCg0KYGBge3Igc3VtbWFyeSB0YWJsZX0NCmZzbCAlPiUgDQogIGZpbHRlcihhY3Rpdml0eSA9PSAiQ2FzaCBSZXNwb25zZSIgJiBwbGFubmVkX2ltcGxlbWVudGVkID09ICJJbXBsZW1lbnRlZCIpICU+JQ0KICBtdXRhdGUodXNkX3RvdGFsID0gZmFtaWxpZXMgKiBxdWFudGl0eSkgJT4lIA0KICBncm91cF9ieShnb3Zlcm5vcmF0ZSwgZGlzdHJpY3QpICU+JSANCiAgc3VtbWFyaXNlKHBhcnRuZXJzID0gbl9kaXN0aW5jdChwYXJ0bmVyX2NvZGUpLCANCiAgICAgICAgICAgIGNvbW11bml0aWVzID0gbl9kaXN0aW5jdChhZG1pbjRwY29kZSksIA0KICAgICAgICAgICAgaG91c2Vob2xkcyA9IHN1bShmYW1pbGllcywgbmEucm0gPSBUUlVFKSwgDQogICAgICAgICAgICBiZW5lZmljaWFyaWVzID0gc3VtKGJlbmVmaWNpYXJpZXMsIG5hLnJtID0gVFJVRSksIA0KICAgICAgICAgICAgdG90YWxfdXNkID0gc3VtKHVzZF90b3RhbCwgbmEucm0gPSBUUlVFKSkgJT4lIA0KICB1bmdyb3VwKCkgJT4lIA0KICBtdXRhdGUoYCVfYmVuZWZpY2lhcmllc2AgPSANCiAgICAgICAgICAgcm91bmQoYmVuZWZpY2lhcmllcyAvIHN1bShiZW5lZmljaWFyaWVzLCBuYS5ybSA9IFRSVUUpICogMTAwLCBkaWdpdHMgPSAyKSkgJT4lDQogIGFkb3JuX3RvdGFscygicm93IiwsLCwgaG91c2Vob2xkcywgYmVuZWZpY2lhcmllcywgdG90YWxfdXNkLCBgJV9iZW5lZmljaWFyaWVzYCkgJT4lIA0KICBtdXRhdGUoYCVfYmVuZWZpY2lhcmllc2AgPSBpZmVsc2UoYCVfYmVuZWZpY2lhcmllc2AgPiA5OS45OCwgMTAwLCBgJV9iZW5lZmljaWFyaWVzYCkpICU+JSANCiAgc2VsZWN0KGdvdmVybm9yYXRlLCBkaXN0cmljdCwgY29tbXVuaXRpZXMsIHBhcnRuZXJzLCANCiAgICAgICAgIGhvdXNlaG9sZHMsIGJlbmVmaWNpYXJpZXMsIHRvdGFsX3VzZCwgYCVfYmVuZWZpY2lhcmllc2ApICU+JSANCiAgZmxleHRhYmxlKCkgJT4lIA0KICBzZXRfY2FwdGlvbigiMzYwLDc4NyBwZW9wbGUgcmVhY2hlZCwgVVNEIDEwLjkgbWlsbGlvbiBkaXNidXJzZWQsIDIzIE1hcmNoIDIwMjMiKSAlPiUgDQogIHRoZW1lX3plYnJhKCkgJT4lIA0KICBmb290bm90ZShpID0gMSwgaiA9IDYsIHBhcnQgPSAiaGVhZGVyIiwgcmVmX3N5bWJvbHMgPSAiYSIsDQogICAgICAgICAgIGFzX3BhcmFncmFwaCgiQmVuZWZpY2lhcnkgZmlndXJlcyBpbmNsdWRlIG9ubHkgcmVwb3J0ZWQgTVBDIHdpdGggYSBtaW5pbXVtIHRyYW5zZmVyIHZhbHVlIG9mIFVTRCAxMDAiKSkgJT4lIA0KICBmb290bm90ZShpID0gMSwgaiA9IDgsIHBhcnQgPSAiaGVhZGVyIiwgcmVmX3N5bWJvbHMgPSAiYiIsICANCiAgICAgICAgICAgYXNfcGFyYWdyYXBoKCJBcyBwZXJjZW50YWdlIG9mIGFsbCBNUEMgYmVuZWZpY2lhcmllcyByZWFjaGVkIGluIE5XIFN5cmlhIikpIA0KDQogIA0KYGBgDQo8YnI+DQoNCmBgYHtyIGV2YWwgPSBGQUxTRX0NCg0KIyBKdXN0IGJyZWFrZG93biBieSBtb250aCAtLSBkb24ndCBrbm93IHdoeSBJIGRpZCBhIGxpbmUgcGxvdCBpbnN0ZWFkIG9mIGEgYmFycGxvdCwgDQojIG1heWJlIGJhcnBsb3Qgd2hlbiB0aGVyZSBhcmUgbW9yZSBtb250aHMgDQoNCmZzbCAlPiUgDQogIGZpbHRlcihhY3Rpdml0eSA9PSAiQ2FzaCBSZXNwb25zZSIsIHBsYW5uZWRfaW1wbGVtZW50ZWQgPT0gIkltcGxlbWVudGVkIikgJT4lIA0KICBtdXRhdGUobW9udGggPSBtb250aChkaXN0cmlidXRpb25fZGF0ZSkpICU+JSANCiAgZ3JvdXBfYnkobW9udGgpICU+JSANCiAgc3VtbWFyaXNlKGJlbmVmaWNpYXJpZXMgPSBzdW0oYmVuZWZpY2lhcmllcykpDQpgYGANCg0KDQoyMjUsNjE5IGJlbmVmaWNpYXJpZXMgd2VyZSByZWFjaGVkIGluIEZlYnJ1YXJ5IDIwMjMgYW5kIDEzNSwxNjggd2VyZSByZWFjaGVkIGluIE1hcmNoIDIwMjMuIA0KDQo8YnI+DQoNCmBgYHtyfQ0KZnNsICU+JSANCiAgbXV0YXRlKGRpc3RyaWJ1dGlvbl9kYXRlID0gYXMuRGF0ZShkaXN0cmlidXRpb25fZGF0ZSkpICU+JSANCiAgZmlsdGVyKGFjdGl2aXR5ID09ICJDYXNoIFJlc3BvbnNlIiAmIHBsYW5uZWRfaW1wbGVtZW50ZWQgPT0gIkltcGxlbWVudGVkIikgJT4lIA0KICBncm91cF9ieShkaXN0cmlidXRpb25fZGF0ZSkgJT4lIA0KICBzdW1tYXJpc2UoYmVuZWZpY2lhcmllcyA9IHN1bShiZW5lZmljaWFyaWVzKSkgJT4lIA0KICBhcnJhbmdlKGRpc3RyaWJ1dGlvbl9kYXRlKSAlPiUgDQogIG11dGF0ZShjdW1fYmVuID0gY3Vtc3VtKGJlbmVmaWNpYXJpZXMpKSAlPiUgDQogIG11dGF0ZShjdW1fbGFiZWwgPSBpZmVsc2UoY3VtX2JlbiAlaW4lIGMoMjE0NSwgMjI1NjE5LCAzNjA3ODcpLCBjdW1fYmVuLCAiIiksIA0KICAgICAgICAgY3VtX2xhYmVsID0gYXMuZG91YmxlKGN1bV9sYWJlbCkpICU+JSANCiAgZ2dwbG90KGFlcyh4ID0gZGlzdHJpYnV0aW9uX2RhdGUsIHkgPSBjdW1fYmVuKSkgKyANCiAgZ2VvbV9saW5lKGNvbG91ciA9ICJibHVlIikgKyANCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IHNjYWxlczo6Y29tbWEoY3VtX2xhYmVsKSksIHZqdXN0ID0gLS42LCANCiAgICAgICAgICAgIHNpemUgPSA0KSArIA0KICBzY2FsZV94X2RhdGUoZGF0ZV9icmVha3MgPSAiMSB3ZWVrIiwgZGF0ZV9sYWJlbHMgPSAiJWQtJWIiKSArDQogIHNjYWxlX3lfY29udGludW91cyhsYWJlbHMgPSBjb21tYSwgZXhwYW5kID0gZXhwYW5zaW9uKG11bHQgPSAuMSkpICsgDQogIGxhYnMoeCA9ICJEaXN0cmlidXRpb24gZGF0ZSIsIA0KICAgICAgIHkgPSAiQ3VtdWxhdGl2ZSBiZW5lZmljaWFyaWVzIiwgDQogICAgICAgdGl0bGUgPSAiTVBDIHByb2dyZXNzIGJ5IGRhdGUiLCANCiAgICAgICBzdWJ0aXRsZSA9ICJUaGUgZWFybGllc3QgZGlzdHJpYnV0aW9uIHdhcyAyMDIzLTAyLTA5IikgIA0KICANCiAgDQoNCg0KYGBgDQoNCg0KDQo8YnI+PGJyPjxicj4NCg0KDQojIDIuIE1hcCBvZiBNUEMgYmVuZWZpY2lhcmllcyBhbmQgY29sbGVjdGl2ZS9yZWNlcHRpb24gY2VudHJlcw0KDQoNCjxicj4NCg0KDQpgYGB7ciBwbG90bHktc2l0ZXN9DQoNCnNpdGVfbWFwIDwtIHNpdGVzX2xvY2F0aW9uc19mc2wgJT4lIA0KICBsZWZ0X2pvaW4obG9jYXRpb25zICU+JSBzZWxlY3QoYWRtaW4zcGNvZGUsIGFkbWluNHBjb2RlKSwgDQogICAgICAgICAgICBieSA9ICJhZG1pbjRwY29kZSIpICU+JQ0KICByaWdodF9qb2luKHBjb2RlM19zaGFwZSwgDQogICAgICAgICAgICAgYnkgPSBjKCJhZG1pbjNwY29kZSIgPSAiQURNM19QQ09ERSIpKSAlPiUgDQogIGZpbHRlcihBRE0xX1BDT0RFICVpbiUgYygiU1kwMiIsICJTWTA3IikpICU+JSANCiAgc3RfYXNfc2YoKSAlPiUgDQogIG11dGF0ZSh0eXBlID0gZmN0X3JlbGV2ZWwodHlwZSwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYygiUkMvSURQIiwgIkJlbmVmaWNpYXJpZXMiKSkpICU+JSANCiAgZ2dwbG90KCkgKyANCiAgZ2VvbV9zZihzaXplID0gMC4xLCBjb2xvdXIgPSAiZ3JleTcwIikgKw0KICBnZW9tX3BvaW50KGFlcyhzaXplID0gcGVyc29ucywgDQogICAgICAgICAgICAgICAgICBjb2xvdXIgPSB0eXBlLA0KICAgICAgICAgICAgICAgICAgeCA9IGxvbmdpdHVkZV94LCB5ID0gbGF0aXR1ZGVfeSwNCiAgICAgICAgICAgICAgICAgIHRleHQgPSBwYXN0ZTAoInN1Yl9kaXN0cmljdDogIiwgc3ViX2Rpc3RyaWN0LCAiXG4iLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2l0ZTogIiwgc2l0ZV9uYW1lLCAiXG4iLCAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwZXJzb25zOiAiLCBwZXJzb25zLCAiXG4iLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGU6ICIsIHR5cGUsICJcbiIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibG9uX3g6ICIsIGxvbmdpdHVkZV94LCAiXG4iLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsYXRfeTogIiwgbGF0aXR1ZGVfeSkpLCANCiAgICAgICAgICAgICBzaGFwZSA9IDIxLCBzdHJva2UgPSAuMg0KICAgICAgICAgICAgICMgQWRqdXN0aW5nIGFscGhhIHdvbid0IGFmZmVjdCBhIHBsb3RseQ0KICAgICAgICAgICAgICkgKw0KICBzY2FsZV9zaXplX2NvbnRpbnVvdXMobGFiZWxzID0gY29tbWEpICsNCiAgdGhlbWVfdm9pZCgpICsgDQogIHRoZW1lKHBsb3QuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0gIndoaXRlIiwgY29sb3VyID0gTkEpLCANCiAgICAgICAgcGxvdC5jYXB0aW9uID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSwgDQogICAgICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikgKw0KICBsYWJzKHRpdGxlID0gIkNvbGxlY3RpdmUvcmVjZXB0aW9uIGNlbnRyZXMgYW5kIE1QQyBiZW5lZmljaWFyaWVzIiwgDQogICAgICAgc3VidGl0bGUgPSAiSURQcyBpbiByZWQsIGJlbmVmaWNpYXJpZXMgaW4gYmx1ZSwgc2l6ZSBzaG93cyBudW1iZXIgb2YgcGVyc29ucyIpDQoNCmdncGxvdGx5KHNpdGVfbWFwLCB0b29sdGlwID0gYygidGV4dCIpKSAlPiUgDQogIHBsb3RseTo6c3R5bGUoaG92ZXJvbiA9ICJwb2ludCIpICU+JSANCiAgbGF5b3V0KHRpdGxlID0gbGlzdCh0ZXh0ID0gcGFzdGUwKCJDb2xsZWN0aXZlIGNlbnRyZXMgYW5kIGNhc2ggcmVzcG9uc2UgYmVuZWZpY2lhcmllcyIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxicj4iLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8c3VwPiIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIklEUHMgaW4gcmVkLCBiZW5lZmljaWFyaWVzIGluIGJsdWUsIHNpemUgc2hvd3MgbnVtYmVyIG9mIHBlcnNvbnM7IGNsaWNrIGFuZCBkcmFnIHRvIHpvb207IG1vdXNlIG92ZXIgZm9yIGRldGFpbHMiKSkpIA0KDQojIFdpbGwgdGhpcyB3b3JrPyANCiMgJT4lIHBhcnRpYWxfYnVuZGxlKCkNCg0KIyBnZ3NhdmUoInNpdGVfbWFwLnBuZyIsIGRwaSA9IDMwMCwgaGVpZ2h0ID0gOC4yNywgd2lkdGggPSAxMS42OSwgdW5pdHMgPSAiaW4iKQ0KYGBgDQoNCjxicj4NCg0KRGF0YSBvbiBjYXNoIHJlc3BvbnNlIGV4dHJhY3RlZCBmcm9tIFtGU0wgZWFydGhxdWFrZSB0cmFja2VyXShodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9zcHJlYWRzaGVldHMvZC8xS0dxdC0zWURoMms4cU5Da3NPSkFuZFJQTzU2R3E2cEdzNmVzRVF0SUZJdy9lZGl0I2dpZD0xODkwOTgxMTE1KSBvbiBNYXJjaCAxNyAyMDIzLiBEYXRhIG9uIGNvbGxlY3RpdmUgY2VudHJlcyBleHRyYWN0ZWQgZnJvbSBNYXJjaCAxNSAyMDIzLiANCg0KQSByZXZpc2VkIHZlcnNpb24gb2YgdGhlIG1hcCB3aWxsIGJlIGF2YWlsYWJsZSBmb3IgZnVydGhlciByZXBvcnRpbmcgd2l0aCB0aGUgcmV2aXNlZCA0V3MgdGhhdCBpbmNsdWRlcyBhbGwgYXZhaWxhYmxlIGNvZGVzIGZvciB0ZW1wb3Jhcnkgc2l0ZXMuIA0KDQoNCjxicj48YnI+DQoNCg0KIyAzLiBHZW9ncmFwaGljIGJyZWFrZG93biBvZiBiZW5lZmljaWFyaWVzDQoNCkNvdmVyYWdlIGlzIGhpZ2hlc3QgaW4gQWZyaW4gYW5kIEhhcmltIGRpc3RyaWN0cywgd2hpY2ggaGF2ZSBiZWVuIHdvcnN0LWhpdCBieSB0aGUgZWFydGhxdWFrZS4gDQoNCjxicj4NCg0KYGBge3J9DQpmc2wgJT4lIA0KICBmaWx0ZXIoYWN0aXZpdHkgPT0gIkNhc2ggUmVzcG9uc2UiICYgcGxhbm5lZF9pbXBsZW1lbnRlZCA9PSAiSW1wbGVtZW50ZWQiKSAlPiUgDQogIG11dGF0ZShnb3Zlcm5vcmF0ZSA9IGlmZWxzZShnb3Zlcm5vcmF0ZSA9PSAiaWRsZWIiLCAiSWRsZWIiLCBnb3Zlcm5vcmF0ZSksDQogICAgICAgICBkaXN0cmljdCA9IGlmZWxzZShkaXN0cmljdCA9PSAiaWRsZWIiLCAiSWRsZWIiLCBkaXN0cmljdCkpICU+JSANCiAgZ3JvdXBfYnkoZ292ZXJub3JhdGUsIGRpc3RyaWN0KSAlPiUgDQogIHN1bW1hcmlzZShiZW5lZmljaWFyaWVzID0gc3VtKGJlbmVmaWNpYXJpZXMsIG5hLnJtID0gVFJVRSkpICU+JSANCiAgbXV0YXRlKGRpc3RyaWN0ID0gZmN0X3Jlb3JkZXIoZGlzdHJpY3QsIGJlbmVmaWNpYXJpZXMpLCANCiAgICAgICAgIGdvdmVybm9yYXRlID0gZmN0X3JlbGV2ZWwoZ292ZXJub3JhdGUsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjKCJJZGxpYiIsICJBbGVwcG8iKSkpICU+JSANCiAgZ2dwbG90KGFlcyh4ID0gYmVuZWZpY2lhcmllcywgeSA9IGRpc3RyaWN0KSkgKyANCiAgZ2VvbV9jb2woYWVzKGZpbGwgPSBnb3Zlcm5vcmF0ZSkpICsgDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBjb21tYShiZW5lZmljaWFyaWVzKSksIA0KICAgICAgICAgICAgaGp1c3QgPSAiaW53YXJkIikgKyANCiAgc2NhbGVfZmlsbF92aXJpZGlzX2QoYmVnaW4gPSAuMykgKyANCiAgbGFicyh0aXRsZSA9ICJNUEMgYmVuZWZpY2lhcmllcyBieSBkaXN0cmljdCIsIA0KICAgICAgIHN1YnRpdGxlID0gImFzIG9mIDIzIE1hcmNoIDIwMjMiLCANCiAgICAgICB5ID0gIiIpICsgDQogIHNjYWxlX3hfY29udGludW91cyhsYWJlbHMgPSBjb21tYSkgKyANCg0KaG5vICU+JSANCiAgZmlsdGVyKGFkbWluMm5hbWVfZW4gJWluJSBjKCJIYXJpbSIsICJJZGxlYiIsICJKaXNyLUFzaC1TaHVndXIiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFmcmluIiwgIkplYmVsIFNhbWFuIiwgIkEnemF6IiwgIkphcmFibHVzIiwgIkFsIEJhYiIpKSAlPiUgDQogIGdyb3VwX2J5KGdvdmVybm9yYXRlID0gYWRtaW4xbmFtZV9lbiwgZGlzdHJpY3QgPSBhZG1pbjJuYW1lX2VuKSAlPiUgDQogIHN1bW1hcmlzZSh0b3RhbF9wb3B1bGF0aW9uID0gc3VtKHRvdGFsX3BvcHVsYXRpb24sIG5hLnJtID0gVFJVRSkpICU+JSANCiAgbGVmdF9qb2luKA0KICAgIGZzbCAlPiUNCiAgICAgIGZpbHRlcihhY3Rpdml0eSA9PSAiQ2FzaCBSZXNwb25zZSIgJiBwbGFubmVkX2ltcGxlbWVudGVkID09ICJJbXBsZW1lbnRlZCIpICU+JSANCiAgICAgIG11dGF0ZShnb3Zlcm5vcmF0ZSA9IGlmZWxzZShnb3Zlcm5vcmF0ZSA9PSAiaWRsZWIiLCAiSWRsZWIiLCBnb3Zlcm5vcmF0ZSksDQogICAgICAgICAgICAgZGlzdHJpY3QgPSBpZmVsc2UoZGlzdHJpY3QgPT0gImlkbGViIiwgIklkbGViIiwgZGlzdHJpY3QpKSAlPiUgDQogICAgICBncm91cF9ieShkaXN0cmljdCkgJT4lIA0KICAgICAgc3VtbWFyaXNlKGJlbmVmaWNpYXJpZXMgPSBzdW0oYmVuZWZpY2lhcmllcywgbmEucm0gPSBUUlVFKSkgLCAgDQogIGJ5ID0gImRpc3RyaWN0IikgJT4lIA0KICBtdXRhdGUoZGlzdHJpY3QgPSBmY3RfcmVvcmRlcihkaXN0cmljdCwgYmVuZWZpY2lhcmllcyksIA0KICAgICAgICAgZ292ZXJub3JhdGUgPSBmY3RfcmVsZXZlbChnb3Zlcm5vcmF0ZSwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMoIklkbGliIiwgIkFsZXBwbyIpKSwgDQogICAgICAgICBwY19yZWFjaGVkID0gcm91bmQoYmVuZWZpY2lhcmllcyAvIHRvdGFsX3BvcHVsYXRpb24gKiAxMDAsIGRpZ2l0cyA9IDEpKSAlPiUgDQogIGdncGxvdChhZXMoeCA9IHBjX3JlYWNoZWQsIHkgPSBkaXN0cmljdCkpICsNCiAgZ2VvbV9jb2woYWVzKGZpbGwgPSBnb3Zlcm5vcmF0ZSkpICsgDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBjb21tYShwY19yZWFjaGVkKSksIA0KICAgICAgICAgICAgaGp1c3QgPSAiaW53YXJkIikgKw0KICBzY2FsZV9maWxsX3ZpcmlkaXNfZChiZWdpbiA9IC4zKSArIA0KICBsYWJzKHRpdGxlID0gIlBlcmNlbnQgb2YgcG9wdWxhdGlvbiByZWFjaGVkIiwgDQogICAgICAgc3VidGl0bGUgPSAiYXMgb2YgMjMgTWFyY2ggMjAyMyIsIA0KICAgICAgIHkgPSAiIiwgDQogICAgICAgeCA9ICIlIG9mIHBvcHVsYXRpb24gcmVhY2hlZCIpICsNCiAgDQogIHBsb3RfbGF5b3V0KGd1aWRlcyA9ICJjb2xsZWN0IikgJiANCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIpDQoNCg0KYGBgDQoNCjxicj4NCg0KVGhlIGN1cnJlbnQgZGlzdHJpYnV0aW9uIG9mIGJlbmVmaWNpYXJpZXMgYXBwZWFycyB0byBiZSBhbGlnbmVkIHdpdGggdGhlIHdvcnN0LWhpdCBkaXN0cmljdHM6IEhhcmltIGFuZCBBZnJpbi4gVGhlIGZpZ3VyZXMgYmVsb3cgb25seSBwZXJ0YWluIHRvIHBvcHVsYXRpb25zIHdpdGhpbiB0aGUgQU9DIG9mIE5vcnRod2VzdCBTeXJpYSBhbmQgbm90IHJlcHJlc2VudGF0aXZlIG9mIHRoZSBlbnRpcmUgZGlzdHJpY3QncyBwb3B1bGF0aW9uLiANCg0KPGJyPg0KDQoNCmBgYHtyfQ0KZXEgJT4lIA0KICBmaWx0ZXIoYWRtaW4zcGNvZGUgJWluJSBud19wY29kZTMgJiANCiAgICAgICAgICAgZGlzdHJpY3QgJWluJSBjKCJIYXJpbSIsICJJZGxlYiIsICJKaXNyLUFzaC1TaHVndXIiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFmcmluIiwgIkplYmVsIFNhbWFuIiwgIkEnemF6IiwgIkphcmFibHVzIiwgIkFsIEJhYiIpKSAlPiUgDQogIGdyb3VwX2J5KGdvdmVybm9yYXRlLCBkaXN0cmljdCkgJT4lIA0KICBzdW1tYXJpc2UoY2FzdWFsdGllcyA9IHN1bShjYXN1YWx0aWVzLCBuYS5ybSA9IFRSVUUpLCANCiAgICAgICAgICAgIGluanVyaWVzID0gc3VtKGluanVyaWVzLCBuYS5ybSA9IFRSVUUpLCANCiAgICAgICAgICAgIHRvdGFsbHlfZGFtYWdlZCA9IHN1bShjb21wbGV0ZWx5X2Rlc3Ryb3llZF9ob3VzZXMsIG5hLnJtID0gVFJVRSksIA0KICAgICAgICAgICAgcGFydGlhbGx5X2RhbWFnZWQgPSBzdW0oZGFtYWdlZF91bmloYWJpdGFibGVfaG91c2VzLCBuYS5ybSA9IFRSVUUpKSAlPiUNCiAgIyBXaGVyZSBpcyBBcmloYSwgYW5kIHdoeSBpcyBpdCBzaG93aW5nIHVwIGhlcmUNCiAgZmlsdGVyKGRpc3RyaWN0ICE9ICJBcmloYSIpICU+JSANCiAgbGVmdF9qb2luKGhubyAlPiUgDQogICAgICAgICAgICAgIGZpbHRlcihhZG1pbjNwY29kZSAlaW4lIG53X3Bjb2RlMyAmDQogICAgICAgICAgICAgICAgICAgICAgIGFkbWluMm5hbWVfZW4gJWluJSBjKCJIYXJpbSIsICJJZGxlYiIsICJKaXNyLUFzaC1TaHVndXIiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFmcmluIiwgIkplYmVsIFNhbWFuIiwgIkEnemF6IiwgIkphcmFibHVzIiwgIkFsIEJhYiIpKSAlPiUNCiAgICAgICAgICAgICAgZ3JvdXBfYnkoZGlzdHJpY3QgPSBhZG1pbjJuYW1lX2VuKSAlPiUNCiAgICAgICAgICAgICAgc3VtbWFyaXNlKHBvcHVsYXRpb24gPSBzdW0odG90YWxfcG9wdWxhdGlvbiwgbmEucm0gPSBUUlVFKSksIGJ5ID0gImRpc3RyaWN0IikgJT4lIA0KICBtdXRhdGUod291bmRlZF9kZWFkID0gY2FzdWFsdGllcyArIGluanVyaWVzLCANCiAgICAgICAgIGRhbWFnZWRfaG91c2VzID0gdG90YWxseV9kYW1hZ2VkICsgcGFydGlhbGx5X2RhbWFnZWQsIA0KICAgICAgICAgd291bmRlZF9kZWFkXzEwMGsgPSByb3VuZCh3b3VuZGVkX2RlYWQgLyBwb3B1bGF0aW9uICogMTAwMDAwLCBkaWdpdHMgPSAyKSwgDQogICAgICAgICBkYW1hZ2VkX2hvdXNlc18xMDBrID0gcm91bmQoZGFtYWdlZF9ob3VzZXMgLyBwb3B1bGF0aW9uICogMTAwMDAwLCBkaWdpdHMgPSAyKSkgJT4lIA0KICBzZWxlY3QoZ292ZXJub3JhdGUsIGRpc3RyaWN0LCB3b3VuZGVkX2RlYWQsIHdvdW5kZWRfZGVhZF8xMDBrLCANCiAgICAgICAgIGRhbWFnZWRfaG91c2VzLCBkYW1hZ2VkX2hvdXNlc18xMDBrKSAlPiUgDQogIGZsZXh0YWJsZSgpICU+JSANCiAgdGhlbWVfemVicmEoKSAlPiUgDQogIHNldF90YWJsZV9wcm9wZXJ0aWVzKGxheW91dCA9ICJhdXRvZml0Iiwgd2lkdGggPSAuOTkpICU+JSANCiAgc2V0X2NhcHRpb24oIkNhc3VhbHRpZXMgYW5kIGRhbWFnZWQgaG91c2VzLCBhYnNvbHV0ZSBmaWd1cmVzIGFuZCBwZXIgMTAwLDAwMCBwZXJzb25zIikgJT4lIA0KICBmb290bm90ZShpID0gMSwgaiA9IDM6NiwgcGFydCA9ICJoZWFkZXIiLA0KICAgICAgICAgICBhc19wYXJhZ3JhcGgoIkRhdGEgZnJvbSB0aGUgQXNzaXN0YW5jZSBDb29yZGluYXRpb24gVW5pdCwgU3lyaWEgMjAyMzAzMDciKSkNCg0KDQpgYGANCg0KPGJyPg0KDQpXaGVuIHJldmlld2luZyB0aGUgZGlzdHJpY3QtbGV2ZWwgc3ByZWFkIG9mIGNhc3VhbHRpZXMgYW5kIHRvdGFsbHktIGFuZCBwYXJ0aWFsbHktZGFtYWdlZCBob3VzZXMsIEhhcmltIGFuZCBBZnJpbiBkbyBzdGFuZCBvdXQgaW4gdGVybXMgb2YgdGhlIG1hZ25pdHVkZSBvZiB0aGUgZGFtYWdlLiBOb3RhYmx5LCB0aGUgc2hhcmUgb2YgZGFtYWdlZCBob3VzZXMgaW4gQWZyaW4gaXMgbXVjaCBoaWdoZXIgdGhhbiBpbiBIYXJpbS4gDQoNCkZvbGxvd2luZyB0aGVtLCBKZWJlbCBTYW1hbiBhbmQgSmlzci1hc2gtU2h1Z3VyIGhhdmUgdGhlIG5leHQgbW9zdCBzZXZlcmUgZGFtYWdlLCBhbHRob3VnaCwgYXMgY2FuIGJlIHNlZW4gZnJvbSB0aGUgdGFibGUgYmVsb3csIHRoZWlyIHBvcHVsYXRpb25zICh3aXRoaW4gdGhlIGFyZWEgb2YgY29udHJvbCkgYXJlIGNvbXBhcmF0aXZlbHkgc21hbGxlci4gDQoNCkFzc2Vzc21lbnRzIGFyZSBzdGlsbCBvbmdvaW5nIGFuZCB0aGUgQ1dHIHdpbGwgdXBkYXRlIHRoZXNlIHRhYmxlcyB3aGVuIG5ldyBkYXRhIGJlY29tZXMgYXZhaWxhYmxlLiANCg0KPGJyPg0KDQoNCmBgYHtyfQ0KDQpobm8gJT4lIA0KICBmaWx0ZXIoYWRtaW4ybmFtZV9lbiAlaW4lIGMoIkhhcmltIiwgIklkbGViIiwgIkppc3ItQXNoLVNodWd1ciIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQWZyaW4iLCAiSmViZWwgU2FtYW4iLCAiQSd6YXoiLCAiSmFyYWJsdXMiLCAiQWwgQmFiIikgJg0KICAgICAgICAgICBhb19jID09ICJOVyIpICU+JSANCiAgZ3JvdXBfYnkoZ292ZXJub3JhdGUgPSBhZG1pbjFuYW1lX2VuLCBkaXN0cmljdCA9IGFkbWluMm5hbWVfZW4pICU+JSANCiAgc3VtbWFyaXNlKHRvdGFsX3BvcHVsYXRpb24gPSBzdW0odG90YWxfcG9wdWxhdGlvbiwgbmEucm0gPSBUUlVFKSkgJT4lIA0KICBsZWZ0X2pvaW4oDQogICAgZnNsICU+JQ0KICAgICAgZmlsdGVyKGFjdGl2aXR5ID09ICJDYXNoIFJlc3BvbnNlIiAmIHBsYW5uZWRfaW1wbGVtZW50ZWQgPT0gIkltcGxlbWVudGVkIikgJT4lIA0KICAgICAgbXV0YXRlKGdvdmVybm9yYXRlID0gaWZlbHNlKGdvdmVybm9yYXRlID09ICJpZGxlYiIsICJJZGxlYiIsIGdvdmVybm9yYXRlKSwNCiAgICAgICAgICAgICBkaXN0cmljdCA9IGlmZWxzZShkaXN0cmljdCA9PSAiaWRsZWIiLCAiSWRsZWIiLCBkaXN0cmljdCkpICU+JSANCiAgICAgIGdyb3VwX2J5KGRpc3RyaWN0KSAlPiUgDQogICAgICBzdW1tYXJpc2UoYmVuZWZpY2lhcmllcyA9IHN1bShiZW5lZmljaWFyaWVzLCBuYS5ybSA9IFRSVUUpLCANCiAgICAgICAgICAgICAgICBwYXJ0bmVycyA9IG5fZGlzdGluY3QocGFydG5lcl9jb2RlKSkgLCAgDQogIGJ5ID0gImRpc3RyaWN0IikgJT4lIA0KICBtdXRhdGUoYCVfcmVhY2hlZGAgPSByb3VuZChiZW5lZmljaWFyaWVzIC8gdG90YWxfcG9wdWxhdGlvbiAqIDEwMCwgZGlnaXRzID0gMikpICU+JSANCiAgcmVsb2NhdGUocGFydG5lcnMsIC5hZnRlciA9IGxhc3RfY29sKCkpICU+JSANCiAgZmxleHRhYmxlKCkgJT4lIA0KICB0aGVtZV96ZWJyYSgpICU+JSANCiAgc2V0X3RhYmxlX3Byb3BlcnRpZXMobGF5b3V0ID0gImF1dG9maXQiLCB3aWR0aCA9IC44KSAlPiUgDQogIHNldF9jYXB0aW9uKCJQZXJjZW50YWdlIG9mIHBvcHVsYXRpb24gcmVhY2hlZCBieSBkaXN0cmljdCIpICU+JSANCiAgZm9vdG5vdGUoaSA9IDEsIGogPSAzLCBwYXJ0ID0gImhlYWRlciIsIA0KICAgICAgICAgICBhc19wYXJhZ3JhcGgoIlRvdGFsIHBvcHVsYXRpb24gb2Ygc3ViLWRpc3RyaWN0cyB3aXRoaW4gdGhlIE5XIEFPQywgcGVyc29ucyBub3QgcmVzaWRpbmcgaW4gdGhlIE5XIEFPQyBoYXZlIGJlZW4gZXhjbHVkZWQgZnJvbSB0aGlzIHRvdGFsIikpDQpgYGANCg0KPGJyPg0KDQpBbHRob3VnaCB0aGUgZWFydGhxdWFrZSBkYW1hZ2UgaXMgbm90IGFzIHNldmVyZSBpbiBBJ3pheiwgQWwgQmFiLCBKYXJhYmx1cywgSWRsZWIgYW5kIEppc3ItYXNoLVNodWd1ciwgYSBtdWNoIGhpZ2hlciBwcm9wb3J0aW9uIG9mIG5lZWRzIGluIHRoZXNlIGFyZWFzIHJlbWFpbiB1bm1ldCwgZ2l2ZW4gdGhlIGxvdyBwZXJjZW50YWdlcyBvZiBwZXJzb25zIHJlYWNoZWQuIA0KDQpUaGUgZXN0YWJsaXNobWVudCBvZiBzdWJuYXRpb25hbCB0YXJnZXRzIGF0IHRoZSBkaXN0cmljdCBhbmQgc3ViLWRpc3RyaWN0IGxldmVsLCB3aWxsIGdvIHNvbWUgd2F5IHRvd2FyZHMgY2xhcmlmeWluZyBob3cgcmVzb3VyY2VzIHNob3VsZCBiZSBhbGxvY2F0ZWQgYWNyb3NzIHRoZSBhZmZlY3RlZCBhcmVhcy4gDQoNCg0KPGJyPjxicj4NCg0KIyMgMy4xIEJyZWFrZG93biBieSBwYXJ0bmVyIGFuZCBkaXN0cmljdA0KDQpIYXJpbSwgYnkgZmFyIGFuZCBhd2F5IGhhcyB0aGUgaGlnaGVzdCBjb25jZW50cmF0aW9uIG9mIHBhcnRuZXJzICgxMiksIGRvdWJsZSB0aGF0IG9mIHRoZSBuZXh0IGhpZ2hlc3QgZGlzdHJpY3QgKEFmcmluKS4gDQoNCjxicj4NCg0KYGBge3J9DQoNCg0Kc3RhY2tfdGV4dCA8LSBmc2wgJT4lIA0KICBmaWx0ZXIoYWN0aXZpdHkgPT0gIkNhc2ggUmVzcG9uc2UiICYgcGxhbm5lZF9pbXBsZW1lbnRlZCA9PSAiSW1wbGVtZW50ZWQiKSAlPiUgDQogIGdyb3VwX2J5KGdvdmVybm9yYXRlLCBkaXN0cmljdCkgJT4lIA0KICBzdW1tYXJpc2UodG90YWwgPSBzdW0oYmVuZWZpY2lhcmllcywgbmEucm0gPSBUUlVFKSkgJT4lIA0KICBtdXRhdGUoZGlzdHJpY3QgPSBmY3RfcmVsZXZlbChkaXN0cmljdCwgYygiSGFyaW0iLCAiSWRsZWIiLCAiSmlzci1Bc2gtU2h1Z3VyIiwgDQogICJBZnJpbiIsICJKZWJlbCBTYW1hbiIsICJBJ3pheiIsICJKYXJhYmx1cyIsICJBbCBCYWIiKSkpDQoNCnN0YWNrIDwtIGZzbCAlPiUgDQogIGZpbHRlcihhY3Rpdml0eSA9PSAiQ2FzaCBSZXNwb25zZSIgJiBwbGFubmVkX2ltcGxlbWVudGVkID09ICJJbXBsZW1lbnRlZCIpICU+JSANCiAgZ3JvdXBfYnkoZGlzdHJpY3QsIHBhcnRuZXJfY29kZSkgJT4lIA0KICBzdW1tYXJpc2UoYmVuZWZpY2lhcmllcyA9IHN1bShiZW5lZmljaWFyaWVzLCBuYS5ybSA9IFRSVUUpKSAlPiUgDQogIHVuZ3JvdXAoKSAlPiUNCiAgbXV0YXRlKGRpc3RyaWN0ID0gZmN0X3JlbGV2ZWwoZGlzdHJpY3QsIGMoIkhhcmltIiwgIklkbGViIiwgIkppc3ItQXNoLVNodWd1ciIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBZnJpbiIsICJKZWJlbCBTYW1hbiIsICJBJ3pheiIsICJKYXJhYmx1cyIsICJBbCBCYWIiKSksIA0KICAgICAgICAgZGlzdHJpY3QgPSBmY3RfcmV2KGRpc3RyaWN0KSkgJT4lDQogIGdncGxvdChhZXMoeSA9IGRpc3RyaWN0LCANCiAgICAgICAgICAgICB4ID0gYmVuZWZpY2lhcmllcykpICsNCiAgZ2VvbV9jb2woYWVzKGZpbGwgPSBwYXJ0bmVyX2NvZGUpKSArIA0KICBnZW9tX3RleHQoZGF0YSA9IHN0YWNrX3RleHQsIA0KICAgICAgICAgICAgYWVzKHggPSB0b3RhbCArIDYwMDAsIA0KICAgICAgICAgICAgICAgIGxhYmVsID0gc2NhbGVzOjpjb21tYSh0b3RhbCkpKSArIA0KICBzY2FsZV94X2NvbnRpbnVvdXMobGFiZWxzID0gY29tbWEpICsgDQogIGxhYnMoeSA9ICIiLCANCiAgICAgICB4ID0gIkJlbmVmaWNpYXJpZXMiLCANCiAgICAgICB0aXRsZSA9ICJQYXJ0bmVyIGFjaGlldmVtZW50cyBieSBkaXN0cmljdCwgMjAyMzAzMTciKSArIA0KICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpDQoNCmdncGxvdGx5KHN0YWNrLCB0b29sdGlwID0gYygiZmlsbCIsICJ4IiwgInkiKSkgJT4lIA0KICBsYXlvdXQodGl0bGUgPSBsaXN0KHRleHQgPSBwYXN0ZTAoIlBhcnRuZXIgYWNoaWV2ZW1lbnRzIGJ5IGRpc3RyaWN0LCAyMDIzMDMxNyIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxicj4iLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8c3VwPiIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1vdXNlIG92ZXIgZm9yIGRldGFpbHMiKSkpDQoNCmBgYA0KDQo8YnI+PGJyPg0KDQojIyAzLjIgU2NhdHRlcnBsb3Qgb2Ygc3ViLWRpc3RyaWN0cyANCg0KVGhlIHBsb3QgYmVsb3cgc2hvd3MgdGhlIHRvdGFsIHBvcHVsYXRpb24gb2YgZWFjaCBzdWItZGlzdHJpY3Qgb24gdGhlIHgtYXhpcyAoZm9yIHRoZSBtb21lbnQsIGFsbCBwZXJzb25zIGluIHRoZXNlIGFyZWFzIGFyZSBhc3N1bWVkIHRvIGJlIGFmZmVjdGVkIGFuZCBhcmUgaW5jbHVkZWQgaW4gdGhlIFBJTikgYW5kIHRoZSBudW1iZXIgb2YgYmVuZWZpY2lhcmllcyBvbiB0aGUgeS1heGlzLiANCg0KVGhlIHNpemUgb2YgZWFjaCBwb2ludCBpbmRpY2F0ZXMgdGhlIG51bWJlciBvZiBkZWFkIG9yIHdvdW5kZWQgcGVyc29ucyB0aGVyZSBwZXIgMTAwLDAwMC4gDQoNCjxicj4NCg0KDQpgYGB7ciwgZHBpID0gMzAwLCBmaWcuaGVpZ2h0PTZ9DQplcSAlPiUgDQogIGZpbHRlcihhZG1pbjNwY29kZSAlaW4lIG53X3Bjb2RlMyAmIA0KICAgICAgICAgICBkaXN0cmljdCAlaW4lIGMoIkhhcmltIiwgIklkbGViIiwgIkppc3ItQXNoLVNodWd1ciIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQWZyaW4iLCAiSmViZWwgU2FtYW4iLCAiQSd6YXoiLCAiSmFyYWJsdXMiLCAiQWwgQmFiIikpICU+JSANCiAgZ3JvdXBfYnkoZ292ZXJub3JhdGUsIGRpc3RyaWN0LCBzdWJfZGlzdHJpY3QsIGFkbWluM3Bjb2RlKSAlPiUgDQogIHN1bW1hcmlzZShjYXN1YWx0aWVzID0gc3VtKGNhc3VhbHRpZXMsIG5hLnJtID0gVFJVRSksIA0KICAgICAgICAgICAgaW5qdXJpZXMgPSBzdW0oaW5qdXJpZXMsIG5hLnJtID0gVFJVRSksIA0KICAgICAgICAgICAgdG90YWxseV9kYW1hZ2VkID0gc3VtKGNvbXBsZXRlbHlfZGVzdHJveWVkX2hvdXNlcywgbmEucm0gPSBUUlVFKSwgDQogICAgICAgICAgICBwYXJ0aWFsbHlfZGFtYWdlZCA9IHN1bShkYW1hZ2VkX3VuaWhhYml0YWJsZV9ob3VzZXMsIG5hLnJtID0gVFJVRSkpICU+JQ0KICAjIFdoZXJlIGlzIEFyaWhhLCBhbmQgd2h5IGlzIGl0IHNob3dpbmcgdXAgaGVyZQ0KICBmaWx0ZXIoZGlzdHJpY3QgIT0gIkFyaWhhIikgJT4lIA0KICBsZWZ0X2pvaW4oaG5vICU+JSANCiAgICAgICAgICAgICAgZmlsdGVyKGFkbWluM3Bjb2RlICVpbiUgbndfcGNvZGUzICYNCiAgICAgICAgICAgICAgICAgICAgICAgYWRtaW4ybmFtZV9lbiAlaW4lIGMoIkhhcmltIiwgIklkbGViIiwgIkppc3ItQXNoLVNodWd1ciIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQWZyaW4iLCAiSmViZWwgU2FtYW4iLCAiQSd6YXoiLCAiSmFyYWJsdXMiLCAiQWwgQmFiIikpICU+JQ0KICAgICAgICAgICAgICBncm91cF9ieShhZG1pbjNwY29kZSkgJT4lDQogICAgICAgICAgICAgIHN1bW1hcmlzZShwb3B1bGF0aW9uID0gc3VtKHRvdGFsX3BvcHVsYXRpb24sIG5hLnJtID0gVFJVRSkpLCANCiAgICAgICAgICAgIGJ5ID0gImFkbWluM3Bjb2RlIikgJT4lIA0KICBtdXRhdGUod291bmRlZF9kZWFkID0gY2FzdWFsdGllcyArIGluanVyaWVzLCANCiAgICAgICAgIGRhbWFnZWRfaG91c2VzID0gdG90YWxseV9kYW1hZ2VkICsgcGFydGlhbGx5X2RhbWFnZWQsIA0KICAgICAgICAgd291bmRlZF9kZWFkXzEwMGsgPSByb3VuZCh3b3VuZGVkX2RlYWQgLyBwb3B1bGF0aW9uICogMTAwMDAwLCBkaWdpdHMgPSAyKSwgDQogICAgICAgICBkYW1hZ2VkX2hvdXNlc18xMDBrID0gcm91bmQoZGFtYWdlZF9ob3VzZXMgLyBwb3B1bGF0aW9uICogMTAwMDAwLCBkaWdpdHMgPSAyKSkgJT4lIA0KICAgIGxlZnRfam9pbihmc2wgJT4lIA0KICAgICAgICAgICAgICAgIGZpbHRlcihhY3Rpdml0eSA9PSAiQ2FzaCBSZXNwb25zZSIgJiBwbGFubmVkX2ltcGxlbWVudGVkID09ICJJbXBsZW1lbnRlZCIpICU+JSANCiAgICAgICAgICAgICAgICBncm91cF9ieShhZG1pbjNwY29kZSkgJT4lIA0KICAgICAgICAgICAgICAgIHN1bW1hcmlzZShiZW5lZmljaWFyaWVzID0gc3VtKGJlbmVmaWNpYXJpZXMsIG5hLnJtID0gVFJVRSkpLCANCiAgICAgICAgICAgICAgYnkgPSAiYWRtaW4zcGNvZGUiKSAlPiUgDQogIGdncGxvdChhZXMoeCA9IHBvcHVsYXRpb24sIHkgPSBiZW5lZmljaWFyaWVzKSkgKyANCiAgZ2VvbV9wb2ludChhZXMoc2l6ZSA9IHdvdW5kZWRfZGVhZF8xMDBrKSkgKyANCiAgZ2VvbV90ZXh0X3JlcGVsKGFlcyhsYWJlbCA9IHN1Yl9kaXN0cmljdCksDQogICAgICAgICAgICAgICAgICAgcG9pbnQucGFkZGluZyA9IC41LCANCiAgICAgICAgICAgICAgICAgICBzZWdtZW50LmNvbG9yID0gImdyZXk1MCIsIHNpemUgPSAzKSArDQogIHNjYWxlX3hfbG9nMTAoYnJlYWtzID0gYygwLCAzMDAwLCAxMDAwMCwgMzAwMDAsIDEwMDAwMCwgMzAwMDAwLCAxMDAwMDAwKSwgDQogICAgICAgICAgICAgICAgbGFiZWxzID0gY29tbWEpICsgDQogIHNjYWxlX3lfbG9nMTAoYnJlYWtzID0gYygwLCAxMDAwLCAzMDAwLCAxMDAwMCwgMzAwMDAsIDEwMDAwMCksDQogICAgICAgICAgICAgICAgbGFiZWxzID0gY29tbWEpICsgDQogIHNjYWxlX3NpemUoYnJlYWtzID0gYygwLCAxMDAsIDUwMCwgMTAwMCwgMzAwMCkpICsNCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgc2UgPSBGQUxTRSwgY29sb3VyID0gImJsdWUiLCBzaXplID0gLjUpICsNCiAgbGFicyh0aXRsZSA9ICJQb3B1bGF0aW9uIGFuZCBNUEMgYmVuZWZpY2lhcmllcyBieSBzdWItZGlzdHJpY3QiLA0KICAgICAgIHN1YnRpdGxlID0gIlNpemUgaW5kaWNhdGVzIGRlYWQvd291bmRlZCBwZXIgMTAwLDAwMDAiLCANCiAgICAgICB4ID0gIlBvcHVsYXRpb24iLCANCiAgICAgICB5ID0gIkJlbmVmaWNpYXJpZXMiLCANCiAgICAgICBzaXplID0gIkRlYWQvd291bmRlZFxucGVyIDEwMGsiLCANCiAgICAgICBjYXB0aW9uID0gIkRhdGEgZnJvbSBBc3Npc3RhbmNlIENvb3JkaW5hdGlvbiBVbml0IGFuZCBGb29kIFNlY3VyaXR5IGFuZCBMaXZlbGlob29kcyBDbHVzdGVyIikgKw0KICB0aGVtZShwbG90LmNhcHRpb24gPSBlbGVtZW50X3RleHQoaGp1c3QgPSAuNSkpDQpgYGANCg0KPGJyPg0KDQpPdmVyYWxsLCB3ZSBzZWUgZmFpciBhbGlnbm1lbnQgYmV0d2VlbiB0aGUgbWFnbml0dWRlIG9mIHRoZSBuZWVkcyAodG90YWwgcG9wdWxhdGlvbikgYW5kIHRoZSBudW1iZXIgb2YgYmVuZWZpY2lhcmllcyAtLSB0aGlzIGlzIGV2aWRlbmNlZCBieSB0aGUgYmx1ZSBsaW5lIHNob3dpbmcgYSBwb3NpdGl2ZSByZWxhdGlvbnNoaXAuIA0KDQpIb3dldmVyLCB3ZSBkbyBub3RlIHNldmVyYWwgbWlzbWF0Y2hlcyAtLSBEYW5hIHNlZW1zIHRvIGhhdmUgcmVjZWl2ZWQgYW4gb3V0c2l6ZWQgc2hhcmUgb2YgYmVuZWZpY2lhcmllcywgZXNwZWNpYWxseSB3aGVuIGNvbnNpZGVyaW5nIHRoZSBjYXN1YWx0eSByYXRlLiBBbmQgS2FmciBUYWtoYXJpbSBzZWVtcyB0byBoYXZlIGJlZW4gYWxsb2NhdGVkIHJlbGF0aXZlbHkgZmV3ZXIgcmVzb3VyY2VzIGluIGNvbXBhcmlzb24gdG8gdGhlIGRlYXRoIHRvbGwgdGhlcmUuIFRoZSByZXNwb25zZSBpbiBEYW5hIG1heSBiZSBleHBsYWluZWQgYnkgYSBudW1iZXIgb2YgdmFyaWFibGVzIG91dHNpZGUgdGhlIHNjb3BlIG9mIHRoZSBkYXRhIGNvbGxlY3RlZCBieSB0aGUgZWFydGhxdWFrZSByZXNwb25zZSB0cmFja2VyLCBzdWNoIGFzIHBvcHVsYXRpb24gbW92ZW1lbnRzLiBEaWQgZWFydGhxdWFrZSBzdXJ2aXZvcnMgZGlzcGxhY2UgdG8gRGFuYSB3aXRoIHRoZSBrbm93bGVkZ2UgdGhhdCBpdCB3YXMgYSB3ZWxsLXNlcnZlZCBhcmVhLCB3aGVyZSBhIG51bWJlciBvZiBwYXJ0bmVycyB3ZXJlIGFscmVhZHkgb3BlcmF0aW9uYWw/IFRoZSBDV0cgd2lsbCBjb25kdWN0IG1vcmUgY29uc3VsdGF0aW9ucyB3aXRoIHBhcnRuZXJzIHRvIHVuZGVyc3RhbmQgc3VjaCBkaXNwYXJpdGllcy4NCg0KDQo8YnI+PGJyPjxicj4NCg0KDQojIDQuIENhc2ggcmVzcG9uc2UgYWN0b3JzIGFuZCBjYXNoIGRpc2J1cnNlZA0KDQpJbiB0aGUgc2NhdHRlcnBsb3QgYmVsb3csIGVhY2ggcG9pbnQgaXMgYSBzaW5nbGUgY2FzaCB3b3JraW5nIGdyb3VwIHBhcnRuZXIuIFRoZSB4LWF4aXMgaW5kaWNhdGVzIHRoZSBudW1iZXIgb2YgYmVuZWZpY2lhcmllcyByZWFjaGVkIHBlciBhZ2VuY3kgYW5kIHRoZSB5LWF4aXMgaW5kaWNhdGVzIHRoZSBudW1iZXIgb2YgY29tbXVuaXRpZXMgKGFkbWluNCkgcmVhY2hlZC4gDQoNCjxicj4NCg0KYGBge3IgdG90YWxzLCBldmFsID0gRkFMU0V9DQoNCmZzbCAlPiUgDQogIGZpbHRlcihhY3Rpdml0eSA9PSAiQ2FzaCBSZXNwb25zZSIgJiBwbGFubmVkX2ltcGxlbWVudGVkID09ICJJbXBsZW1lbnRlZCIpICU+JSANCiAgbXV0YXRlKHVzZF90b3RhbCA9IGZhbWlsaWVzICogcXVhbnRpdHkpICU+JSANCiAgc3VtbWFyaXNlKGJlbmVmaWNpYXJpZXMgPSBzdW0oYmVuZWZpY2lhcmllcywgbmEucm0gPSBUUlVFKSwgDQogICAgICAgICAgICB1c2RfdG90YWwgPSBzdW0odXNkX3RvdGFsLCBuYS5ybSA9IFRSVUUpKQ0KDQpgYGANCg0KDQoNCmBgYHtyIHBhcnRuZXItc2NhdHRlcn0NCnBhcnRuZXJfc2NhdHRlciA8LSBmc2wgJT4lIA0KICAgZmlsdGVyKGFjdGl2aXR5ID09ICJDYXNoIFJlc3BvbnNlIiAmIHBsYW5uZWRfaW1wbGVtZW50ZWQgPT0gIkltcGxlbWVudGVkIikgJT4lIA0KICBncm91cF9ieShwYXJ0bmVyX2NvZGUsIA0KICAgICAgICAgICBhZG1pbjJwY29kZSwgDQogICAgICAgICAgIGFkbWluNHBjb2RlKSAlPiUgDQogIHNsaWNlKHdoaWNoLm1heChiZW5lZmljaWFyaWVzKSkgJT4lIA0KICB1bmdyb3VwKCkgJT4lIA0KICBncm91cF9ieShwYXJ0bmVyX2NvZGUpICU+JSANCiAgc3VtbWFyaXNlKGJlbmVmaWNpYXJpZXMgPSBzdW0oYmVuZWZpY2lhcmllcywgbmEucm0gPSBUUlVFKSwgDQogICAgICAgICAgICBjb21tdW5pdGllcyA9IG5fZGlzdGluY3QoYWRtaW40cGNvZGUpKSAlPiUgDQogIGdncGxvdChhZXMoeCA9IGJlbmVmaWNpYXJpZXMsIHkgPSBjb21tdW5pdGllcykpICsNCiAgZ2VvbV9wb2ludChhZXMoc2l6ZSA9IGJlbmVmaWNpYXJpZXMsIA0KICAgICAgICAgICAgICAgICB0ZXh0ID0gcGFzdGUwKHBhcnRuZXJfY29kZSwgIlxuIiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJlbmVmaWNpYXJpZXM6ICIsIGZvcm1hdChiZW5lZmljaWFyaWVzLCBiaWcubWFyayA9ICIsIiksICJcbiIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tdW5pdGllczogIiwgY29tbXVuaXRpZXMpKSkgKyANCiAgc2NhbGVfeF9sb2cxMChsYWJlbHMgPSBjb21tYSkgKyANCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSArIA0KICBsYWJzKHggPSAiQmVuZWZpY2lhcmllcyByZWFjaGVkIiwgDQogICAgICAgeSA9ICJDb21tdW5pdGllcyAoYWRtaW40KSByZWFjaGVkIiwgDQogICAgICAgdGl0bGUgPSAiSW1wbGVtZW50aW5nIHBhcnRuZXJzIC0tIGJlbmVmaWNpYXJpZXMgYW5kIGNvbW11bml0aWVzIHJlYWNoZWQiKQ0KDQpnZ3Bsb3RseShwYXJ0bmVyX3NjYXR0ZXIsIHRvb2x0aXAgPSBjKCJ0ZXh0IikpICU+JSANCiAgbGF5b3V0KHNob3dsZWdlbmQgPSBUUlVFLCBsZWdlbmQgPSBsaXN0KGZvbnQgPSAobGlzdChzaXplID0gNikpKSkgJT4lIA0KICBwbG90bHk6OnN0eWxlKGhvdmVyb24gPSAicG9pbnQiKSAlPiUgDQogIGxheW91dCh0aXRsZSA9IGxpc3QodGV4dCA9IHBhc3RlMCgiQmVuZWZpY2lhcmllcyBhbmQgY29tbXVuaXRpZXMgcmVhY2hlZCIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPGJyPiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPHN1cD4iLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNhc2ggcmVzcG9uc2UgaW1wbGVtZW50aW5nIHBhcnRuZXJzIiwiPC9zdXA+IikpKQ0KDQoNCmBgYA0KDQo8YnI+DQoNClVTRCBgciBwYXN0ZShmb3JtYXQocm91bmQoKGZzbCAlPiUgZmlsdGVyKGFjdGl2aXR5ID09ICJDYXNoIFJlc3BvbnNlIiAmIHBsYW5uZWRfaW1wbGVtZW50ZWQgPT0gIkltcGxlbWVudGVkIikgJT4lIG11dGF0ZSh1c2RfdG90YWwgPSBmYW1pbGllcyAqIHF1YW50aXR5KSAlPiUgIHtzdW0oLiR1c2RfdG90YWwpfSkgLyAxMDAwMDAwLCAxKSwgdHJpbSA9IFRSVUUpLCAibWlsbGlvbiIpYCBoYXMgYmVlbiBkaXN0cmlidXRlZCBhY3Jvc3MgYHIgZnNsICU+JSBmaWx0ZXIoYWN0aXZpdHkgPT0gIkNhc2ggUmVzcG9uc2UiICYgcGxhbm5lZF9pbXBsZW1lbnRlZCA9PSAiSW1wbGVtZW50ZWQiKSAlPiUge25fZGlzdGluY3QoLiRhZG1pbjRwY29kZSl9YCBjb21tdW5pdGllcyBhbmQgYHIgZnNsICU+JSBmaWx0ZXIoYWN0aXZpdHkgPT0gIkNhc2ggUmVzcG9uc2UiICYgcGxhbm5lZF9pbXBsZW1lbnRlZCA9PSAiSW1wbGVtZW50ZWQiKSAlPiUge25fZGlzdGluY3QoLiRhZG1pbjNwY29kZSl9YCBzdWItZGlzdHJpY3RzIGluIE5XIFN5cmlhLg0KDQoNClRoZSB0YWJsZSBiZWxvdyBzdW1tYXJpc2VzIHRoZSBpbmZvcm1hdGlvbiBpbiB0aGUgc2NhdHRlcnBsb3QgYWJvdmUgaW4gdGFidWxhciBmb3JtOg0KDQo8YnI+DQoNCg0KDQpgYGB7cn0NCmZzbCAlPiUgDQogIGZpbHRlcihhY3Rpdml0eSA9PSAiQ2FzaCBSZXNwb25zZSIgJiBwbGFubmVkX2ltcGxlbWVudGVkID09ICJJbXBsZW1lbnRlZCIpICU+JSANCiAgZ3JvdXBfYnkocGFydG5lcl9jb2RlLCANCiAgICAgICAgICAgYWRtaW4ycGNvZGUsIA0KICAgICAgICAgICBhZG1pbjRwY29kZSkgJT4lIA0KICBzbGljZSh3aGljaC5tYXgoYmVuZWZpY2lhcmllcykpICU+JSANCiAgdW5ncm91cCgpICU+JSANCiAgZ3JvdXBfYnkocGFydG5lcl9jb2RlKSAlPiUgDQogIHN1bW1hcmlzZShiZW5lZmljaWFyaWVzID0gc3VtKGJlbmVmaWNpYXJpZXMsIG5hLnJtID0gVFJVRSksIA0KICAgICAgICAgICAgZGlzdHJpY3RzID0gbl9kaXN0aW5jdChhZG1pbjJwY29kZSksIA0KICAgICAgICAgICAgY29tbXVuaXRpZXMgPSBuX2Rpc3RpbmN0KGFkbWluNHBjb2RlKSkgJT4lIA0KICBhcnJhbmdlKGRlc2MoYmVuZWZpY2lhcmllcykpICU+JSANCiAgZmxleHRhYmxlKCkgJT4lIA0KICBzZXRfY2FwdGlvbigiUmVhY2ggYW5kIGZvb3RwcmludCBvZiBjYXNoIHJlc3BvbnNlIGFjdG9ycyIpICU+JSANCiAgdGhlbWVfemVicmEoKSAlPiUgDQogIHNldF90YWJsZV9wcm9wZXJ0aWVzKGxheW91dCA9ICJhdXRvZml0Iiwgd2lkdGggPSAuOCkgJT4lIA0KICBmb290bm90ZShhc19wYXJhZ3JhcGgoIk9ubHkgcGFydG5lcnMgd2hvIHByb3ZpZGVkIG1vcmUgdGhhbiBVU0QgMTAwL2ZhbWlseS9tb250aCIpLCANCiAgICAgICAgICAgaSA9IDEsIGogPSAxLCBwYXJ0ID0gImhlYWRlciIpDQogIA0KYGBgDQoNCg0KDQo8YnI+PGJyPg0KDQoNCg0KIyMgNC4xIFVTRCBkaXNidXJzZWQgYnkgcGFydG5lcg0KDQpUaGVyZSBpcyB2ZXJ5IGdvb2QgY29tcGxpYW5jZSB3aXRoIENXRyBzdGFuZGFyZHMgb24gdGhlIHRyYW5zZmVyIHZhbHVlcyBvZiBtdWx0aXB1cnBvc2UgY2FzaCBpbnRlcnZlbnRpb25zLCBhcyBjYW4gYmUgc2VlbiBieSB0aGUgYHVzZF9wZXJfZmFtYCBjb2x1bW4gaW4gdGhlIHRhYmxlIGJlbG93LiANCg0KPGJyPg0KDQoNCmBgYHtyfQ0KZnNsICU+JSANCiAgZmlsdGVyKGFjdGl2aXR5ID09ICJDYXNoIFJlc3BvbnNlIiAmIHBsYW5uZWRfaW1wbGVtZW50ZWQgPT0gIkltcGxlbWVudGVkIikgJT4lIA0KICBtdXRhdGUodXNkX3RvdGFsID0gZmFtaWxpZXMgKiBxdWFudGl0eSkgJT4lIA0KICBncm91cF9ieShwYXJ0bmVyX2NvZGUpICU+JSANCiAgc3VtbWFyaXNlKHVzZF90b3RhbCA9IHN1bSh1c2RfdG90YWwsIG5hLnJtID0gVFJVRSksIA0KICAgICAgICAgICAgZmFtaWxpZXMgPSBzdW0oZmFtaWxpZXMsIG5hLnJtID0gVFJVRSkpICU+JSANCiAgbXV0YXRlKHVzZF9wZXJfZmFtID0gcm91bmQodXNkX3RvdGFsIC8gZmFtaWxpZXMsIGRpZ2l0cyA9IDIpLCANCiAgICAgICAgIGAlX3VzZF90b3RhbGAgPSByb3VuZCh1c2RfdG90YWwgLyBzdW0odXNkX3RvdGFsKSAqIDEwMCwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZ2l0cyA9IDIpKSAlPiUNCiAgYXJyYW5nZShkZXNjKHVzZF90b3RhbCkpICU+JSANCiAgZmxleHRhYmxlKCkgJT4lIA0KICBzZXRfY2FwdGlvbigiVVNEIGRpc2J1cnNlZCBhbmQgZmFtaWxpZXMgcmVhY2hlZCBieSBwYXJ0bmVyIikgJT4lIA0KICB0aGVtZV96ZWJyYSgpICU+JSANCiAgZmxleHRhYmxlOjpzZXRfdGFibGVfcHJvcGVydGllcyhsYXlvdXQgPSAiYXV0b2ZpdCIsIHdpZHRoID0gLjgpDQpgYGANCg0KDQo8YnI+DQoNCkJlbG93IGlzIGEgYnJlYWtkb3duIG9mIGJlbmVmaWNpYXJpZXMgYW5kIGZhbWlsaWVzIHJlYWNoZWQgYnkgY2FzaC1iYXNlZCBhY3Rpdml0aWVzIG9mIGFsbCB2YWx1ZXMsIG5vdCBqdXN0IHRob3NlIHRoYXQgcXVhbGlmeSBhcyBNUEMuIA0KDQo8YnI+DQoNCmBgYHtyfQ0KZnNsICU+JSANCiAgZmlsdGVyKHVuaXQgPT0gIlVTRCIgJiBwbGFubmVkX2ltcGxlbWVudGVkID09ICJJbXBsZW1lbnRlZCIpICU+JSANCiAgZ3JvdXBfYnkodXNkX3RyYW5zZmVyX3ZhbHVlID0gcXVhbnRpdHkpICU+JSANCiAgc3VtbWFyaXNlKGZhbWlsaWVzID0gc3VtKGZhbWlsaWVzLCBuYS5ybSA9IFRSVUUpLA0KICAgICAgICAgICAgYmVuZWZpY2lhcmllcyA9IHN1bShiZW5lZmljaWFyaWVzLCBuYS5ybSA9IFRSVUUpKSAlPiUgDQogIG11dGF0ZShgJV9iZW5lZmljaWFyaWVzYCA9IHJvdW5kKGJlbmVmaWNpYXJpZXMgLyBzdW0oYmVuZWZpY2lhcmllcykgKiAxMDAsIGRpZ2l0cyA9IDIpLCANCiAgICAgICAgIHVzZF90cmFuc2Zlcl92YWx1ZSA9IHBhc3RlMCgiJCIsIHVzZF90cmFuc2Zlcl92YWx1ZSkpICU+JSANCiAgZmxleHRhYmxlKCkgJT4lIA0KICB0aGVtZV96ZWJyYSgpICU+JSANCiAgc2V0X2NhcHRpb24oIlVTRCB0cmFuc2ZlciB2YWx1ZXMgZm9yIGFsbCBjYXNoLWJhc2VkIGFjdGl2aXRpZXMsIG5vdCBqdXN0IE1QQyIpICU+JSANCiAgZm9vdG5vdGUoaSA9IDEsIGogPSAzLCBwYXJ0ID0gImhlYWRlciIsIA0KICAgICAgICAgICBhc19wYXJhZ3JhcGgoIkRhdGEgZnJvbSB0aGUgRlNMIHRyYWNrZXIsIGFsbCBjYXNoIHJlc3BvbnNlIGFjdGl2aXRpZXMgcmVwb3J0ZWQiKSkgJT4lIA0KICBmbGV4dGFibGU6OnNldF90YWJsZV9wcm9wZXJ0aWVzKGxheW91dCA9ICJhdXRvZml0Iiwgd2lkdGggPSAuOCkNCmBgYA0KDQoNCjxicj48YnI+PGJyPg0KDQoNCiMgNS4gQ0NDTSBzaXRlIHRyYWNrZXIgLS0gc2VhcmNoYWJsZSB0YWJsZQ0KDQo8YnI+DQoNCkRhdGEgZnJvbSBbQ0NDTSBzaXRlIHRyYWNrZXJdKGh0dHBzOi8vZG9jcy5nb29nbGUuY29tL3NwcmVhZHNoZWV0cy9kLzFEREJ2SVRkZzVuNGVDLWwzbTZXRWFMRTcyOTBlejloTS9lZGl0I2dpZD01NTQ4MDE5OTkpLiBFeHRyYWN0ZWQgMTUgTWFyY2ggMjAyMy4gDQoNCjxicj4NCg0KYGBge3IgZHR9DQpzaXRlcyAlPiUgDQogIHNlbGVjdChnb3Zlcm5vcmF0ZSwgDQogICAgICAgICBkaXN0cmljdCwgDQogICAgICAgICBzdWJfZGlzdHJpY3QsIA0KICAgICAgICAgY29tbXVuaXR5LCANCiAgICAgICAgIHNpdGVfbmFtZSwgDQogICAgICAgICBsb25naXR1ZGVfeCwNCiAgICAgICAgIGxhdGl0dWRlX3ksIA0KICAgICAgICAgZmFtaWxpZXMsIA0KICAgICAgICAgaW5kaXZpZHVhbHMsIA0KICAgICAgICAgZm9jYWxfcG9pbnQgPSBvcmdhbml6YXRpb25fbmFtZSwgDQogICAgICAgICBmb2NhbF9jb250YWN0ID0gcGhvbmUsIA0KICAgICAgICAgcGNvZGUgPSB0ZW1wX2NvZGUpICU+JSANCiAgZGF0YXRhYmxlKG9wdGlvbnMgPSBsaXN0KHBhZ2VMZW5ndGggPSAxMCwgc2Nyb2xsWCA9IFRSVUUpLCANCiAgICAgICAgICAgIGZpbHRlciA9IGxpc3QocG9zaXRpb24gPSAidG9wIiwgY2xlYXIgPSBGQUxTRSksDQogICAgICAgICAgICBjYXB0aW9uID0gaHRtbHRvb2xzOjp0YWdzJGNhcHRpb24oc3R5bGUgPSAnY2FwdGlvbi1zaWRlOiB0b3A7IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOyBmb250LXNpemU6MTIwJSA7JywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJSZWZlcmVuY2UgdGFibGUgLS0gQ29sbGVjdGl2ZSBzaXRlcywgbGlzdCBtYWludGFpbmVkIGJ5IENDQ00iKSkgJT4lIA0KICBmb3JtYXRTdHlsZSgwLCB0YXJnZXQgPSAicm93IiwgbGluZUhlaWdodCA9ICI4MCUiLCBmb250U2l6ZSA9ICI4MCUiKQ0KICANCmBgYA0KDQoNCg0KDQoNCg0K