Model

We run peer effect regressions on tipping,steal count and steal amount on the data with individual,store,time,and manager fixed effect. The independent variable of interest is the average peer tipping amount, steal count and steal amount, the dependent variable is the focal employee’s tipping amount, steal count and steal amount.

\[FocalTip_{ijt} = AvgPeerTip_{ijt} + focal_i + store_j * year_t + store_j * week_t +store_j * weekday_t + restaurantguard_t + manager_{ijt} \]

To find instruments, we look at the panel of each peer, find the observations that the peer is not co-working with the focal employee and exclude one week before/after the current observation. We use the average of all effective observations to instrument for the peer in the current observation.

Average Peer Effect

We first run ols/iv regressions on 1051 restaunts and *** employees. The parameters below show the estimate and standard error.

summary(peer_ols_effect_AvgTip_lag_withmanager_update)$coefficients
                   Estimate  Std. Error    t value  Pr(>|t|)
avg_peerAvgTip 3.311749e-05 0.001187797 0.02788145 0.9777567
summary(peer_iv_effect_AvgTip_lag_withmanager_update)$coefficients
                       Estimate Std. Error  t value    Pr(>|t|)
`avg_peerAvgTip(fit)` 0.1222765 0.00597342 20.47011 4.02693e-93
summary(peer_ols_effect_stealcnt_lag_withmanager_update)$coefficients
                                      Estimate   Std. Error    t value     Pr(>|t|)
log(avg_peerTotalStealCnt + 1)    -0.011886503 0.0007745068 -15.347191 3.713147e-53
log(avg_peerTotalStealAmount + 1)  0.001857211 0.0002086051   8.902998 5.438277e-19
summary(peer_iv_effect_stealcnt_lag_withmanager_update)$coefficients
                                            Estimate   Std. Error  t value     Pr(>|t|)
`log(avg_peerTotalStealCnt + 1)(fit)`    0.039325142 0.0072692782 5.409773 6.310890e-08
`log(avg_peerTotalStealAmount + 1)(fit)` 0.006255864 0.0008374421 7.470205 8.008815e-14
summary(peer_ols_effect_stealamt_lag_withmanager_update)$coefficients
                                      Estimate   Std. Error   t value     Pr(>|t|)
log(avg_peerTotalStealAmount + 1)  0.004760071 0.0005686196  8.371275 5.701812e-17
log(avg_peerTotalStealCnt + 1)    -0.015346600 0.0021111645 -7.269258 3.615411e-13
summary(peer_iv_effect_stealamt_lag_withmanager_update)$coefficients
                                           Estimate  Std. Error   t value     Pr(>|t|)
`log(avg_peerTotalStealAmount + 1)(fit)` 0.02338433 0.002282108 10.246809 1.224120e-24
`log(avg_peerTotalStealCnt + 1)(fit)`    0.08420135 0.019809465  4.250562 2.132407e-05

Peer Effect Based on Connection Strength(Familiarity)

We want to look at the source of peer effect. So we compare the peer effect of more familiar with less familiar peers. We define familiarity by looking at the working histories for each pair of employees. Within 2 weeks prior to the observation, we seperate the one peer that has most connections to the focal employee from the rest of the peers. We denote the most familiar peer as top and less familar as common in the following regression.

  • Tipping OLS
summary(peer_ols_AvgTip_top_common_2weeks_withmanagers_update)$coefficients
                       Estimate   Std. Error   t value     Pr(>|t|)
toptargetAvgTip     0.007318137 0.0007681958  9.526395 1.629723e-21
commontargetAvgTip -0.002344428 0.0010788714 -2.173038 2.977758e-02
  • Tipping IV
summary(peer_iv_AvgTip_top_common_2weeks_withmanagers_update)$coefficients
                             Estimate  Std. Error    t value     Pr(>|t|)
`toptargetAvgTip(fit)`    0.006263312 0.008300331  0.7545858 4.504976e-01
`commontargetAvgTip(fit)` 0.091145699 0.005314693 17.1497596 6.364543e-66
  • Stealcnt OLS
summary(peer_ols_stealcnt_top_common_2weeks_withmanagers_update)$coefficients
                                         Estimate   Std. Error   t value     Pr(>|t|)
log(toptargetTotalStealCount + 1)    -0.007607694 0.0005907448 -12.87814 5.991959e-38
log(commontargetTotalStealCount + 1) -0.009651344 0.0007651938 -12.61294 1.796227e-36
  • Stealcnt IV
summary(peer_iv_stealcnt_top_common_2weeks_withmanagers_update)$coefficients
                                              Estimate  Std. Error  t value     Pr(>|t|)
`log(toptargetTotalStealCount + 1)(fit)`    0.03958969 0.004870871 8.127847 4.371726e-16
`log(commontargetTotalStealCount + 1)(fit)` 0.04412220 0.007827120 5.637093 1.729629e-08
  • Stealamt OLS
summary(peer_ols_stealamt_top_common_2weeks_withmanagers_update)$coefficients
                                           Estimate   Std. Error    t value     Pr(>|t|)
log(toptargetTotalStealAmount + 1)    -0.0061180689 0.0005221259 -11.717611 1.037418e-31
log(commontargetTotalStealAmount + 1)  0.0006878553 0.0005714823   1.203634 2.287313e-01
  • Stealamt IV
summary(peer_iv_stealamt_top_common_2weeks_withmanagers_update)$coefficients
                                               Estimate  Std. Error  t value     Pr(>|t|)
`log(toptargetTotalStealAmount + 1)(fit)`    0.01055464 0.001959123 5.387431 7.147797e-08
`log(commontargetTotalStealAmount + 1)(fit)` 0.02407456 0.002459795 9.787221 1.278751e-22

Peer Effect of new Employees(redo OLS)

  • Tipping First 60 OLS
summary(peer_ols_effect_AvgTip_lag_withmanager_update_first60)$coefficients
                 Estimate Std. Error  t value     Pr(>|t|)
avg_peerAvgTip 0.02368572 0.00145973 16.22609 3.334642e-59
  • Tipping First 60 IV
summary(peer_iv_effect_AvgTip_lag_withmanager_update_first60)$coefficients
                       Estimate  Std. Error  t value     Pr(>|t|)
`avg_peerAvgTip(fit)` 0.1267559 0.006466264 19.60265 1.505148e-85
  • Tipping Mid 60 OLS
summary(peer_ols_effect_AvgTip_lag_withmanager_update_mid60)$coefficients
                 Estimate  Std. Error  t value     Pr(>|t|)
avg_peerAvgTip 0.02138111 0.001846235 11.58093 5.188817e-31
  • Tipping mid 60 IV
summary(peer_iv_effect_AvgTip_lag_withmanager_update_mid60)$coefficients
                        Estimate  Std. Error  t value     Pr(>|t|)
`avg_peerAvgTip(fit)` 0.04481579 0.007718823 5.806039 6.400379e-09
  • Tipping Over 120 OLS
summary(peer_ols_effect_AvgTip_lag_withmanager_update_last60)$coefficients
                   Estimate  Std. Error    t value  Pr(>|t|)
avg_peerAvgTip 4.735556e-05 0.001248821 0.03792023 0.9697513
  • Tipping over 120 IV
summary(peer_iv_effect_AvgTip_lag_withmanager_update_last60)$coefficients
                        Estimate  Std. Error  t value     Pr(>|t|)
`avg_peerAvgTip(fit)` 0.04849779 0.008342129 5.813598 6.119304e-09
  • Stealcnt First 60 OLS
summary(peer_ols_effect_stealcnt_lag_withmanager_update_first60)$coefficients
                                 Estimate   Std. Error   t value     Pr(>|t|)
log(avg_peerTotalStealCnt + 1) -0.0188144 0.0009614396 -19.56899 2.909769e-85
  • Stealcnt First 60 IV
summary(peer_iv_effect_stealcnt_lag_withmanager_update_first60)$coefficients
                                        Estimate Std. Error  t value     Pr(>|t|)
`log(avg_peerTotalStealCnt + 1)(fit)` 0.09941804 0.01271348 7.819892 5.290328e-15
  • Stealcnt Mid 60 OLS
summary(peer_ols_effect_stealcnt_lag_withmanager_update_mid60)$coefficients
                                  Estimate  Std. Error   t value     Pr(>|t|)
log(avg_peerTotalStealCnt + 1) -0.02918914 0.001720904 -16.96151 1.639676e-64
  • Stealcnt Mid 60 IV
summary(peer_iv_effect_stealcnt_lag_withmanager_update_mid60)$coefficients
                                       Estimate Std. Error  t value     Pr(>|t|)
`log(avg_peerTotalStealCnt + 1)(fit)` 0.1190349 0.02502405 4.756819 1.967189e-06
  • Stealcnt over 120 OLS
summary(peer_ols_effect_stealcnt_lag_withmanager_update_last60)$coefficients
                                  Estimate  Std. Error   t value     Pr(>|t|)
log(avg_peerTotalStealCnt + 1) -0.03396143 0.002181416 -15.56852 1.235362e-54
  • Stealcnt over 120 IV
summary(peer_iv_effect_stealcnt_lag_withmanager_update_last60)$coefficients
                                        Estimate Std. Error   t value  Pr(>|t|)
`log(avg_peerTotalStealCnt + 1)(fit)` 0.02264011 0.03121083 0.7253928 0.4682116
  • Stealamt First 60 OLS
summary(peer_ols_effect_stealamt_lag_withmanager_update_first60)$coefficients
                                       Estimate   Std. Error   t value  Pr(>|t|)
log(avg_peerTotalStealAmount + 1) -0.0008301952 0.0007181922 -1.155951 0.2477012
  • Stealamt First 60 IV
summary(peer_iv_effect_stealamt_lag_withmanager_update_first60)$coefficients
                                           Estimate  Std. Error  t value     Pr(>|t|)
`log(avg_peerTotalStealAmount + 1)(fit)` 0.04113962 0.003980685 10.33481 4.913539e-25
  • Stealamt Mid 60 OLS
summary(peer_ols_effect_stealamt_lag_withmanager_update_mid60)$coefficients
                                      Estimate  Std. Error   t value     Pr(>|t|)
log(avg_peerTotalStealAmount + 1) -0.007652621 0.001246992 -6.136867 8.421862e-10
  • Stealamt Mid 60 IV
summary(peer_iv_effect_stealamt_lag_withmanager_update_mid60)$coefficients
                                           Estimate  Std. Error  t value     Pr(>|t|)
`log(avg_peerTotalStealAmount + 1)(fit)` 0.03585561 0.006595309 5.436532 5.435121e-08
  • Stealamt over 120 OLS
summary(peer_ols_effect_stealamt_lag_withmanager_update_last60)$coefficients
                                     Estimate  Std. Error   t value    Pr(>|t|)
log(avg_peerTotalStealAmount + 1) -0.01104643 0.001569307 -7.039048 1.93861e-12
  • Stealamt over 120 IV
summary(peer_iv_effect_stealamt_lag_withmanager_update_last60)$coefficients
                                            Estimate  Std. Error   t value   Pr(>|t|)
`log(avg_peerTotalStealAmount + 1)(fit)` -0.01421137 0.007614907 -1.866256 0.06200634

Test Collusion Theory: Peer Effect with/without new employee in the first 60 days

Tipping

  • Tipping OLS with new employee of first 60 days
summary(peer_ols_effect_AvgTip_lag_withmanager_update_with_new_first60)$coefficients
                 Estimate  Std. Error  t value     Pr(>|t|)
avg_peerAvgTip 0.01290765 0.001366662 9.444654 3.567946e-21
  • Tipping IV with new employee of first 60 days
summary(peer_iv_effect_AvgTip_lag_withmanager_update_with_new_first60)$coefficients
                       Estimate  Std. Error t value      Pr(>|t|)
`avg_peerAvgTip(fit)` 0.1763471 0.007140945 24.6952 1.238209e-134
  • Tipping OLS without new employee of first 60 days
summary(peer_ols_effect_AvgTip_lag_withmanager_update_without_new_first60)$coefficients
                  Estimate Std. Error   t value      Pr(>|t|)
avg_peerAvgTip -0.08660213 0.00313305 -27.64148 5.185116e-168
  • Tipping IV without new employee of first 60 days
summary(peer_iv_effect_AvgTip_lag_withmanager_update_without_new_first60)$coefficients
                        Estimate Std. Error   t value  Pr(>|t|)
`avg_peerAvgTip(fit)` 0.01332662 0.01341416 0.9934741 0.3204796

Stealcnt

New employee of first 60 days

  • StealCnt OLS with new employee of first 60 days
summary(peer_ols_effect_stealcnt_lag_withmanager_update_with_new_first60)$coefficients
                                 Estimate   Std. Error   t value      Pr(>|t|)
log(avg_peerTotalStealCnt + 1) -0.0184862 0.0006933658 -26.66154 1.365744e-156
  • StealCnt IV with new employee of first 60 days
summary(peer_iv_effect_stealcnt_lag_withmanager_update_with_new_first60)$coefficients
                                        Estimate  Std. Error  t value     Pr(>|t|)
`log(avg_peerTotalStealCnt + 1)(fit)` 0.05242467 0.007486715 7.002359 2.517351e-12
  • StealCnt OLS without new employee of first 60 days
summary(peer_ols_effect_stealcnt_lag_withmanager_update_without_new_first60)$coefficients
                                  Estimate  Std. Error   t value Pr(>|t|)
log(avg_peerTotalStealCnt + 1) -0.08195894 0.002034703 -40.28054        0
  • StealCnt IV without new employee of first 60 days
summary(peer_iv_effect_stealcnt_lag_withmanager_update_without_new_first60)$coefficients
                                        Estimate Std. Error  t value     Pr(>|t|)
`log(avg_peerTotalStealCnt + 1)(fit)` 0.05254261 0.01422927 3.692573 0.0002220272

New Employee of first 30 days

  • stealcnt OLS with new employee of first 30 days
summary(peer_ols_effect_stealcnt_lag_withmanager_update_with_new_firstM)$coefficients
                                  Estimate   Std. Error  t value     Pr(>|t|)
log(avg_peerTotalStealCnt + 1) -0.02067053 0.0007428977 -27.8242 2.32476e-170
  • stealcnt IV with new employee of first 30 days
summary(peer_iv_effect_stealcnt_lag_withmanager_update_with_new_firstM)$coefficients
                                        Estimate  Std. Error  t value     Pr(>|t|)
`log(avg_peerTotalStealCnt + 1)(fit)` 0.07020373 0.008139685 8.624871 6.419525e-18
  • stealcnt OLS without new employee of first 30 days
summary(peer_ols_effect_stealcnt_lag_withmanager_update_without_new_firstM)$coefficients
                                  Estimate  Std. Error   t value Pr(>|t|)
log(avg_peerTotalStealCnt + 1) -0.07518549 0.001462181 -51.42011        0
  • stealcnt IV without new employee of first 30 days
summary(peer_iv_effect_stealcnt_lag_withmanager_update_without_new_firstM)$coefficients
                                          Estimate Std. Error t value  Pr(>|t|)
`log(avg_peerTotalStealCnt + 1)(fit)` -0.004416575  0.0115799 -0.3814 0.7029065

New employee of first 90 days

  • stealcnt OLS with new employee of first 90 days
summary(peer_ols_effect_stealcnt_lag_withmanager_update_with_new_first90)$coefficients
                                  Estimate   Std. Error  t value     Pr(>|t|)
log(avg_peerTotalStealCnt + 1) -0.02067053 0.0007428977 -27.8242 2.32476e-170
  • stealcnt IV with new employee of first 90 days
summary(peer_iv_effect_stealcnt_lag_withmanager_update_with_new_first90)$coefficients
                                        Estimate  Std. Error  t value     Pr(>|t|)
`log(avg_peerTotalStealCnt + 1)(fit)` 0.07020373 0.008139685 8.624871 6.419525e-18
  • stealcnt OLS without new employee of first 90 days
summary(peer_ols_effect_stealcnt_lag_withmanager_update_without_new_first90)$coefficients
                                  Estimate  Std. Error   t value Pr(>|t|)
log(avg_peerTotalStealCnt + 1) -0.07518549 0.001462181 -51.42011        0
  • stealcnt IV without new employee of first 90 days
summary(peer_iv_effect_stealcnt_lag_withmanager_update_without_new_first90)$coefficients
                                          Estimate Std. Error t value  Pr(>|t|)
`log(avg_peerTotalStealCnt + 1)(fit)` -0.004416575  0.0115799 -0.3814 0.7029065

Stealamt

New employee of first 60 days

  • Stealamt OLS with new employee of first 60 days
summary(peer_ols_effect_stealamt_lag_withmanager_update_with_new_first60)$coefficients
                                      Estimate   Std. Error  t value     Pr(>|t|)
log(avg_peerTotalStealAmount + 1) -0.002538464 0.0005133873 -4.94454 7.632749e-07
  • Stealamt IV with new employee of first 60 days
summary(peer_iv_effect_stealamt_lag_withmanager_update_with_new_first60)$coefficients
                                           Estimate  Std. Error  t value     Pr(>|t|)
`log(avg_peerTotalStealAmount + 1)(fit)` 0.02955796 0.002317757 12.75283 3.012437e-37
  • Stealamt OLS without new employee of first 60 days
summary(peer_ols_effect_stealamt_lag_withmanager_update_without_new_first60)$coefficients
                                     Estimate  Std. Error   t value      Pr(>|t|)
log(avg_peerTotalStealAmount + 1) -0.04770316 0.001524242 -31.29632 9.827455e-215
  • Stealamt IV without new employee of first 60 days
summary(peer_iv_effect_stealamt_lag_withmanager_update_without_new_first60)$coefficients
                                           Estimate  Std. Error  t value     Pr(>|t|)
`log(avg_peerTotalStealAmount + 1)(fit)` 0.03677903 0.004746911 7.747992 9.358553e-15

Employee of first 30 days

  • Stealamt OLS with new employee of first 30 days
summary(peer_ols_effect_stealamt_lag_withmanager_update_with_new_firstM)$coefficients
                                      Estimate   Std. Error   t value    Pr(>|t|)
log(avg_peerTotalStealAmount + 1) -0.003993179 0.0005497105 -7.264148 3.75486e-13
  • Stealamt IV with new employee of first 30 days
summary(peer_iv_effect_stealamt_lag_withmanager_update_with_new_firstM)$coefficients
                                           Estimate  Std. Error  t value     Pr(>|t|)
`log(avg_peerTotalStealAmount + 1)(fit)` 0.03892728 0.002617783 14.87032 5.157557e-50
  • Stealamt OLS without new employee of first 30 days
summary(peer_ols_effect_stealamt_lag_withmanager_update_without_new_firstM)$coefficients
                                     Estimate  Std. Error  t value Pr(>|t|)
log(avg_peerTotalStealAmount + 1) -0.04288591 0.001101659 -38.9285        0
  • Stealamt IV without new employee of first 30 days
summary(peer_iv_effect_stealamt_lag_withmanager_update_without_new_firstM)$coefficients
                                           Estimate  Std. Error  t value     Pr(>|t|)
`log(avg_peerTotalStealAmount + 1)(fit)` 0.01549858 0.003509994 4.415559 1.007643e-05

New Employee of first 90 days

  • stealamt OLS with new employee of first 90 days
summary(peer_ols_effect_stealamt_lag_withmanager_update_with_new_first90)$coefficients
                                      Estimate   Std. Error   t value    Pr(>|t|)
log(avg_peerTotalStealAmount + 1) -0.003993179 0.0005497105 -7.264148 3.75486e-13
  • stealamt IV with new employee of first 90 days
summary(peer_iv_effect_stealamt_lag_withmanager_update_with_new_first90)$coefficients
                                           Estimate  Std. Error  t value     Pr(>|t|)
`log(avg_peerTotalStealAmount + 1)(fit)` 0.03892728 0.002617783 14.87032 5.157557e-50
  • stealamt OLS without new employee of first 90 days
summary(peer_ols_effect_stealamt_lag_withmanager_update_without_new_first90)$coefficients
                                     Estimate  Std. Error  t value Pr(>|t|)
log(avg_peerTotalStealAmount + 1) -0.04288591 0.001101659 -38.9285        0
  • stealamt IV without new employee of first 90 days
summary(peer_iv_effect_stealamt_lag_withmanager_update_without_new_first90)$coefficients
                                           Estimate  Std. Error  t value     Pr(>|t|)
`log(avg_peerTotalStealAmount + 1)(fit)` 0.01549858 0.003509994 4.415559 1.007643e-05

Peer Effect Based on Performance Star VS Normal

Star VS Normal in Tipping

  • Tipping OLS
summary(peer_ols_AvgTip_star_normal_in_tip_withmanagers_update)$coefficients
                       Estimate   Std. Error   t value      Pr(>|t|)
startargetAvgTip    0.009795226 0.0004237563 23.115232 3.320339e-118
normaltargetAvgTip -0.005063979 0.0017734719 -2.855404  4.298232e-03
  • Tipping IV
summary(peer_iv_AvgTip_star_normal_in_tip_withmanagers_update)$coefficients
                             Estimate  Std. Error   t value      Pr(>|t|)
`startargetAvgTip(fit)`    0.07592837 0.001998791 37.987144 1.089405e-315
`normaltargetAvgTip(fit)` -0.07022843 0.011222011 -6.258097  3.897485e-10
  • Stealcnt OLS
summary(peer_ols_stealcnt_star_normal_in_tip_withmanagers_update)$coefficients
                                       Estimate   Std. Error    t value     Pr(>|t|)
log(startargetTotalStealCnt + 1)   -0.001215909 0.0007482368  -1.625033 1.041556e-01
log(normaltargetTotalStealCnt + 1) -0.006752753 0.0006380075 -10.584129 3.533678e-26
  • Stealcnt IV
summary(peer_iv_stealcnt_star_normal_in_tip_withmanagers_update)$coefficients
                                            Estimate  Std. Error   t value     Pr(>|t|)
`log(startargetTotalStealCnt + 1)(fit)`   0.08305343 0.006411432 12.953960 2.235884e-38
`log(normaltargetTotalStealCnt + 1)(fit)` 0.05412588 0.005905425  9.165449 4.936610e-20
  • Stealamt OLS
summary(peer_ols_stealamt_star_normal_in_tip_withmanagers_update)$coefficients
                                         Estimate   Std. Error  t value     Pr(>|t|)
log(startargetTotalStealAmount + 1)   0.005267188 0.0007222795 7.292452 3.044277e-13
log(normaltargetTotalStealAmount + 1) 0.002573578 0.0004784399 5.379105 7.486188e-08
  • Stealamt IV
summary(peer_iv_stealamt_star_normal_in_tip_withmanagers_update)$coefficients
                                               Estimate  Std. Error  t value     Pr(>|t|)
`log(startargetTotalStealAmount + 1)(fit)`   0.08944030 0.005377480 16.63238 4.083232e-62
`log(normaltargetTotalStealAmount + 1)(fit)` 0.02837046 0.001968209 14.41435 4.216508e-47

Star Vs Normal in Stealcnt

  • Tipping OLS
summary(peer_ols_AvgTip_star_normal_in_stealcnt_withmanagers_update)$coefficients
                     Estimate   Std. Error   t value      Pr(>|t|)
startargetAvgTip    0.0117053 0.0005972774  19.59776  1.632690e-85
normaltargetAvgTip -0.0264644 0.0012405224 -21.33327 5.659032e-101
  • Tipping IV
summary(peer_iv_AvgTip_star_normal_in_stealcnt_withmanagers_update)$coefficients
                            Estimate  Std. Error   t value      Pr(>|t|)
`startargetAvgTip(fit)`   0.09310831 0.002454419 37.934976 7.897769e-315
`normaltargetAvgTip(fit)` 0.02387221 0.007019083  3.401043  6.712992e-04
  • Stealcnt OLS
summary(peer_ols_stealcnt_star_normal_in_stealcnt_withmanagers_update)$coefficients
                                       Estimate   Std. Error   t value     Pr(>|t|)
log(startargetTotalStealCnt + 1)   -0.001753835 0.0004464896 -3.928053 8.563787e-05
log(normaltargetTotalStealCnt + 1) -0.002594897 0.0009587207 -2.706625 6.797137e-03
  • Stealcnt IV
summary(peer_iv_stealcnt_star_normal_in_stealcnt_withmanagers_update)$coefficients
                                            Estimate Std. Error   t value     Pr(>|t|)
`log(startargetTotalStealCnt + 1)(fit)`   0.05509822 0.00318804 17.282787 6.381049e-67
`log(normaltargetTotalStealCnt + 1)(fit)` 0.17350037 0.02902318  5.977993 2.259252e-09
  • Stealamt OLS
summary(peer_ols_stealamt_star_normal_in_stealcnt_withmanagers_update)$coefficients
                                         Estimate   Std. Error  t value     Pr(>|t|)
log(startargetTotalStealAmount + 1)   0.002869468 0.0004442961 6.458458 1.057887e-10
log(normaltargetTotalStealAmount + 1) 0.005440631 0.0005735988 9.485081 2.423366e-21
  • Stealamt IV
summary(peer_iv_stealamt_star_normal_in_stealcnt_withmanagers_update)$coefficients
                                               Estimate  Std. Error  t value
`log(startargetTotalStealAmount + 1)(fit)`   0.03566498 0.001610999 22.13843
`log(normaltargetTotalStealAmount + 1)(fit)` 0.03365088 0.002332121 14.42930
                                                  Pr(>|t|)
`log(startargetTotalStealAmount + 1)(fit)`   1.371701e-108
`log(normaltargetTotalStealAmount + 1)(fit)`  3.395243e-47

The effect of restaurant guard on peer effect

Overall effect of restaurant guard

  • Tipping OLS Before Guard
summary(peer_ols_effect_AvgTip_lag_withmanager_update_beforeguard)$coefficients
                  Estimate  Std. Error  t value    Pr(>|t|)
avg_peerAvgTip 0.008367373 0.002738635 3.055308 0.002248375
  • Tipping IV Before Guard
summary(peer_iv_effect_AvgTip_lag_withmanager_update_beforeguard)$coefficients
                       Estimate Std. Error  t value     Pr(>|t|)
`avg_peerAvgTip(fit)` 0.1408745 0.01400149 10.06139 8.215286e-24
  • Tipping OLS After Guard
summary(peer_ols_effect_AvgTip_lag_withmanager_update_afterguard)$coefficients
                   Estimate  Std. Error   t value     Pr(>|t|)
avg_peerAvgTip -0.003687016 0.001011481 -3.645167 0.0002672222
  • Tipping IV After Guard
summary(peer_iv_effect_AvgTip_lag_withmanager_update_afterguard)$coefficients
                        Estimate  Std. Error  t value     Pr(>|t|)
`avg_peerAvgTip(fit)` 0.04677438 0.003832569 12.20445 2.948857e-34
  • Stealcnt OLS Before Guard
summary(peer_ols_effect_stealcnt_lag_withmanager_update_beforeguard)$coefficients
                                      Estimate  Std. Error    t value     Pr(>|t|)
log(avg_peerTotalStealCnt + 1)    -0.018365709 0.001825876 -10.058576 8.451411e-24
log(avg_peerTotalStealAmount + 1)  0.001751888 0.000433691   4.039483 5.357460e-05
  • Stealcnt IV Before Guard
summary(peer_iv_effect_stealcnt_lag_withmanager_update_beforeguard)$coefficients
                                            Estimate  Std. Error  t value     Pr(>|t|)
`log(avg_peerTotalStealCnt + 1)(fit)`    0.015455217 0.008196442 1.885601 5.934921e-02
`log(avg_peerTotalStealAmount + 1)(fit)` 0.008350214 0.001135352 7.354736 1.915227e-13
  • Stealcnt OLS After Guard
summary(peer_ols_effect_stealcnt_lag_withmanager_update_afterguard)$coefficients
                                      Estimate   Std. Error    t value      Pr(>|t|)
log(avg_peerTotalStealCnt + 1)    -0.020673496 0.0008455385 -24.450095 5.168842e-132
log(avg_peerTotalStealAmount + 1)  0.001153299 0.0002383715   4.838242  1.309986e-06
  • Stealcnt IV After Guard
summary(peer_iv_effect_stealcnt_lag_withmanager_update_afterguard)$coefficients
                                            Estimate  Std. Error  t value     Pr(>|t|)
`log(avg_peerTotalStealCnt + 1)(fit)`    0.066929117 0.012293555 5.444244 5.203002e-08
`log(avg_peerTotalStealAmount + 1)(fit)` 0.004395826 0.001229536 3.575190 3.499788e-04
  • Stealamt OLS Before Guard
summary(peer_ols_effect_stealamt_lag_withmanager_update_beforeguard)$coefficients
                                      Estimate  Std. Error   t value     Pr(>|t|)
log(avg_peerTotalStealCnt + 1)    -0.011846168 0.005405655 -2.191440 0.0284203141
log(avg_peerTotalStealAmount + 1) -0.004580208 0.001283978 -3.567202 0.0003608373
  • Stealamt IV Before Guard
summary(peer_iv_effect_stealamt_lag_withmanager_update_beforeguard)$coefficients
                                           Estimate  Std. Error  t value     Pr(>|t|)
`log(avg_peerTotalStealAmount + 1)(fit)` 0.02909007 0.003405871 8.541157 1.331579e-17
`log(avg_peerTotalStealCnt + 1)(fit)`    0.04923202 0.024587987 2.002280 4.525508e-02
  • Stealamt OLS After Guard
summary(peer_ols_effect_stealamt_lag_withmanager_update_afterguard)$coefficients
                                      Estimate   Std. Error    t value     Pr(>|t|)
log(avg_peerTotalStealCnt + 1)    -0.026748659 0.0022614006 -11.828360 2.789807e-32
log(avg_peerTotalStealAmount + 1)  0.001056446 0.0006375268   1.657101 9.749921e-02
  • Stealamt IV After Guard
summary(peer_iv_effect_stealamt_lag_withmanager_update_afterguard)$coefficients
                                           Estimate  Std. Error  t value     Pr(>|t|)
`log(avg_peerTotalStealAmount + 1)(fit)` 0.02302096 0.003257574 7.066904 1.584646e-12
`log(avg_peerTotalStealCnt + 1)(fit)`    0.11238046 0.032570950 3.450328 5.599142e-04

Restaurant Guard * Star VS Normal in Tipping

  • Tipping IV Before Guard
summary(peer_iv_AvgTip_star_normal_in_tip_withmanagers_update_beforeguard)$coefficients
                             Estimate  Std. Error   t value     Pr(>|t|)
`startargetAvgTip(fit)`    0.09440908 0.005817555 16.228308 3.266022e-59
`normaltargetAvgTip(fit)` -0.21111539 0.050461743 -4.183672 2.868745e-05
  • Tipping IV After Guard
summary(peer_iv_AvgTip_star_normal_in_tip_withmanagers_update_afterguard)$coefficients
                              Estimate   Std. Error    t value      Pr(>|t|)
`startargetAvgTip(fit)`    0.034583977 0.0009643999 35.8606189 1.451955e-281
`normaltargetAvgTip(fit)` -0.002431082 0.0024416080 -0.9956888  3.194014e-01
  • Stealcnt IV Before Guard
summary(peer_iv_stealcnt_star_normal_in_tip_withmanagers_update_beforeguard)$coefficients
                                            Estimate  Std. Error  t value     Pr(>|t|)
`log(startargetTotalStealCnt + 1)(fit)`   0.10070711 0.013157626 7.653897 1.952400e-14
`log(normaltargetTotalStealCnt + 1)(fit)` 0.03463699 0.006915105 5.008888 5.475942e-07
  • Stealcnt IV After Guard
summary(peer_iv_stealcnt_star_normal_in_tip_withmanagers_update_afterguard)$coefficients
                                            Estimate  Std. Error   t value     Pr(>|t|)
`log(startargetTotalStealCnt + 1)(fit)`   0.07720517 0.007626039 10.123888 4.332748e-24
`log(normaltargetTotalStealCnt + 1)(fit)` 0.07314953 0.009454785  7.736774 1.020040e-14
  • Stealamt IV Before Guard
summary(peer_iv_stealamt_star_normal_in_tip_withmanagers_update_beforeguard)$coefficients
                                               Estimate  Std. Error   t value     Pr(>|t|)
`log(startargetTotalStealAmount + 1)(fit)`   0.08923428 0.011370450  7.847911 4.236502e-15
`log(normaltargetTotalStealAmount + 1)(fit)` 0.03378014 0.002996124 11.274613 1.762340e-29
  • Stealamt IV After Guard
summary(peer_iv_stealamt_star_normal_in_tip_withmanagers_update_afterguard)$coefficients
                                               Estimate  Std. Error  t value     Pr(>|t|)
`log(startargetTotalStealAmount + 1)(fit)`   0.09023320 0.006315866 14.28675 2.656500e-46
`log(normaltargetTotalStealAmount + 1)(fit)` 0.02791514 0.002739753 10.18893 2.224166e-24

Restaurant Guard * Star VS Normal in Stealcnt

  • Tipping IV Before Guard
summary(peer_iv_AvgTip_star_normal_in_stealcnt_withmanagers_update_beforeguard)$coefficients
                            Estimate  Std. Error    t value     Pr(>|t|)
`startargetAvgTip(fit)`   0.10278930 0.006423699 16.0015739 1.277291e-57
`normaltargetAvgTip(fit)` 0.01672989 0.022845486  0.7323061 4.639820e-01
  • Tipping IV After Guard
summary(peer_iv_AvgTip_star_normal_in_stealcnt_withmanagers_update_afterguard)$coefficients
                            Estimate  Std. Error  t value      Pr(>|t|)
`startargetAvgTip(fit)`   0.02123196 0.001317633 16.11372  2.055758e-58
`normaltargetAvgTip(fit)` 0.04316742 0.001857404 23.24072 1.811398e-119
  • Stealcnt IV Before Guard
summary(peer_iv_stealcnt_star_normal_in_stealcnt_withmanagers_update_beforeguard)$coefficients
                                            Estimate  Std. Error  t value     Pr(>|t|)
`log(startargetTotalStealCnt + 1)(fit)`   0.04085522 0.004311168 9.476602 2.635164e-21
`log(normaltargetTotalStealCnt + 1)(fit)` 0.08971757 0.050595154 1.773244 7.618871e-02
  • Stealcnt IV After Guard
summary(peer_iv_stealcnt_star_normal_in_stealcnt_withmanagers_update_afterguard)$coefficients
                                            Estimate  Std. Error   t value     Pr(>|t|)
`log(startargetTotalStealCnt + 1)(fit)`   0.06778896 0.004635535 14.623763 1.989407e-48
`log(normaltargetTotalStealCnt + 1)(fit)` 0.21036933 0.033147327  6.346495 2.203090e-10
  • Stealamt IV Before Guard
summary(peer_iv_stealamt_star_normal_in_stealcnt_withmanagers_update_beforeguard)$coefficients
                                               Estimate  Std. Error   t value     Pr(>|t|)
`log(startargetTotalStealAmount + 1)(fit)`   0.03083671 0.002337822 13.190356 1.008717e-39
`log(normaltargetTotalStealAmount + 1)(fit)` 0.02963565 0.003305771  8.964823 3.115564e-19
  • Stealamt IV After Guard
summary(peer_iv_stealamt_star_normal_in_stealcnt_withmanagers_update_afterguard)$coefficients
                                               Estimate  Std. Error  t value     Pr(>|t|)
`log(startargetTotalStealAmount + 1)(fit)`   0.04258421 0.002401070 17.73552 2.249909e-70
`log(normaltargetTotalStealAmount + 1)(fit)` 0.04194241 0.003416219 12.27744 1.199746e-34

Restaurant Guard * Connection Strength(Familarity)

  • Tipping Before Guard
summary(peer_iv_AvgTip_top_common_2weeks_withmanagers_beforeguard_update)$coefficients
                             Estimate Std. Error   t value     Pr(>|t|)
`toptargetAvgTip(fit)`    0.007300703 0.02041077 0.3576887 7.205764e-01
`commontargetAvgTip(fit)` 0.098222039 0.01217525 8.0673541 7.198966e-16
  • Tipping After Guard
summary(peer_iv_AvgTip_top_common_2weeks_withmanagers_afterguard_update)$coefficients
                              Estimate  Std. Error   t value    Pr(>|t|)
`toptargetAvgTip(fit)`    -0.003806135 0.003316923 -1.147490 0.251179378
`commontargetAvgTip(fit)`  0.010114830 0.003831010  2.640251 0.008284521
  • Stealcnt Before Guard
summary(peer_iv_stealcnt_top_common_2weeks_withmanagers_beforeguard_update)$coefficients
                                              Estimate  Std. Error  t value     Pr(>|t|)
`log(toptargetTotalStealCount + 1)(fit)`    0.03187939 0.005472294 5.825599 5.694164e-09
`log(commontargetTotalStealCount + 1)(fit)` 0.03145771 0.008669696 3.628467 2.851363e-04
  • Stealcnt After Guard
summary(peer_iv_stealcnt_top_common_2weeks_withmanagers_afterguard_update)$coefficients
                                              Estimate  Std. Error  t value     Pr(>|t|)
`log(toptargetTotalStealCount + 1)(fit)`    0.04921839 0.008084206 6.088216 1.141958e-09
`log(commontargetTotalStealCount + 1)(fit)` 0.06580247 0.012422176 5.297178 1.176183e-07
  • Stealamt Before Guard
summary(peer_iv_stealamt_top_common_2weeks_withmanagers_beforeguard_update)$coefficients
                                                Estimate  Std. Error  t value     Pr(>|t|)
`log(toptargetTotalStealAmount + 1)(fit)`    0.007812675 0.002406142 3.246971 1.166475e-03
`log(commontargetTotalStealAmount + 1)(fit)` 0.016459876 0.003272014 5.030503 4.893586e-07
  • Stealamt After Guard
summary(peer_iv_stealamt_top_common_2weeks_withmanagers_afterguard_update)$coefficients
                                               Estimate  Std. Error  t value     Pr(>|t|)
`log(toptargetTotalStealAmount + 1)(fit)`    0.01593128 0.003460985 4.603105 4.162632e-06
`log(commontargetTotalStealAmount + 1)(fit)` 0.03399257 0.003824449 8.888227 6.214018e-19

New Employee with shorter time interval

Use 1 month as time interval

AvgTip

summary(peer_iv_effect_AvgTip_lag_withmanager_update_firstM)$coefficients
                        Estimate Std. Error  t value     Pr(>|t|)
`avg_peerAvgTip(fit)` 0.07547611 0.00839616 8.989361 2.491563e-19
summary(peer_iv_effect_AvgTip_lag_withmanager_update_secondM)$coefficients
                       Estimate Std. Error  t value      Pr(>|t|)
`avg_peerAvgTip(fit)` 0.3328581 0.01062379 31.33137 2.834391e-215
summary(peer_iv_effect_AvgTip_lag_withmanager_update_thirdM)$coefficients
                       Estimate  Std. Error  t value     Pr(>|t|)
`avg_peerAvgTip(fit)` 0.0630227 0.009211952 6.841405 7.856394e-12
summary(peer_iv_effect_AvgTip_lag_withmanager_update_fourthM)$coefficients
                        Estimate Std. Error   t value    Pr(>|t|)
`avg_peerAvgTip(fit)` -0.2639484 0.01951251 -13.52714 1.12696e-41
summary(peer_iv_effect_AvgTip_lag_withmanager_update_fifthM)$coefficients
                        Estimate Std. Error   t value  Pr(>|t|)
`avg_peerAvgTip(fit)` 0.01377592 0.01521488 0.9054237 0.3652425
summary(peer_iv_effect_AvgTip_lag_withmanager_update_sixthM)$coefficients
                        Estimate  Std. Error  t value    Pr(>|t|)
`avg_peerAvgTip(fit)` 0.04907351 0.009860333 4.976861 6.46568e-07

Stealcnt

summary(peer_iv_effect_stealcnt_lag_withmanager_update_firstM)$coefficients
                                       Estimate Std. Error  t value     Pr(>|t|)
`log(avg_peerTotalStealCnt + 1)(fit)` 0.1126809  0.0156259 7.211165 5.552049e-13
summary(peer_iv_effect_stealcnt_lag_withmanager_update_secondM)$coefficients
                                       Estimate Std. Error  t value     Pr(>|t|)
`log(avg_peerTotalStealCnt + 1)(fit)` 0.1264644 0.02359968 5.358732 8.384506e-08
summary(peer_iv_effect_stealcnt_lag_withmanager_update_thirdM)$coefficients
                                       Estimate Std. Error  t value    Pr(>|t|)
`log(avg_peerTotalStealCnt + 1)(fit)` 0.1555477 0.03384897 4.595345 4.32202e-06
summary(peer_iv_effect_stealcnt_lag_withmanager_update_fourthM)$coefficients
                                        Estimate Std. Error  t value   Pr(>|t|)
`log(avg_peerTotalStealCnt + 1)(fit)` 0.09309576 0.03889923 2.393255 0.01670054
summary(peer_iv_effect_stealcnt_lag_withmanager_update_fifthM)$coefficients
                                       Estimate Std. Error  t value   Pr(>|t|)
`log(avg_peerTotalStealCnt + 1)(fit)` 0.1276559 0.04501297 2.835981 0.00456918
summary(peer_iv_effect_stealcnt_lag_withmanager_update_sixthM)$coefficients
                                         Estimate Std. Error   t value  Pr(>|t|)
`log(avg_peerTotalStealCnt + 1)(fit)` -0.03714043 0.03295793 -1.126904 0.2597837

Stealamt

summary(peer_iv_effect_stealamt_lag_withmanager_update_firstM)$coefficients
                                           Estimate  Std. Error t value     Pr(>|t|)
`log(avg_peerTotalStealAmount + 1)(fit)` 0.04540261 0.005339536  8.5031 1.848821e-17
summary(peer_iv_effect_stealamt_lag_withmanager_update_secondM)$coefficients
                                           Estimate  Std. Error  t value     Pr(>|t|)
`log(avg_peerTotalStealAmount + 1)(fit)` 0.04265539 0.006793811 6.278565 3.419929e-10
summary(peer_iv_effect_stealamt_lag_withmanager_update_thirdM)$coefficients
                                           Estimate  Std. Error  t value     Pr(>|t|)
`log(avg_peerTotalStealAmount + 1)(fit)` 0.03793186 0.008656224 4.382033 1.176152e-05
summary(peer_iv_effect_stealamt_lag_withmanager_update_fourthM)$coefficients
                                           Estimate Std. Error  t value     Pr(>|t|)
`log(avg_peerTotalStealAmount + 1)(fit)` 0.04172398 0.01063831 3.922048 8.782783e-05
summary(peer_iv_effect_stealamt_lag_withmanager_update_fifthM)$coefficients
                                           Estimate Std. Error  t value   Pr(>|t|)
`log(avg_peerTotalStealAmount + 1)(fit)` 0.02444368 0.01328282 1.840248 0.06573405
summary(peer_iv_effect_stealamt_lag_withmanager_update_sixthM)$coefficients
                                            Estimate  Std. Error   t value   Pr(>|t|)
`log(avg_peerTotalStealAmount + 1)(fit)` -0.01969481 0.007701775 -2.557178 0.01055296

Additional Regression: drink/revenue/add-on items

  • Revenue OLS
summary(peer_ols_effect_AvgRev_lag_withmanager_update)$coefficients
                 Estimate  Std. Error  t value      Pr(>|t|)
avg_peerAvgRev 0.04843783 0.001273878 38.02392 2.663033e-316
  • Revenue IV
summary(peer_iv_effect_AvgRev_lag_withmanager_update)$coefficients
                        Estimate  Std. Error  t value     Pr(>|t|)
`avg_peerAvgRev(fit)` 0.05975351 0.005365868 11.13585 8.402409e-29
  • Drink OLS
summary(peer_ols_effect_DrxSl_lag_withmanager_update)$coefficients
               Estimate   Std. Error t value Pr(>|t|)
avg_peerDrxSl 0.2022067 0.0009513508 212.547        0
  • Drink IV
summary(peer_iv_effect_DrxSl_lag_withmanager_update)$coefficients
                      Estimate  Std. Error  t value      Pr(>|t|)
`avg_peerDrxSl(fit)` 0.1944882 0.005665241 34.33009 3.079341e-258
  • Add-on OLS
summary(peer_ols_effect_AddSl_lag_withmanager_update)$coefficients
               Estimate   Std. Error  t value Pr(>|t|)
avg_peerAddSl 0.2049097 0.0007931751 258.3411        0
  • Add-on IV
summary(peer_iv_effect_AddSl_lag_withmanager_update)$coefficients
                     Estimate  Std. Error  t value      Pr(>|t|)
`avg_peerAddSl(fit)` 0.169014 0.006502105 25.99374 6.020395e-149

Cross effect of Tipping on Stealing

  • Effect of tippint+stealing on stealcnt
summary(peer_iv_effect_stealcnt_lag_withmanager_update_withtip)$coefficients
                                              Estimate   Std. Error   t value     Pr(>|t|)
`log(avg_peerTotalStealCnt + 1)(fit)`     0.0429481526 7.373367e-03  5.824768 5.719705e-09
`log(avg_peerTotalStealAmount + 1)(fit)`  0.0061484549 8.514991e-04  7.220741 5.171546e-13
`avg_peerAvgTip(fit)`                    -0.0001577893 6.347013e-05 -2.486041 1.291737e-02
  • Effect of tippint+stealing on stealamt
summary(peer_iv_effect_stealamt_lag_withmanager_update_withtip)$coefficients
                                              Estimate   Std. Error   t value     Pr(>|t|)
`log(avg_peerTotalStealAmount + 1)(fit)`  0.0234929543 0.0023129246 10.157251 3.078703e-24
`log(avg_peerTotalStealCnt + 1)(fit)`     0.0861862496 0.0200282554  4.303233 1.683283e-05
`avg_peerAvgTip(fit)`                    -0.0002938006 0.0001724037 -1.704143 8.835445e-02
  • Effect of tipping+stealing on tipping
summary(peer_iv_effect_AvgTip_lag_withmanager_update_withsteal)$coefficients
                                           Estimate  Std. Error   t value      Pr(>|t|)
`log(avg_peerTotalStealCnt + 1)(fit)`    0.81218812 0.689014845  1.178767  2.384910e-01
`log(avg_peerTotalStealAmount + 1)(fit)` 0.09161471 0.079569554  1.151379  2.495764e-01
`avg_peerAvgTip(fit)`                    0.12921517 0.005931057 21.786196 3.188175e-105
  • Effect of drink sales+stealing on drink sales
summary(peer_iv_effect_DrxSl_lag_withmanager_update_withsteal)$coefficients[c(2,3),]
                                          Estimate  Std. Error   t value      Pr(>|t|)
`log(avg_peerTotalStealAmount + 1)(fit)` 4.2256064 1.002316738  4.215839  2.488576e-05
`avg_peerDrxSl(fit)`                     0.2267516 0.005902549 38.415877 7.905050e-323
  • Effect of Addon sales+stealing on addon sales
summary(peer_iv_effect_AddSl_lag_withmanager_update_withsteal)$coefficients[c(2,3),]
                                          Estimate  Std. Error  t value     Pr(>|t|)
`log(avg_peerTotalStealAmount + 1)(fit)` 8.6295175 0.651543444 13.24473 4.851834e-40
`avg_peerAddSl(fit)`                     0.1000888 0.007526227 13.29867 2.361959e-40
LS0tDQp0aXRsZTogIlBlZXIgRWZmZWN0IGluIFRpcHBpbmcvU3RlYWxpbmciDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQojIE1vZGVsIA0KDQpXZSBydW4gcGVlciBlZmZlY3QgcmVncmVzc2lvbnMgb24gdGlwcGluZyxzdGVhbCBjb3VudCBhbmQgc3RlYWwgYW1vdW50IG9uIHRoZSBkYXRhIHdpdGggaW5kaXZpZHVhbCxzdG9yZSx0aW1lLGFuZCBtYW5hZ2VyIGZpeGVkIGVmZmVjdC4gVGhlIGluZGVwZW5kZW50IHZhcmlhYmxlIG9mIGludGVyZXN0IGlzIHRoZSBhdmVyYWdlIHBlZXIgdGlwcGluZyBhbW91bnQsIHN0ZWFsIGNvdW50IGFuZCBzdGVhbCBhbW91bnQsIHRoZSBkZXBlbmRlbnQgdmFyaWFibGUgaXMgdGhlIGZvY2FsIGVtcGxveWVlJ3MgdGlwcGluZyBhbW91bnQsIHN0ZWFsIGNvdW50IGFuZCBzdGVhbCBhbW91bnQuDQoNCiQkRm9jYWxUaXBfe2lqdH0gPSBBdmdQZWVyVGlwX3tpanR9ICsgZm9jYWxfaSArIHN0b3JlX2ogKiB5ZWFyX3QgKyBzdG9yZV9qICogd2Vla190ICtzdG9yZV9qICogd2Vla2RheV90ICsgcmVzdGF1cmFudGd1YXJkX3QgKyBtYW5hZ2VyX3tpanR9ICQkDQoNCg0KDQpUbyBmaW5kIGluc3RydW1lbnRzLCB3ZSBsb29rIGF0IHRoZSBwYW5lbCBvZiBlYWNoIHBlZXIsIGZpbmQgdGhlIG9ic2VydmF0aW9ucyB0aGF0IHRoZSBwZWVyIGlzIG5vdCBjby13b3JraW5nIHdpdGggdGhlIGZvY2FsIGVtcGxveWVlIGFuZCBleGNsdWRlIG9uZSB3ZWVrIGJlZm9yZS9hZnRlciB0aGUgY3VycmVudCBvYnNlcnZhdGlvbi4gV2UgdXNlIHRoZSBhdmVyYWdlIG9mIGFsbCBlZmZlY3RpdmUgb2JzZXJ2YXRpb25zIHRvIGluc3RydW1lbnQgZm9yIHRoZSBwZWVyIGluIHRoZSBjdXJyZW50IG9ic2VydmF0aW9uLg0KDQojIEF2ZXJhZ2UgUGVlciBFZmZlY3QNCg0KV2UgZmlyc3QgcnVuIG9scy9pdiByZWdyZXNzaW9ucyBvbiAgMTA1MSByZXN0YXVudHMgYW5kICoqKiBlbXBsb3llZXMuIFRoZSBwYXJhbWV0ZXJzIGJlbG93IHNob3cgdGhlIGVzdGltYXRlIGFuZCBzdGFuZGFyZCBlcnJvci4gDQoNCi0gVGlwcGluZyBPTFMNCg0KYGBge3J9DQpzdW1tYXJ5KHBlZXJfb2xzX2VmZmVjdF9BdmdUaXBfbGFnX3dpdGhtYW5hZ2VyX3VwZGF0ZSkkY29lZmZpY2llbnRzDQpgYGANCg0KLSBUaXBwaW5nIElWDQoNCmBgYHtyfQ0Kc3VtbWFyeShwZWVyX2l2X2VmZmVjdF9BdmdUaXBfbGFnX3dpdGhtYW5hZ2VyX3VwZGF0ZSkkY29lZmZpY2llbnRzDQpgYGANCg0KLSBTdGVhbGNudCBPTFMNCg0KYGBge3J9DQpzdW1tYXJ5KHBlZXJfb2xzX2VmZmVjdF9zdGVhbGNudF9sYWdfd2l0aG1hbmFnZXJfdXBkYXRlKSRjb2VmZmljaWVudHMNCmBgYA0KDQotIFN0ZWFsY250IElWDQoNCmBgYHtyfQ0Kc3VtbWFyeShwZWVyX2l2X2VmZmVjdF9zdGVhbGNudF9sYWdfd2l0aG1hbmFnZXJfdXBkYXRlKSRjb2VmZmljaWVudHMNCmBgYA0KDQoNCi0gU3RlYWxhbW91bnQgT0xTDQoNCmBgYHtyfQ0Kc3VtbWFyeShwZWVyX29sc19lZmZlY3Rfc3RlYWxhbXRfbGFnX3dpdGhtYW5hZ2VyX3VwZGF0ZSkkY29lZmZpY2llbnRzDQpgYGANCg0KLSBTdGVhbGFtb3VudCBJVg0KDQpgYGB7cn0NCnN1bW1hcnkocGVlcl9pdl9lZmZlY3Rfc3RlYWxhbXRfbGFnX3dpdGhtYW5hZ2VyX3VwZGF0ZSkkY29lZmZpY2llbnRzDQpgYGANCg0KIyMgUGVlciBFZmZlY3QgQmFzZWQgb24gQ29ubmVjdGlvbiBTdHJlbmd0aChGYW1pbGlhcml0eSkNCg0KV2Ugd2FudCB0byBsb29rIGF0IHRoZSBzb3VyY2Ugb2YgcGVlciBlZmZlY3QuIFNvIHdlIGNvbXBhcmUgdGhlIHBlZXIgZWZmZWN0IG9mIG1vcmUgZmFtaWxpYXIgd2l0aCBsZXNzIGZhbWlsaWFyIHBlZXJzLiBXZSBkZWZpbmUgZmFtaWxpYXJpdHkgYnkgbG9va2luZyBhdCB0aGUgd29ya2luZyBoaXN0b3JpZXMgZm9yIGVhY2ggcGFpciBvZiBlbXBsb3llZXMuIFdpdGhpbiAyIHdlZWtzIHByaW9yIHRvIHRoZSBvYnNlcnZhdGlvbiwgd2Ugc2VwZXJhdGUgdGhlIG9uZSBwZWVyIHRoYXQgaGFzIG1vc3QgY29ubmVjdGlvbnMgdG8gdGhlIGZvY2FsIGVtcGxveWVlIGZyb20gdGhlIHJlc3Qgb2YgdGhlIHBlZXJzLiBXZSBkZW5vdGUgdGhlIG1vc3QgZmFtaWxpYXIgcGVlciBhcyB0b3AgYW5kIGxlc3MgZmFtaWxhciBhcyBjb21tb24gaW4gdGhlIGZvbGxvd2luZyByZWdyZXNzaW9uLg0KDQotIFRpcHBpbmcgT0xTDQoNCmBgYHtyfQ0Kc3VtbWFyeShwZWVyX29sc19BdmdUaXBfdG9wX2NvbW1vbl8yd2Vla3Nfd2l0aG1hbmFnZXJzX3VwZGF0ZSkkY29lZmZpY2llbnRzDQpgYGANCg0KDQotIFRpcHBpbmcgSVYNCg0KYGBge3J9DQpzdW1tYXJ5KHBlZXJfaXZfQXZnVGlwX3RvcF9jb21tb25fMndlZWtzX3dpdGhtYW5hZ2Vyc191cGRhdGUpJGNvZWZmaWNpZW50cw0KYGBgDQoNCi0gU3RlYWxjbnQgT0xTDQpgYGB7cn0NCnN1bW1hcnkocGVlcl9vbHNfc3RlYWxjbnRfdG9wX2NvbW1vbl8yd2Vla3Nfd2l0aG1hbmFnZXJzX3VwZGF0ZSkkY29lZmZpY2llbnRzDQpgYGANCg0KLSBTdGVhbGNudCBJVg0KYGBge3J9DQpzdW1tYXJ5KHBlZXJfaXZfc3RlYWxjbnRfdG9wX2NvbW1vbl8yd2Vla3Nfd2l0aG1hbmFnZXJzX3VwZGF0ZSkkY29lZmZpY2llbnRzDQpgYGANCg0KLSBTdGVhbGFtdCBPTFMNCmBgYHtyfQ0Kc3VtbWFyeShwZWVyX29sc19zdGVhbGFtdF90b3BfY29tbW9uXzJ3ZWVrc193aXRobWFuYWdlcnNfdXBkYXRlKSRjb2VmZmljaWVudHMNCmBgYA0KDQoNCi0gU3RlYWxhbXQgSVYNCg0KYGBge3J9DQpzdW1tYXJ5KHBlZXJfaXZfc3RlYWxhbXRfdG9wX2NvbW1vbl8yd2Vla3Nfd2l0aG1hbmFnZXJzX3VwZGF0ZSkkY29lZmZpY2llbnRzDQpgYGANCg0KDQojIyBQZWVyIEVmZmVjdCBvZiBuZXcgRW1wbG95ZWVzKHJlZG8gT0xTKQ0KDQotIFRpcHBpbmcgRmlyc3QgNjAgT0xTDQoNCmBgYHtyfQ0Kc3VtbWFyeShwZWVyX29sc19lZmZlY3RfQXZnVGlwX2xhZ193aXRobWFuYWdlcl91cGRhdGVfZmlyc3Q2MCkkY29lZmZpY2llbnRzDQpgYGANCg0KDQoNCi0gVGlwcGluZyBGaXJzdCA2MCBJVg0KDQpgYGB7cn0NCnN1bW1hcnkocGVlcl9pdl9lZmZlY3RfQXZnVGlwX2xhZ193aXRobWFuYWdlcl91cGRhdGVfZmlyc3Q2MCkkY29lZmZpY2llbnRzDQpgYGANCi0gVGlwcGluZyBNaWQgNjAgT0xTDQoNCmBgYHtyfQ0Kc3VtbWFyeShwZWVyX29sc19lZmZlY3RfQXZnVGlwX2xhZ193aXRobWFuYWdlcl91cGRhdGVfbWlkNjApJGNvZWZmaWNpZW50cw0KYGBgDQoNCg0KLSBUaXBwaW5nIG1pZCA2MCBJVg0KDQpgYGB7cn0NCnN1bW1hcnkocGVlcl9pdl9lZmZlY3RfQXZnVGlwX2xhZ193aXRobWFuYWdlcl91cGRhdGVfbWlkNjApJGNvZWZmaWNpZW50cw0KYGBgDQotIFRpcHBpbmcgT3ZlciAxMjAgT0xTDQoNCmBgYHtyfQ0Kc3VtbWFyeShwZWVyX29sc19lZmZlY3RfQXZnVGlwX2xhZ193aXRobWFuYWdlcl91cGRhdGVfbGFzdDYwKSRjb2VmZmljaWVudHMNCmBgYA0KDQotIFRpcHBpbmcgb3ZlciAxMjAgSVYNCg0KYGBge3J9DQpzdW1tYXJ5KHBlZXJfaXZfZWZmZWN0X0F2Z1RpcF9sYWdfd2l0aG1hbmFnZXJfdXBkYXRlX2xhc3Q2MCkkY29lZmZpY2llbnRzDQpgYGANCg0KLSBTdGVhbGNudCBGaXJzdCA2MCBPTFMNCg0KYGBge3J9DQpzdW1tYXJ5KHBlZXJfb2xzX2VmZmVjdF9zdGVhbGNudF9sYWdfd2l0aG1hbmFnZXJfdXBkYXRlX2ZpcnN0NjApJGNvZWZmaWNpZW50cw0KYGBgDQoNCi0gU3RlYWxjbnQgRmlyc3QgNjAgSVYNCg0KYGBge3J9DQpzdW1tYXJ5KHBlZXJfaXZfZWZmZWN0X3N0ZWFsY250X2xhZ193aXRobWFuYWdlcl91cGRhdGVfZmlyc3Q2MCkkY29lZmZpY2llbnRzDQpgYGANCi0gU3RlYWxjbnQgTWlkIDYwIE9MUw0KDQpgYGB7cn0NCnN1bW1hcnkocGVlcl9vbHNfZWZmZWN0X3N0ZWFsY250X2xhZ193aXRobWFuYWdlcl91cGRhdGVfbWlkNjApJGNvZWZmaWNpZW50cw0KYGBgDQotIFN0ZWFsY250IE1pZCA2MCBJVg0KDQpgYGB7cn0NCnN1bW1hcnkocGVlcl9pdl9lZmZlY3Rfc3RlYWxjbnRfbGFnX3dpdGhtYW5hZ2VyX3VwZGF0ZV9taWQ2MCkkY29lZmZpY2llbnRzDQpgYGANCg0KLSBTdGVhbGNudCBvdmVyIDEyMCBPTFMNCmBgYHtyfQ0Kc3VtbWFyeShwZWVyX29sc19lZmZlY3Rfc3RlYWxjbnRfbGFnX3dpdGhtYW5hZ2VyX3VwZGF0ZV9sYXN0NjApJGNvZWZmaWNpZW50cw0KYGBgDQoNCg0KDQotIFN0ZWFsY250IG92ZXIgMTIwIElWDQpgYGB7cn0NCnN1bW1hcnkocGVlcl9pdl9lZmZlY3Rfc3RlYWxjbnRfbGFnX3dpdGhtYW5hZ2VyX3VwZGF0ZV9sYXN0NjApJGNvZWZmaWNpZW50cw0KYGBgDQotIFN0ZWFsYW10IEZpcnN0IDYwIE9MUw0KDQpgYGB7cn0NCnN1bW1hcnkocGVlcl9vbHNfZWZmZWN0X3N0ZWFsYW10X2xhZ193aXRobWFuYWdlcl91cGRhdGVfZmlyc3Q2MCkkY29lZmZpY2llbnRzDQpgYGANCg0KLSBTdGVhbGFtdCBGaXJzdCA2MCBJVg0KDQpgYGB7cn0NCnN1bW1hcnkocGVlcl9pdl9lZmZlY3Rfc3RlYWxhbXRfbGFnX3dpdGhtYW5hZ2VyX3VwZGF0ZV9maXJzdDYwKSRjb2VmZmljaWVudHMNCmBgYA0KLSBTdGVhbGFtdCBNaWQgNjAgT0xTDQoNCmBgYHtyfQ0Kc3VtbWFyeShwZWVyX29sc19lZmZlY3Rfc3RlYWxhbXRfbGFnX3dpdGhtYW5hZ2VyX3VwZGF0ZV9taWQ2MCkkY29lZmZpY2llbnRzDQpgYGANCi0gU3RlYWxhbXQgTWlkIDYwIElWDQoNCmBgYHtyfQ0Kc3VtbWFyeShwZWVyX2l2X2VmZmVjdF9zdGVhbGFtdF9sYWdfd2l0aG1hbmFnZXJfdXBkYXRlX21pZDYwKSRjb2VmZmljaWVudHMNCmBgYA0KLSBTdGVhbGFtdCBvdmVyIDEyMCBPTFMNCg0KYGBge3J9DQpzdW1tYXJ5KHBlZXJfb2xzX2VmZmVjdF9zdGVhbGFtdF9sYWdfd2l0aG1hbmFnZXJfdXBkYXRlX2xhc3Q2MCkkY29lZmZpY2llbnRzDQpgYGANCg0KLSBTdGVhbGFtdCBvdmVyIDEyMCBJVg0KDQpgYGB7cn0NCnN1bW1hcnkocGVlcl9pdl9lZmZlY3Rfc3RlYWxhbXRfbGFnX3dpdGhtYW5hZ2VyX3VwZGF0ZV9sYXN0NjApJGNvZWZmaWNpZW50cw0KYGBgDQoNCiMjIFRlc3QgQ29sbHVzaW9uIFRoZW9yeTogUGVlciBFZmZlY3Qgd2l0aC93aXRob3V0IG5ldyBlbXBsb3llZSBpbiB0aGUgZmlyc3QgNjAgZGF5cw0KDQojIyMgVGlwcGluZw0KDQotIFRpcHBpbmcgT0xTIHdpdGggbmV3IGVtcGxveWVlIG9mIGZpcnN0IDYwIGRheXMNCg0KDQpgYGB7cn0NCnN1bW1hcnkocGVlcl9vbHNfZWZmZWN0X0F2Z1RpcF9sYWdfd2l0aG1hbmFnZXJfdXBkYXRlX3dpdGhfbmV3X2ZpcnN0NjApJGNvZWZmaWNpZW50cw0KYGBgDQoNCg0KDQotIFRpcHBpbmcgSVYgd2l0aCBuZXcgZW1wbG95ZWUgb2YgZmlyc3QgNjAgZGF5cw0KDQpgYGB7cn0NCnN1bW1hcnkocGVlcl9pdl9lZmZlY3RfQXZnVGlwX2xhZ193aXRobWFuYWdlcl91cGRhdGVfd2l0aF9uZXdfZmlyc3Q2MCkkY29lZmZpY2llbnRzDQpgYGANCg0KDQoNCi0gVGlwcGluZyBPTFMgd2l0aG91dCBuZXcgZW1wbG95ZWUgb2YgZmlyc3QgNjAgZGF5cw0KDQpgYGB7cn0NCnN1bW1hcnkocGVlcl9vbHNfZWZmZWN0X0F2Z1RpcF9sYWdfd2l0aG1hbmFnZXJfdXBkYXRlX3dpdGhvdXRfbmV3X2ZpcnN0NjApJGNvZWZmaWNpZW50cw0KYGBgDQoNCg0KLSBUaXBwaW5nIElWIHdpdGhvdXQgbmV3IGVtcGxveWVlIG9mIGZpcnN0IDYwIGRheXMNCg0KYGBge3J9DQpzdW1tYXJ5KHBlZXJfaXZfZWZmZWN0X0F2Z1RpcF9sYWdfd2l0aG1hbmFnZXJfdXBkYXRlX3dpdGhvdXRfbmV3X2ZpcnN0NjApJGNvZWZmaWNpZW50cw0KDQpgYGANCiMjIyBTdGVhbGNudA0KDQojIyMjIE5ldyBlbXBsb3llZSBvZiBmaXJzdCA2MCBkYXlzDQotIFN0ZWFsQ250IE9MUyB3aXRoIG5ldyBlbXBsb3llZSBvZiBmaXJzdCA2MCBkYXlzDQoNCg0KYGBge3J9DQpzdW1tYXJ5KHBlZXJfb2xzX2VmZmVjdF9zdGVhbGNudF9sYWdfd2l0aG1hbmFnZXJfdXBkYXRlX3dpdGhfbmV3X2ZpcnN0NjApJGNvZWZmaWNpZW50cw0KYGBgDQoNCg0KDQotIFN0ZWFsQ250IElWIHdpdGggbmV3IGVtcGxveWVlIG9mIGZpcnN0IDYwIGRheXMNCg0KYGBge3J9DQpzdW1tYXJ5KHBlZXJfaXZfZWZmZWN0X3N0ZWFsY250X2xhZ193aXRobWFuYWdlcl91cGRhdGVfd2l0aF9uZXdfZmlyc3Q2MCkkY29lZmZpY2llbnRzDQpgYGANCg0KDQoNCi0gU3RlYWxDbnQgT0xTIHdpdGhvdXQgbmV3IGVtcGxveWVlIG9mIGZpcnN0IDYwIGRheXMNCg0KYGBge3J9DQpzdW1tYXJ5KHBlZXJfb2xzX2VmZmVjdF9zdGVhbGNudF9sYWdfd2l0aG1hbmFnZXJfdXBkYXRlX3dpdGhvdXRfbmV3X2ZpcnN0NjApJGNvZWZmaWNpZW50cw0KYGBgDQoNCg0KLSBTdGVhbENudCBJViB3aXRob3V0IG5ldyBlbXBsb3llZSBvZiBmaXJzdCA2MCBkYXlzDQoNCmBgYHtyfQ0Kc3VtbWFyeShwZWVyX2l2X2VmZmVjdF9zdGVhbGNudF9sYWdfd2l0aG1hbmFnZXJfdXBkYXRlX3dpdGhvdXRfbmV3X2ZpcnN0NjApJGNvZWZmaWNpZW50cw0KDQpgYGANCiMjIyBOZXcgRW1wbG95ZWUgb2YgZmlyc3QgMzAgZGF5cw0KDQotIHN0ZWFsY250IE9MUyB3aXRoIG5ldyBlbXBsb3llZSBvZiBmaXJzdCAzMCBkYXlzDQoNCg0KYGBge3J9DQpzdW1tYXJ5KHBlZXJfb2xzX2VmZmVjdF9zdGVhbGNudF9sYWdfd2l0aG1hbmFnZXJfdXBkYXRlX3dpdGhfbmV3X2ZpcnN0TSkkY29lZmZpY2llbnRzDQpgYGANCg0KDQoNCi0gc3RlYWxjbnQgSVYgd2l0aCBuZXcgZW1wbG95ZWUgb2YgZmlyc3QgMzAgZGF5cw0KDQpgYGB7cn0NCnN1bW1hcnkocGVlcl9pdl9lZmZlY3Rfc3RlYWxjbnRfbGFnX3dpdGhtYW5hZ2VyX3VwZGF0ZV93aXRoX25ld19maXJzdE0pJGNvZWZmaWNpZW50cw0KYGBgDQoNCg0KDQotIHN0ZWFsY250IE9MUyB3aXRob3V0IG5ldyBlbXBsb3llZSBvZiBmaXJzdCAzMCBkYXlzDQoNCmBgYHtyfQ0Kc3VtbWFyeShwZWVyX29sc19lZmZlY3Rfc3RlYWxjbnRfbGFnX3dpdGhtYW5hZ2VyX3VwZGF0ZV93aXRob3V0X25ld19maXJzdE0pJGNvZWZmaWNpZW50cw0KYGBgDQoNCg0KLSBzdGVhbGNudCBJViB3aXRob3V0IG5ldyBlbXBsb3llZSBvZiBmaXJzdCAzMCBkYXlzDQoNCmBgYHtyfQ0Kc3VtbWFyeShwZWVyX2l2X2VmZmVjdF9zdGVhbGNudF9sYWdfd2l0aG1hbmFnZXJfdXBkYXRlX3dpdGhvdXRfbmV3X2ZpcnN0TSkkY29lZmZpY2llbnRzDQoNCmBgYA0KIyMjIE5ldyBlbXBsb3llZSBvZiBmaXJzdCA5MCBkYXlzDQoNCi0gc3RlYWxjbnQgT0xTIHdpdGggbmV3IGVtcGxveWVlIG9mIGZpcnN0IDkwIGRheXMNCg0KDQpgYGB7cn0NCnN1bW1hcnkocGVlcl9vbHNfZWZmZWN0X3N0ZWFsY250X2xhZ193aXRobWFuYWdlcl91cGRhdGVfd2l0aF9uZXdfZmlyc3Q5MCkkY29lZmZpY2llbnRzDQpgYGANCg0KDQoNCi0gc3RlYWxjbnQgSVYgd2l0aCBuZXcgZW1wbG95ZWUgb2YgZmlyc3QgOTAgZGF5cw0KDQpgYGB7cn0NCnN1bW1hcnkocGVlcl9pdl9lZmZlY3Rfc3RlYWxjbnRfbGFnX3dpdGhtYW5hZ2VyX3VwZGF0ZV93aXRoX25ld19maXJzdDkwKSRjb2VmZmljaWVudHMNCmBgYA0KDQoNCg0KLSBzdGVhbGNudCBPTFMgd2l0aG91dCBuZXcgZW1wbG95ZWUgb2YgZmlyc3QgOTAgZGF5cw0KDQpgYGB7cn0NCnN1bW1hcnkocGVlcl9vbHNfZWZmZWN0X3N0ZWFsY250X2xhZ193aXRobWFuYWdlcl91cGRhdGVfd2l0aG91dF9uZXdfZmlyc3Q5MCkkY29lZmZpY2llbnRzDQpgYGANCg0KDQotIHN0ZWFsY250IElWIHdpdGhvdXQgbmV3IGVtcGxveWVlIG9mIGZpcnN0IDkwIGRheXMNCg0KYGBge3J9DQpzdW1tYXJ5KHBlZXJfaXZfZWZmZWN0X3N0ZWFsY250X2xhZ193aXRobWFuYWdlcl91cGRhdGVfd2l0aG91dF9uZXdfZmlyc3Q5MCkkY29lZmZpY2llbnRzDQoNCmBgYA0KDQojIyMgU3RlYWxhbXQNCg0KIyMjIyBOZXcgZW1wbG95ZWUgb2YgZmlyc3QgNjAgZGF5cw0KLSBTdGVhbGFtdCBPTFMgd2l0aCBuZXcgZW1wbG95ZWUgb2YgZmlyc3QgNjAgZGF5cw0KDQoNCmBgYHtyfQ0Kc3VtbWFyeShwZWVyX29sc19lZmZlY3Rfc3RlYWxhbXRfbGFnX3dpdGhtYW5hZ2VyX3VwZGF0ZV93aXRoX25ld19maXJzdDYwKSRjb2VmZmljaWVudHMNCmBgYA0KDQoNCg0KLSBTdGVhbGFtdCBJViB3aXRoIG5ldyBlbXBsb3llZSBvZiBmaXJzdCA2MCBkYXlzDQoNCmBgYHtyfQ0Kc3VtbWFyeShwZWVyX2l2X2VmZmVjdF9zdGVhbGFtdF9sYWdfd2l0aG1hbmFnZXJfdXBkYXRlX3dpdGhfbmV3X2ZpcnN0NjApJGNvZWZmaWNpZW50cw0KYGBgDQoNCg0KDQotIFN0ZWFsYW10IE9MUyB3aXRob3V0IG5ldyBlbXBsb3llZSBvZiBmaXJzdCA2MCBkYXlzDQoNCmBgYHtyfQ0Kc3VtbWFyeShwZWVyX29sc19lZmZlY3Rfc3RlYWxhbXRfbGFnX3dpdGhtYW5hZ2VyX3VwZGF0ZV93aXRob3V0X25ld19maXJzdDYwKSRjb2VmZmljaWVudHMNCmBgYA0KDQoNCi0gU3RlYWxhbXQgSVYgd2l0aG91dCBuZXcgZW1wbG95ZWUgb2YgZmlyc3QgNjAgZGF5cw0KDQpgYGB7cn0NCnN1bW1hcnkocGVlcl9pdl9lZmZlY3Rfc3RlYWxhbXRfbGFnX3dpdGhtYW5hZ2VyX3VwZGF0ZV93aXRob3V0X25ld19maXJzdDYwKSRjb2VmZmljaWVudHMNCg0KYGBgDQoNCg0KDQoNCiMjIyMgRW1wbG95ZWUgb2YgZmlyc3QgMzAgZGF5cw0KDQotIFN0ZWFsYW10IE9MUyB3aXRoIG5ldyBlbXBsb3llZSBvZiBmaXJzdCAzMCBkYXlzDQoNCg0KYGBge3J9DQpzdW1tYXJ5KHBlZXJfb2xzX2VmZmVjdF9zdGVhbGFtdF9sYWdfd2l0aG1hbmFnZXJfdXBkYXRlX3dpdGhfbmV3X2ZpcnN0TSkkY29lZmZpY2llbnRzDQpgYGANCg0KDQoNCi0gU3RlYWxhbXQgSVYgd2l0aCBuZXcgZW1wbG95ZWUgb2YgZmlyc3QgMzAgZGF5cw0KDQpgYGB7cn0NCnN1bW1hcnkocGVlcl9pdl9lZmZlY3Rfc3RlYWxhbXRfbGFnX3dpdGhtYW5hZ2VyX3VwZGF0ZV93aXRoX25ld19maXJzdE0pJGNvZWZmaWNpZW50cw0KYGBgDQoNCg0KDQotIFN0ZWFsYW10IE9MUyB3aXRob3V0IG5ldyBlbXBsb3llZSBvZiBmaXJzdCAzMCBkYXlzDQoNCmBgYHtyfQ0Kc3VtbWFyeShwZWVyX29sc19lZmZlY3Rfc3RlYWxhbXRfbGFnX3dpdGhtYW5hZ2VyX3VwZGF0ZV93aXRob3V0X25ld19maXJzdE0pJGNvZWZmaWNpZW50cw0KYGBgDQoNCg0KLSBTdGVhbGFtdCBJViB3aXRob3V0IG5ldyBlbXBsb3llZSBvZiBmaXJzdCAzMCBkYXlzDQoNCmBgYHtyfQ0Kc3VtbWFyeShwZWVyX2l2X2VmZmVjdF9zdGVhbGFtdF9sYWdfd2l0aG1hbmFnZXJfdXBkYXRlX3dpdGhvdXRfbmV3X2ZpcnN0TSkkY29lZmZpY2llbnRzDQoNCmBgYA0KDQoNCiMjIyBOZXcgRW1wbG95ZWUgb2YgZmlyc3QgOTAgZGF5cw0KDQotIHN0ZWFsYW10IE9MUyB3aXRoIG5ldyBlbXBsb3llZSBvZiBmaXJzdCA5MCBkYXlzDQoNCg0KYGBge3J9DQpzdW1tYXJ5KHBlZXJfb2xzX2VmZmVjdF9zdGVhbGFtdF9sYWdfd2l0aG1hbmFnZXJfdXBkYXRlX3dpdGhfbmV3X2ZpcnN0OTApJGNvZWZmaWNpZW50cw0KYGBgDQoNCg0KDQotIHN0ZWFsYW10IElWIHdpdGggbmV3IGVtcGxveWVlIG9mIGZpcnN0IDkwIGRheXMNCg0KYGBge3J9DQpzdW1tYXJ5KHBlZXJfaXZfZWZmZWN0X3N0ZWFsYW10X2xhZ193aXRobWFuYWdlcl91cGRhdGVfd2l0aF9uZXdfZmlyc3Q5MCkkY29lZmZpY2llbnRzDQpgYGANCg0KDQoNCi0gc3RlYWxhbXQgT0xTIHdpdGhvdXQgbmV3IGVtcGxveWVlIG9mIGZpcnN0IDkwIGRheXMNCg0KYGBge3J9DQpzdW1tYXJ5KHBlZXJfb2xzX2VmZmVjdF9zdGVhbGFtdF9sYWdfd2l0aG1hbmFnZXJfdXBkYXRlX3dpdGhvdXRfbmV3X2ZpcnN0OTApJGNvZWZmaWNpZW50cw0KYGBgDQoNCg0KLSBzdGVhbGFtdCBJViB3aXRob3V0IG5ldyBlbXBsb3llZSBvZiBmaXJzdCA5MCBkYXlzDQoNCmBgYHtyfQ0Kc3VtbWFyeShwZWVyX2l2X2VmZmVjdF9zdGVhbGFtdF9sYWdfd2l0aG1hbmFnZXJfdXBkYXRlX3dpdGhvdXRfbmV3X2ZpcnN0OTApJGNvZWZmaWNpZW50cw0KDQpgYGANCg0KDQojIyBQZWVyIEVmZmVjdCBCYXNlZCBvbiBQZXJmb3JtYW5jZSBTdGFyIFZTIE5vcm1hbA0KDQojIyMgU3RhciBWUyBOb3JtYWwgaW4gVGlwcGluZw0KDQotIFRpcHBpbmcgT0xTDQpgYGB7cn0NCnN1bW1hcnkocGVlcl9vbHNfQXZnVGlwX3N0YXJfbm9ybWFsX2luX3RpcF93aXRobWFuYWdlcnNfdXBkYXRlKSRjb2VmZmljaWVudHMNCmBgYA0KDQoNCi0gVGlwcGluZyBJVg0KYGBge3J9DQpzdW1tYXJ5KHBlZXJfaXZfQXZnVGlwX3N0YXJfbm9ybWFsX2luX3RpcF93aXRobWFuYWdlcnNfdXBkYXRlKSRjb2VmZmljaWVudHMNCmBgYA0KDQoNCi0gU3RlYWxjbnQgT0xTDQpgYGB7cn0NCnN1bW1hcnkocGVlcl9vbHNfc3RlYWxjbnRfc3Rhcl9ub3JtYWxfaW5fdGlwX3dpdGhtYW5hZ2Vyc191cGRhdGUpJGNvZWZmaWNpZW50cw0KYGBgDQoNCi0gU3RlYWxjbnQgSVYNCmBgYHtyfQ0Kc3VtbWFyeShwZWVyX2l2X3N0ZWFsY250X3N0YXJfbm9ybWFsX2luX3RpcF93aXRobWFuYWdlcnNfdXBkYXRlKSRjb2VmZmljaWVudHMNCmBgYA0KDQotIFN0ZWFsYW10IE9MUw0KYGBge3J9DQpzdW1tYXJ5KHBlZXJfb2xzX3N0ZWFsYW10X3N0YXJfbm9ybWFsX2luX3RpcF93aXRobWFuYWdlcnNfdXBkYXRlKSRjb2VmZmljaWVudHMNCmBgYA0KDQoNCi0gU3RlYWxhbXQgSVYNCmBgYHtyfQ0Kc3VtbWFyeShwZWVyX2l2X3N0ZWFsYW10X3N0YXJfbm9ybWFsX2luX3RpcF93aXRobWFuYWdlcnNfdXBkYXRlKSRjb2VmZmljaWVudHMNCmBgYA0KDQoNCiMjIyBTdGFyIFZzIE5vcm1hbCBpbiBTdGVhbGNudA0KDQotIFRpcHBpbmcgT0xTDQpgYGB7cn0NCnN1bW1hcnkocGVlcl9vbHNfQXZnVGlwX3N0YXJfbm9ybWFsX2luX3N0ZWFsY250X3dpdGhtYW5hZ2Vyc191cGRhdGUpJGNvZWZmaWNpZW50cw0KYGBgDQoNCi0gVGlwcGluZyBJVg0KYGBge3J9DQpzdW1tYXJ5KHBlZXJfaXZfQXZnVGlwX3N0YXJfbm9ybWFsX2luX3N0ZWFsY250X3dpdGhtYW5hZ2Vyc191cGRhdGUpJGNvZWZmaWNpZW50cw0KYGBgDQoNCi0gU3RlYWxjbnQgT0xTDQpgYGB7cn0NCnN1bW1hcnkocGVlcl9vbHNfc3RlYWxjbnRfc3Rhcl9ub3JtYWxfaW5fc3RlYWxjbnRfd2l0aG1hbmFnZXJzX3VwZGF0ZSkkY29lZmZpY2llbnRzDQpgYGANCg0KLSBTdGVhbGNudCBJVg0KYGBge3J9DQpzdW1tYXJ5KHBlZXJfaXZfc3RlYWxjbnRfc3Rhcl9ub3JtYWxfaW5fc3RlYWxjbnRfd2l0aG1hbmFnZXJzX3VwZGF0ZSkkY29lZmZpY2llbnRzDQpgYGANCg0KLSBTdGVhbGFtdCBPTFMNCmBgYHtyfQ0Kc3VtbWFyeShwZWVyX29sc19zdGVhbGFtdF9zdGFyX25vcm1hbF9pbl9zdGVhbGNudF93aXRobWFuYWdlcnNfdXBkYXRlKSRjb2VmZmljaWVudHMNCmBgYA0KDQotIFN0ZWFsYW10IElWDQpgYGB7cn0NCnN1bW1hcnkocGVlcl9pdl9zdGVhbGFtdF9zdGFyX25vcm1hbF9pbl9zdGVhbGNudF93aXRobWFuYWdlcnNfdXBkYXRlKSRjb2VmZmljaWVudHMNCmBgYA0KDQoNCiMjIFRoZSBlZmZlY3Qgb2YgcmVzdGF1cmFudCBndWFyZCBvbiBwZWVyIGVmZmVjdA0KDQojIyMgT3ZlcmFsbCBlZmZlY3Qgb2YgcmVzdGF1cmFudCBndWFyZA0KDQotIFRpcHBpbmcgT0xTIEJlZm9yZSBHdWFyZA0KDQpgYGB7cn0NCnN1bW1hcnkocGVlcl9vbHNfZWZmZWN0X0F2Z1RpcF9sYWdfd2l0aG1hbmFnZXJfdXBkYXRlX2JlZm9yZWd1YXJkKSRjb2VmZmljaWVudHMNCmBgYA0KDQoNCi0gVGlwcGluZyBJViBCZWZvcmUgR3VhcmQNCg0KYGBge3J9DQpzdW1tYXJ5KHBlZXJfaXZfZWZmZWN0X0F2Z1RpcF9sYWdfd2l0aG1hbmFnZXJfdXBkYXRlX2JlZm9yZWd1YXJkKSRjb2VmZmljaWVudHMNCmBgYA0KDQotIFRpcHBpbmcgT0xTIEFmdGVyIEd1YXJkDQpgYGB7cn0NCnN1bW1hcnkocGVlcl9vbHNfZWZmZWN0X0F2Z1RpcF9sYWdfd2l0aG1hbmFnZXJfdXBkYXRlX2FmdGVyZ3VhcmQpJGNvZWZmaWNpZW50cw0KYGBgDQoNCi0gVGlwcGluZyBJViBBZnRlciBHdWFyZA0KDQpgYGB7cn0NCnN1bW1hcnkocGVlcl9pdl9lZmZlY3RfQXZnVGlwX2xhZ193aXRobWFuYWdlcl91cGRhdGVfYWZ0ZXJndWFyZCkkY29lZmZpY2llbnRzDQpgYGANCi0gU3RlYWxjbnQgT0xTIEJlZm9yZSBHdWFyZA0KDQpgYGB7cn0NCnN1bW1hcnkocGVlcl9vbHNfZWZmZWN0X3N0ZWFsY250X2xhZ193aXRobWFuYWdlcl91cGRhdGVfYmVmb3JlZ3VhcmQpJGNvZWZmaWNpZW50cw0KYGBgDQoNCi0gU3RlYWxjbnQgSVYgQmVmb3JlIEd1YXJkDQoNCmBgYHtyfQ0Kc3VtbWFyeShwZWVyX2l2X2VmZmVjdF9zdGVhbGNudF9sYWdfd2l0aG1hbmFnZXJfdXBkYXRlX2JlZm9yZWd1YXJkKSRjb2VmZmljaWVudHMNCmBgYA0KLSBTdGVhbGNudCBPTFMgQWZ0ZXIgR3VhcmQNCg0KYGBge3J9DQpzdW1tYXJ5KHBlZXJfb2xzX2VmZmVjdF9zdGVhbGNudF9sYWdfd2l0aG1hbmFnZXJfdXBkYXRlX2FmdGVyZ3VhcmQpJGNvZWZmaWNpZW50cw0KYGBgDQoNCi0gU3RlYWxjbnQgSVYgQWZ0ZXIgR3VhcmQNCg0KYGBge3J9DQpzdW1tYXJ5KHBlZXJfaXZfZWZmZWN0X3N0ZWFsY250X2xhZ193aXRobWFuYWdlcl91cGRhdGVfYWZ0ZXJndWFyZCkkY29lZmZpY2llbnRzDQpgYGANCg0KLSBTdGVhbGFtdCBPTFMgQmVmb3JlIEd1YXJkDQoNCg0KYGBge3J9DQpzdW1tYXJ5KHBlZXJfb2xzX2VmZmVjdF9zdGVhbGFtdF9sYWdfd2l0aG1hbmFnZXJfdXBkYXRlX2JlZm9yZWd1YXJkKSRjb2VmZmljaWVudHMNCmBgYA0KDQotIFN0ZWFsYW10IElWIEJlZm9yZSBHdWFyZA0KDQoNCmBgYHtyfQ0Kc3VtbWFyeShwZWVyX2l2X2VmZmVjdF9zdGVhbGFtdF9sYWdfd2l0aG1hbmFnZXJfdXBkYXRlX2JlZm9yZWd1YXJkKSRjb2VmZmljaWVudHMNCmBgYA0KDQotIFN0ZWFsYW10IE9MUyBBZnRlciBHdWFyZA0KDQoNCmBgYHtyfQ0Kc3VtbWFyeShwZWVyX29sc19lZmZlY3Rfc3RlYWxhbXRfbGFnX3dpdGhtYW5hZ2VyX3VwZGF0ZV9hZnRlcmd1YXJkKSRjb2VmZmljaWVudHMNCmBgYA0KDQotIFN0ZWFsYW10IElWIEFmdGVyIEd1YXJkDQoNCg0KYGBge3J9DQpzdW1tYXJ5KHBlZXJfaXZfZWZmZWN0X3N0ZWFsYW10X2xhZ193aXRobWFuYWdlcl91cGRhdGVfYWZ0ZXJndWFyZCkkY29lZmZpY2llbnRzDQpgYGANCg0KDQoNCiMjIyBSZXN0YXVyYW50IEd1YXJkICogU3RhciBWUyBOb3JtYWwgaW4gVGlwcGluZw0KDQotIFRpcHBpbmcgSVYgQmVmb3JlIEd1YXJkDQoNCmBgYHtyfQ0Kc3VtbWFyeShwZWVyX2l2X0F2Z1RpcF9zdGFyX25vcm1hbF9pbl90aXBfd2l0aG1hbmFnZXJzX3VwZGF0ZV9iZWZvcmVndWFyZCkkY29lZmZpY2llbnRzDQpgYGANCg0KDQoNCi0gVGlwcGluZyBJViBBZnRlciBHdWFyZA0KDQpgYGB7cn0NCnN1bW1hcnkocGVlcl9pdl9BdmdUaXBfc3Rhcl9ub3JtYWxfaW5fdGlwX3dpdGhtYW5hZ2Vyc191cGRhdGVfYWZ0ZXJndWFyZCkkY29lZmZpY2llbnRzDQpgYGANCg0KDQotIFN0ZWFsY250IElWIEJlZm9yZSBHdWFyZA0KDQpgYGB7cn0NCnN1bW1hcnkocGVlcl9pdl9zdGVhbGNudF9zdGFyX25vcm1hbF9pbl90aXBfd2l0aG1hbmFnZXJzX3VwZGF0ZV9iZWZvcmVndWFyZCkkY29lZmZpY2llbnRzDQpgYGANCg0KDQoNCi0gU3RlYWxjbnQgSVYgQWZ0ZXIgR3VhcmQNCg0KYGBge3J9DQpzdW1tYXJ5KHBlZXJfaXZfc3RlYWxjbnRfc3Rhcl9ub3JtYWxfaW5fdGlwX3dpdGhtYW5hZ2Vyc191cGRhdGVfYWZ0ZXJndWFyZCkkY29lZmZpY2llbnRzDQpgYGANCg0KLSBTdGVhbGFtdCBJViBCZWZvcmUgR3VhcmQNCg0KYGBge3J9DQpzdW1tYXJ5KHBlZXJfaXZfc3RlYWxhbXRfc3Rhcl9ub3JtYWxfaW5fdGlwX3dpdGhtYW5hZ2Vyc191cGRhdGVfYmVmb3JlZ3VhcmQpJGNvZWZmaWNpZW50cw0KYGBgDQoNCg0KDQotIFN0ZWFsYW10IElWIEFmdGVyIEd1YXJkDQoNCmBgYHtyfQ0Kc3VtbWFyeShwZWVyX2l2X3N0ZWFsYW10X3N0YXJfbm9ybWFsX2luX3RpcF93aXRobWFuYWdlcnNfdXBkYXRlX2FmdGVyZ3VhcmQpJGNvZWZmaWNpZW50cw0KYGBgDQoNCg0KDQojIyMgUmVzdGF1cmFudCBHdWFyZCAqIFN0YXIgVlMgTm9ybWFsIGluIFN0ZWFsY250DQoNCi0gVGlwcGluZyBJViBCZWZvcmUgR3VhcmQNCg0KYGBge3J9DQpzdW1tYXJ5KHBlZXJfaXZfQXZnVGlwX3N0YXJfbm9ybWFsX2luX3N0ZWFsY250X3dpdGhtYW5hZ2Vyc191cGRhdGVfYmVmb3JlZ3VhcmQpJGNvZWZmaWNpZW50cw0KYGBgDQoNCg0KDQotIFRpcHBpbmcgSVYgQWZ0ZXIgR3VhcmQNCg0KYGBge3J9DQpzdW1tYXJ5KHBlZXJfaXZfQXZnVGlwX3N0YXJfbm9ybWFsX2luX3N0ZWFsY250X3dpdGhtYW5hZ2Vyc191cGRhdGVfYWZ0ZXJndWFyZCkkY29lZmZpY2llbnRzDQpgYGANCg0KDQotIFN0ZWFsY250IElWIEJlZm9yZSBHdWFyZA0KDQpgYGB7cn0NCnN1bW1hcnkocGVlcl9pdl9zdGVhbGNudF9zdGFyX25vcm1hbF9pbl9zdGVhbGNudF93aXRobWFuYWdlcnNfdXBkYXRlX2JlZm9yZWd1YXJkKSRjb2VmZmljaWVudHMNCmBgYA0KDQoNCg0KLSBTdGVhbGNudCBJViBBZnRlciBHdWFyZA0KDQpgYGB7cn0NCnN1bW1hcnkocGVlcl9pdl9zdGVhbGNudF9zdGFyX25vcm1hbF9pbl9zdGVhbGNudF93aXRobWFuYWdlcnNfdXBkYXRlX2FmdGVyZ3VhcmQpJGNvZWZmaWNpZW50cw0KYGBgDQoNCi0gU3RlYWxhbXQgSVYgQmVmb3JlIEd1YXJkDQoNCmBgYHtyfQ0Kc3VtbWFyeShwZWVyX2l2X3N0ZWFsYW10X3N0YXJfbm9ybWFsX2luX3N0ZWFsY250X3dpdGhtYW5hZ2Vyc191cGRhdGVfYmVmb3JlZ3VhcmQpJGNvZWZmaWNpZW50cw0KYGBgDQoNCg0KDQotIFN0ZWFsYW10IElWIEFmdGVyIEd1YXJkDQoNCmBgYHtyfQ0Kc3VtbWFyeShwZWVyX2l2X3N0ZWFsYW10X3N0YXJfbm9ybWFsX2luX3N0ZWFsY250X3dpdGhtYW5hZ2Vyc191cGRhdGVfYWZ0ZXJndWFyZCkkY29lZmZpY2llbnRzDQpgYGANCg0KDQoNCg0KIyMjIFJlc3RhdXJhbnQgR3VhcmQgKiBDb25uZWN0aW9uIFN0cmVuZ3RoKEZhbWlsYXJpdHkpDQoNCi0gVGlwcGluZyBCZWZvcmUgR3VhcmQNCmBgYHtyfQ0Kc3VtbWFyeShwZWVyX2l2X0F2Z1RpcF90b3BfY29tbW9uXzJ3ZWVrc193aXRobWFuYWdlcnNfYmVmb3JlZ3VhcmRfdXBkYXRlKSRjb2VmZmljaWVudHMNCmBgYA0KDQotIFRpcHBpbmcgQWZ0ZXIgR3VhcmQNCmBgYHtyfQ0Kc3VtbWFyeShwZWVyX2l2X0F2Z1RpcF90b3BfY29tbW9uXzJ3ZWVrc193aXRobWFuYWdlcnNfYWZ0ZXJndWFyZF91cGRhdGUpJGNvZWZmaWNpZW50cw0KYGBgDQoNCg0KDQoNCi0gU3RlYWxjbnQgQmVmb3JlIEd1YXJkDQpgYGB7cn0NCnN1bW1hcnkocGVlcl9pdl9zdGVhbGNudF90b3BfY29tbW9uXzJ3ZWVrc193aXRobWFuYWdlcnNfYmVmb3JlZ3VhcmRfdXBkYXRlKSRjb2VmZmljaWVudHMNCmBgYA0KDQotIFN0ZWFsY250IEFmdGVyIEd1YXJkDQpgYGB7cn0NCnN1bW1hcnkocGVlcl9pdl9zdGVhbGNudF90b3BfY29tbW9uXzJ3ZWVrc193aXRobWFuYWdlcnNfYWZ0ZXJndWFyZF91cGRhdGUpJGNvZWZmaWNpZW50cw0KYGBgDQoNCi0gU3RlYWxhbXQgQmVmb3JlIEd1YXJkDQoNCmBgYHtyfQ0Kc3VtbWFyeShwZWVyX2l2X3N0ZWFsYW10X3RvcF9jb21tb25fMndlZWtzX3dpdGhtYW5hZ2Vyc19iZWZvcmVndWFyZF91cGRhdGUpJGNvZWZmaWNpZW50cw0KYGBgDQoNCi0gU3RlYWxhbXQgQWZ0ZXIgR3VhcmQNCmBgYHtyfQ0Kc3VtbWFyeShwZWVyX2l2X3N0ZWFsYW10X3RvcF9jb21tb25fMndlZWtzX3dpdGhtYW5hZ2Vyc19hZnRlcmd1YXJkX3VwZGF0ZSkkY29lZmZpY2llbnRzDQpgYGANCg0KDQoNCg0KIyMgTmV3IEVtcGxveWVlIHdpdGggc2hvcnRlciB0aW1lIGludGVydmFsDQoNClVzZSAxIG1vbnRoIGFzIHRpbWUgaW50ZXJ2YWwNCg0KIyBBdmdUaXANCg0KLSBBdmcgdGlwIGZpcnN0IG1vbnRoDQpgYGB7cn0NCnN1bW1hcnkocGVlcl9pdl9lZmZlY3RfQXZnVGlwX2xhZ193aXRobWFuYWdlcl91cGRhdGVfZmlyc3RNKSRjb2VmZmljaWVudHMNCmBgYA0KDQotIEF2ZyB0aXAgc2Vjb25kIG1vbnRoDQpgYGB7cn0NCnN1bW1hcnkocGVlcl9pdl9lZmZlY3RfQXZnVGlwX2xhZ193aXRobWFuYWdlcl91cGRhdGVfc2Vjb25kTSkkY29lZmZpY2llbnRzDQpgYGANCg0KLSBBdmcgdGlwIHRoaXJkIG1vbnRoDQpgYGB7cn0NCnN1bW1hcnkocGVlcl9pdl9lZmZlY3RfQXZnVGlwX2xhZ193aXRobWFuYWdlcl91cGRhdGVfdGhpcmRNKSRjb2VmZmljaWVudHMNCmBgYA0KLSBBdmcgdGlwIGZvdXJ0aCBtb250aA0KYGBge3J9DQpzdW1tYXJ5KHBlZXJfaXZfZWZmZWN0X0F2Z1RpcF9sYWdfd2l0aG1hbmFnZXJfdXBkYXRlX2ZvdXJ0aE0pJGNvZWZmaWNpZW50cw0KYGBgDQotIEF2ZyB0aXAgZmlmdGggbW9udGgNCmBgYHtyfQ0Kc3VtbWFyeShwZWVyX2l2X2VmZmVjdF9BdmdUaXBfbGFnX3dpdGhtYW5hZ2VyX3VwZGF0ZV9maWZ0aE0pJGNvZWZmaWNpZW50cw0KYGBgDQoNCi0gQXZnIHRpcCBzaXh0aCBtb250aA0KYGBge3J9DQpzdW1tYXJ5KHBlZXJfaXZfZWZmZWN0X0F2Z1RpcF9sYWdfd2l0aG1hbmFnZXJfdXBkYXRlX3NpeHRoTSkkY29lZmZpY2llbnRzDQpgYGANCg0KDQoNCiMgU3RlYWxjbnQNCg0KLSBzdGVhbGNudCBmaXJzdCBtb250aA0KYGBge3J9DQpzdW1tYXJ5KHBlZXJfaXZfZWZmZWN0X3N0ZWFsY250X2xhZ193aXRobWFuYWdlcl91cGRhdGVfZmlyc3RNKSRjb2VmZmljaWVudHMNCmBgYA0KDQotIHN0ZWFsY250IHNlY29uZCBtb250aA0KYGBge3J9DQpzdW1tYXJ5KHBlZXJfaXZfZWZmZWN0X3N0ZWFsY250X2xhZ193aXRobWFuYWdlcl91cGRhdGVfc2Vjb25kTSkkY29lZmZpY2llbnRzDQpgYGANCg0KLSBzdGVhbGNudCB0aGlyZCBtb250aA0KYGBge3J9DQpzdW1tYXJ5KHBlZXJfaXZfZWZmZWN0X3N0ZWFsY250X2xhZ193aXRobWFuYWdlcl91cGRhdGVfdGhpcmRNKSRjb2VmZmljaWVudHMNCmBgYA0KLSBzdGVhbGNudCBmb3VydGggbW9udGgNCg0KYGBge3J9DQpzdW1tYXJ5KHBlZXJfaXZfZWZmZWN0X3N0ZWFsY250X2xhZ193aXRobWFuYWdlcl91cGRhdGVfZm91cnRoTSkkY29lZmZpY2llbnRzDQpgYGANCi0gc3RlYWxjbnQgZmlmdGggbW9udGgNCg0KYGBge3J9DQpzdW1tYXJ5KHBlZXJfaXZfZWZmZWN0X3N0ZWFsY250X2xhZ193aXRobWFuYWdlcl91cGRhdGVfZmlmdGhNKSRjb2VmZmljaWVudHMNCmBgYA0KDQotIHN0ZWFsY250IHNpeHRoIG1vbnRoDQoNCmBgYHtyfQ0Kc3VtbWFyeShwZWVyX2l2X2VmZmVjdF9zdGVhbGNudF9sYWdfd2l0aG1hbmFnZXJfdXBkYXRlX3NpeHRoTSkkY29lZmZpY2llbnRzDQpgYGANCg0KDQojIFN0ZWFsYW10DQoNCi0gc3RlYWxhbXQgZmlyc3QgbW9udGgNCmBgYHtyfQ0Kc3VtbWFyeShwZWVyX2l2X2VmZmVjdF9zdGVhbGFtdF9sYWdfd2l0aG1hbmFnZXJfdXBkYXRlX2ZpcnN0TSkkY29lZmZpY2llbnRzDQpgYGANCg0KLSBzdGVhbGFtdCBzZWNvbmQgbW9udGgNCmBgYHtyfQ0Kc3VtbWFyeShwZWVyX2l2X2VmZmVjdF9zdGVhbGFtdF9sYWdfd2l0aG1hbmFnZXJfdXBkYXRlX3NlY29uZE0pJGNvZWZmaWNpZW50cw0KYGBgDQoNCi0gc3RlYWxhbXQgdGhpcmQgbW9udGgNCmBgYHtyfQ0Kc3VtbWFyeShwZWVyX2l2X2VmZmVjdF9zdGVhbGFtdF9sYWdfd2l0aG1hbmFnZXJfdXBkYXRlX3RoaXJkTSkkY29lZmZpY2llbnRzDQpgYGANCg0KLSBzdGVhbGFtdCBmb3VydGggbW9udGgNCmBgYHtyfQ0Kc3VtbWFyeShwZWVyX2l2X2VmZmVjdF9zdGVhbGFtdF9sYWdfd2l0aG1hbmFnZXJfdXBkYXRlX2ZvdXJ0aE0pJGNvZWZmaWNpZW50cw0KYGBgDQotIHN0ZWFsYW10IGZpZnRoIG1vbnRoDQpgYGB7cn0NCnN1bW1hcnkocGVlcl9pdl9lZmZlY3Rfc3RlYWxhbXRfbGFnX3dpdGhtYW5hZ2VyX3VwZGF0ZV9maWZ0aE0pJGNvZWZmaWNpZW50cw0KYGBgDQoNCi0gc3RlYWxhbXQgc2l4dGggbW9udGgNCmBgYHtyfQ0Kc3VtbWFyeShwZWVyX2l2X2VmZmVjdF9zdGVhbGFtdF9sYWdfd2l0aG1hbmFnZXJfdXBkYXRlX3NpeHRoTSkkY29lZmZpY2llbnRzDQpgYGANCiMjIEFkZGl0aW9uYWwgUmVncmVzc2lvbjogZHJpbmsvcmV2ZW51ZS9hZGQtb24gaXRlbXMNCg0KDQotIFJldmVudWUgT0xTDQoNCmBgYHtyfQ0Kc3VtbWFyeShwZWVyX29sc19lZmZlY3RfQXZnUmV2X2xhZ193aXRobWFuYWdlcl91cGRhdGUpJGNvZWZmaWNpZW50cw0KYGBgDQoNCg0KLSBSZXZlbnVlIElWDQoNCmBgYHtyfQ0Kc3VtbWFyeShwZWVyX2l2X2VmZmVjdF9BdmdSZXZfbGFnX3dpdGhtYW5hZ2VyX3VwZGF0ZSkkY29lZmZpY2llbnRzDQpgYGANCg0KDQotIERyaW5rIE9MUw0KDQpgYGB7cn0NCnN1bW1hcnkocGVlcl9vbHNfZWZmZWN0X0RyeFNsX2xhZ193aXRobWFuYWdlcl91cGRhdGUpJGNvZWZmaWNpZW50cw0KYGBgDQoNCi0gRHJpbmsgSVYNCmBgYHtyfQ0Kc3VtbWFyeShwZWVyX2l2X2VmZmVjdF9EcnhTbF9sYWdfd2l0aG1hbmFnZXJfdXBkYXRlKSRjb2VmZmljaWVudHMNCmBgYA0KDQotIEFkZC1vbiBPTFMNCg0KYGBge3J9DQpzdW1tYXJ5KHBlZXJfb2xzX2VmZmVjdF9BZGRTbF9sYWdfd2l0aG1hbmFnZXJfdXBkYXRlKSRjb2VmZmljaWVudHMNCmBgYA0KDQotIEFkZC1vbiBJVg0KDQpgYGB7cn0NCnN1bW1hcnkocGVlcl9pdl9lZmZlY3RfQWRkU2xfbGFnX3dpdGhtYW5hZ2VyX3VwZGF0ZSkkY29lZmZpY2llbnRzDQpgYGANCg0KIyMgQ3Jvc3MgZWZmZWN0IG9mIFRpcHBpbmcgb24gU3RlYWxpbmcNCg0KLSBFZmZlY3Qgb2YgdGlwcGludCtzdGVhbGluZyBvbiBzdGVhbGNudA0KYGBge3J9DQpzdW1tYXJ5KHBlZXJfaXZfZWZmZWN0X3N0ZWFsY250X2xhZ193aXRobWFuYWdlcl91cGRhdGVfd2l0aHRpcCkkY29lZmZpY2llbnRzDQpgYGANCg0KLSBFZmZlY3Qgb2YgdGlwcGludCtzdGVhbGluZyBvbiBzdGVhbGFtdA0KYGBge3J9DQpzdW1tYXJ5KHBlZXJfaXZfZWZmZWN0X3N0ZWFsYW10X2xhZ193aXRobWFuYWdlcl91cGRhdGVfd2l0aHRpcCkkY29lZmZpY2llbnRzDQpgYGANCg0KLSBFZmZlY3Qgb2YgdGlwcGluZytzdGVhbGluZyBvbiB0aXBwaW5nDQoNCmBgYHtyfQ0Kc3VtbWFyeShwZWVyX2l2X2VmZmVjdF9BdmdUaXBfbGFnX3dpdGhtYW5hZ2VyX3VwZGF0ZV93aXRoc3RlYWwpJGNvZWZmaWNpZW50cw0KYGBgDQoNCi0gRWZmZWN0IG9mIGRyaW5rIHNhbGVzK3N0ZWFsaW5nIG9uIGRyaW5rIHNhbGVzDQoNCmBgYHtyLHdhcm5pbmc9RkFMU0V9DQpzdW1tYXJ5KHBlZXJfaXZfZWZmZWN0X0RyeFNsX2xhZ193aXRobWFuYWdlcl91cGRhdGVfd2l0aHN0ZWFsKSRjb2VmZmljaWVudHNbYygyLDMpLF0NCmBgYA0KDQoNCg0KLSBFZmZlY3Qgb2YgQWRkb24gc2FsZXMrc3RlYWxpbmcgb24gYWRkb24gc2FsZXMNCg0KYGBge3Isd2FybmluZz1GQUxTRX0NCnN1bW1hcnkocGVlcl9pdl9lZmZlY3RfQWRkU2xfbGFnX3dpdGhtYW5hZ2VyX3VwZGF0ZV93aXRoc3RlYWwpJGNvZWZmaWNpZW50c1tjKDIsMyksXQ0KYGBg