Abstract
This paper presents an experimental analysis of the Stag Hunt and
Prisoner’s Dilemma games. The experiment was run at the Faculty of
Management, Comenius University, with the participation of 16 and 18
players, respectively. In analyzing the experiment results, we note that
the game-theoretical Nash Equilibria were achieved by the majority of
players, albeit after experiencing a few introductory rounds. We
interpret this fact as an absence of the players’ perfect rationality
and we incline in our interpretations more to the players’ bounded
rationality assumption.
Stag Hunt Game
The Stug Hunt game is a popular theoretical game that highlights the
cooperation of players in light of their risk and payoff
preferences.
Table 1. Payoff matrix of the Prisoner’s
Dilemma.
| Cooperate |
2 \ 2 |
0 \ 1 |
| Non-Cooperate |
1 \ 0 |
1 \ 1 |
The Stag Hunt is a coordination game in which two players must choose
between hunting a stag or a hare. Hunting the stag is a great way to
win, but only if both players work together. Hunting the hare is a
safer, lower-reward option that does not require cooperation. The game
reflects the tension between trust and risk on one side and high mutual
benefits on the other.
If analysing the payoff matrix (see Table. 1) and
experiment results (Fig. 1), the following is
apparent:
- There is just one Pareto-efficient solution: both hunters should
cooperate (red). This strategy profile is the only theoretical
prediction (dominant Nash equilibrium) based on Game theory maximising
payoffs of both players. The second Nash equilibrium consists of the
safe Non-cooperative strategies, i.e., both hunters are hunting the
rabbit individually.
- If playing eight rounds of the experiment, the dominant Nash
equilibrium was not played automatically by all the players; on the
contrary, the game results reflect how payoffs, trust, risk preferences,
and experience collected in previous rounds influence the players’
strategic decisions.
The majority of players converged to the Pareto-efficient Nash
equilibrium based on cooperation, while a minority of players maintain
their Nash equilibrium strategies, focusing on risk elimination. The
other non-coordination solutions remain minor and not systematic.
Evolution
Fig. 1 depicts the evolution of the Cooperation /
Non-Cooperation strategies in 8 rounds. There were 18 participants, who
were randomly matched at the start of the experiment. The created pairs
persisted during the whole experiment. The evolution of the played
strategies shows that the participants played the first round somewhat
randomly, but in later rounds, the players converged mainly to the
cooperating strategy. In the last round, five pairs of players out of
nine employed the Nash equilibrium strategy, in which both players
cooperate. Thus, we show that convergence towards a dominant Nash
equilibrium does not emerge suddenly, but rather it is the result of
trial-and-error experiments by the players. At the same time, two pairs
of players played the dominated Nash equilibrium of mutual
non-cooperation. Just two pairs of players played out of the equilibria
in the last round.
Fig. 1. Eight rounds of the strategies evolution

The blue line in Fig. 2 depicts the evolution of the
average payoffs achieved during the simulation. The solid red line fits
the experimental results, showing that the average payoffs increase as
the simulation progresses through the rounds. The dotted red line
denotes the payoff if playing the cooperative Nash equilibrium, which is
the maximum possible payoff in the game. The dashed red line denotes the
payoffs of playing the non-cooperative Nash equilibrium. The real
average payoffs evolve progressively between the two horizontal lines;
however, there is a slight chance of reaching the cooperative strategies
played by all the experiment participants.
Fig 2. Evolution of the average payoffs

Prisoner’s Dilemma Game
The Prisoner’s Dilemma is a strategic game that captures the conflict
between mutual benefits of cooperation and selfish incentives to
unilaterally break the cooperation.
Table 2. Payoff matrix of the Prisoner’s
Dilemma.
| Cooperate |
3 \ 3 |
0 \ 5 |
| Non-Cooperate (Defect) |
5 \ 0 |
2 \ 2 |
Two players each choose between cooperating and defecting.
Cooperation leads to a moderate payoff for both, while unilateral
defection offers a tempting, higher reward if the other remains
cooperative — but at the cost of severely punishing the cooperator. If
both defect, they each receive a lower payoff than if they had
cooperated. The dilemma lies in the fact that mutual defection is a Nash
Equilibrium strategy, even though cooperation payoff dominates mutual
defection, i.e., mutual cooperation would lead to a better outcome for
both (red color). The game reveals the challenges of trust and the
tempting option of unilateral defection, showing how rational
self-interest can lead to collectively suboptimal outcomes. Mutual
cooperation is Pareto efficient, while mutual defection constitutes a
Pareto inefficient Nash equilibrium.
Evolution
Upon inspecting Fig. 3, the apparent dominance in
mutually playing the defective strategies is evident from the very start
of the simulation. Five pairs of players played the Nash equilibrium in
the first round; however, no pair played the Pareto-efficient strategy
profile of mutually playing the Cooperative strategies. However, the
other strategies are tempting, causing the Nash equilibrium to be less
stable, and some players try individually to restore the Pareto-optimal
strategy profile of mutual cooperation. It was achieved only once in the
fourth round; otherwise, no pair converted to this strategy profile
throughout the entire simulation. We explain it so that there is no
cooperation incentive preventing unilateral violation of the
cooperation.
Fig.3 Eight rounds of the strategies evolution

If inspecting average payoffs, as introduced in Fig.
4, the following is apparent: the red solid line demonstrates
the general trend, which is sloping down; however, we do not consider it
to be statistically significant. During the entire experiment, the
number of defective player pairs oscillates around five. It means that
the Nash equilibrium of mutual defection (meaning the lowest average
payoff (2) for both players) is played most frequently; however, the
players always try to destroy this kind of disadvantageous equilibrium.
Attempts to disrupt this kind of equilibrium result in significant
oscillations in the average payoffs (blue curve) around the trend
line.
Fig 4. Evolution of the average payoffs

Inspecting the payoff matrix given in Table 2.
concludes that selection of the second row, or selection of the left
column is not rationale, as both strategies dominate their counterpart
(i.e., first row or the right column) as regardless the turn of the
opponent, the second raw (right column) provides higher payoff than the
first raw (left column). Fig. 5 demonstrates that the
number of these irrational strategies selected decreases as the number
of rounds passed increases. However, there is a relatively small chance
they converge to zero, as the incentives to deviate from the high
cooperation payoffs strategies are high.
Fig.5 Number of Not Best Responses - evolution

LS0tCnRpdGxlOiAiUHJpc29uZXIncyBEaWxlbW1hICYgU3RhZyBhbmQgSHVudCBHYW1lcyIKc3VidGl0bGU6ICJFeHBlcmltZW50YWwgY29udHJvdmVyc3kiCmF1dGhvcjogIk1pY2hhbCBQw6FsZW7DrWsgYW5kIFZsYWRpbcOtciBHYXpkYSIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKCmBgYHtyIHNldHVwMiwgaW5jbHVkZT1GQUxTRX0Kcm0obGlzdD1scygpKQpsaWJyYXJ5KGtuaXRyKQoKa25pdHI6Om9wdHNfY2h1bmskc2V0KAogIGVjaG8gPSBGQUxTRSwKICBtZXNzYWdlID0gRkFMU0UsCiAgd2FybmluZyA9IEZBTFNFLAogIGVycm9yID0gRkFMU0UsCiAgaW5jbHVkZSA9IFRSVUUsCgogICMg4pyz77iPIEdMT0JBTCBmaWd1cmUgc2V0dGluZ3MKICBmaWcud2lkdGggPSA1LCAgICAgICMgd2lkdGggaW4gaW5jaGVzCiAgZmlnLmhlaWdodCA9IDMuNzUsICAgICAjIGhlaWdodCBpbiBpbmNoZXMKICBvdXQud2lkdGggPSAiNzUlIiwgICMgcmVsYXRpdmUgc2l6ZSBpbiBIVE1MCiAgZmlnLmFsaWduID0gImNlbnRlciIsCiAgZHBpID0gNDAwLCAgICAgICAgICAjIHNoYXJwIHRleHQgYW5kIGxpbmVzCiAgZGV2ID0gInN2ZyIgICAgICAgICAjIHZlY3RvciBncmFwaGljcyAobm8gYmx1ciBpbiBIVE1MKQopCmBgYAoKIyMgQWJzdHJhY3QKClRoaXMgcGFwZXIgcHJlc2VudHMgYW4gZXhwZXJpbWVudGFsIGFuYWx5c2lzIG9mIHRoZSBTdGFnIEh1bnQgYW5kIFByaXNvbmVy4oCZcyBEaWxlbW1hIGdhbWVzLiBUaGUgZXhwZXJpbWVudCB3YXMgcnVuIGF0IHRoZSBGYWN1bHR5IG9mIE1hbmFnZW1lbnQsIENvbWVuaXVzIFVuaXZlcnNpdHksIHdpdGggdGhlIHBhcnRpY2lwYXRpb24gb2YgMTYgYW5kIDE4IHBsYXllcnMsIHJlc3BlY3RpdmVseS4gSW4gYW5hbHl6aW5nIHRoZSBleHBlcmltZW50IHJlc3VsdHMsIHdlIG5vdGUgdGhhdCB0aGUgZ2FtZS10aGVvcmV0aWNhbCBOYXNoIEVxdWlsaWJyaWEgd2VyZSBhY2hpZXZlZCBieSB0aGUgbWFqb3JpdHkgb2YgcGxheWVycywgYWxiZWl0IGFmdGVyIGV4cGVyaWVuY2luZyBhIGZldyBpbnRyb2R1Y3Rvcnkgcm91bmRzLiBXZSBpbnRlcnByZXQgdGhpcyBmYWN0IGFzIGFuIGFic2VuY2Ugb2YgdGhlIHBsYXllcnMnIHBlcmZlY3QgcmF0aW9uYWxpdHkgYW5kIHdlIGluY2xpbmUgaW4gb3VyIGludGVycHJldGF0aW9ucyBtb3JlIHRvIHRoZSBwbGF5ZXJzJyBib3VuZGVkIHJhdGlvbmFsaXR5IGFzc3VtcHRpb24uCgojIyBTdGFnIEh1bnQgR2FtZQoKVGhlIFN0dWcgSHVudCBnYW1lIGlzIGEgcG9wdWxhciB0aGVvcmV0aWNhbCBnYW1lIHRoYXQgaGlnaGxpZ2h0cyB0aGUgY29vcGVyYXRpb24gb2YgcGxheWVycyBpbiBsaWdodCBvZiB0aGVpciByaXNrIGFuZCBwYXlvZmYgcHJlZmVyZW5jZXMuIAoKKipUYWJsZSAxLioqIFBheW9mZiBtYXRyaXggb2YgdGhlIFByaXNvbmVy4oCZcyBEaWxlbW1hLgoKfCBQbGF5ZXIgUiBcIFBsYXllciBDIHwgQ29vcGVyYXRlIHwgTm9uLUNvb3BlcmF0ZSAgfAp8Oi0tLS0tLS0tLS0tLS0tLS0tLS0tOnw6LS0tLS0tLS0tLTp8Oi0tLS0tLS06fAp8IENvb3BlcmF0ZSB8IDxzcGFuIHN0eWxlPSJjb2xvcjpyZWQiPjIgXFwgMjwvc3Bhbj4gfCAwIFxcIDEgfAp8IE5vbi1Db29wZXJhdGUgfCAxIFxcIDAgfCA8c3BhbiBzdHlsZT0iY29sb3I6Ymx1ZSI+MSBcXCAxPC9zcGFuPiB8CgoKVGhlIFN0YWcgSHVudCBpcyBhIGNvb3JkaW5hdGlvbiBnYW1lIGluIHdoaWNoIHR3byBwbGF5ZXJzIG11c3QgY2hvb3NlIGJldHdlZW4gaHVudGluZyBhIHN0YWcgb3IgYSBoYXJlLiBIdW50aW5nIHRoZSBzdGFnIGlzIGEgZ3JlYXQgd2F5IHRvIHdpbiwgYnV0IG9ubHkgaWYgYm90aCBwbGF5ZXJzIHdvcmsgdG9nZXRoZXIuIEh1bnRpbmcgdGhlIGhhcmUgaXMgYSBzYWZlciwgbG93ZXItcmV3YXJkIG9wdGlvbiB0aGF0IGRvZXMgbm90IHJlcXVpcmUgY29vcGVyYXRpb24uIFRoZSBnYW1lIHJlZmxlY3RzIHRoZSB0ZW5zaW9uIGJldHdlZW4gdHJ1c3QgYW5kIHJpc2sgb24gb25lIHNpZGUgYW5kIGhpZ2ggbXV0dWFsIGJlbmVmaXRzIG9uIHRoZSBvdGhlci4gIAoKSWYgYW5hbHlzaW5nIHRoZSBwYXlvZmYgbWF0cml4IChzZWUgKipUYWJsZS4gMSoqKSBhbmQgZXhwZXJpbWVudCByZXN1bHRzICgqKkZpZy4gMSoqKSwgdGhlIGZvbGxvd2luZyBpcyBhcHBhcmVudDoKCi0gVGhlcmUgaXMganVzdCBvbmUgUGFyZXRvLWVmZmljaWVudCBzb2x1dGlvbjogYm90aCBodW50ZXJzIHNob3VsZCBjb29wZXJhdGUgKHJlZCkuIFRoaXMgc3RyYXRlZ3kgcHJvZmlsZSBpcyB0aGUgb25seSB0aGVvcmV0aWNhbCBwcmVkaWN0aW9uIChkb21pbmFudCBOYXNoIGVxdWlsaWJyaXVtKSBiYXNlZCBvbiBHYW1lIHRoZW9yeSBtYXhpbWlzaW5nIHBheW9mZnMgb2YgYm90aCBwbGF5ZXJzLiBUaGUgc2Vjb25kIE5hc2ggZXF1aWxpYnJpdW0gY29uc2lzdHMgb2YgdGhlIHNhZmUgTm9uLWNvb3BlcmF0aXZlIHN0cmF0ZWdpZXMsIGkuZS4sIGJvdGggaHVudGVycyBhcmUgaHVudGluZyB0aGUgcmFiYml0IGluZGl2aWR1YWxseS4gCi0gSWYgcGxheWluZyBlaWdodCByb3VuZHMgb2YgdGhlIGV4cGVyaW1lbnQsIHRoZSBkb21pbmFudCBOYXNoIGVxdWlsaWJyaXVtIHdhcyBub3QgcGxheWVkIGF1dG9tYXRpY2FsbHkgYnkgYWxsIHRoZSBwbGF5ZXJzOyBvbiB0aGUgY29udHJhcnksICB0aGUgZ2FtZSByZXN1bHRzIHJlZmxlY3QgaG93IHBheW9mZnMsIHRydXN0LCByaXNrIHByZWZlcmVuY2VzLCBhbmQgZXhwZXJpZW5jZSBjb2xsZWN0ZWQgaW4gcHJldmlvdXMgcm91bmRzIGluZmx1ZW5jZSB0aGUgcGxheWVycycgc3RyYXRlZ2ljIGRlY2lzaW9ucy4gCgpUaGUgbWFqb3JpdHkgb2YgcGxheWVycyBjb252ZXJnZWQgdG8gdGhlIFBhcmV0by1lZmZpY2llbnQgTmFzaCBlcXVpbGlicml1bSBiYXNlZCBvbiBjb29wZXJhdGlvbiwgd2hpbGUgYSBtaW5vcml0eSBvZiBwbGF5ZXJzIG1haW50YWluIHRoZWlyIE5hc2ggZXF1aWxpYnJpdW0gc3RyYXRlZ2llcywgZm9jdXNpbmcgb24gcmlzayBlbGltaW5hdGlvbi4gVGhlIG90aGVyIG5vbi1jb29yZGluYXRpb24gc29sdXRpb25zIHJlbWFpbiBtaW5vciBhbmQgbm90IHN5c3RlbWF0aWMuIAoKCgoKIyMjIEV2b2x1dGlvbgoKKipGaWcuIDEqKiBkZXBpY3RzIHRoZSBldm9sdXRpb24gb2YgdGhlIENvb3BlcmF0aW9uIC8gTm9uLUNvb3BlcmF0aW9uIHN0cmF0ZWdpZXMgaW4gOCByb3VuZHMuIFRoZXJlIHdlcmUgMTggcGFydGljaXBhbnRzLCB3aG8gd2VyZSByYW5kb21seSBtYXRjaGVkIGF0IHRoZSBzdGFydCBvZiB0aGUgZXhwZXJpbWVudC4gVGhlIGNyZWF0ZWQgcGFpcnMgcGVyc2lzdGVkIGR1cmluZyB0aGUgd2hvbGUgZXhwZXJpbWVudC4gVGhlIGV2b2x1dGlvbiBvZiB0aGUgcGxheWVkIHN0cmF0ZWdpZXMgc2hvd3MgdGhhdCB0aGUgcGFydGljaXBhbnRzIHBsYXllZCB0aGUgZmlyc3Qgcm91bmQgc29tZXdoYXQgcmFuZG9tbHksIGJ1dCBpbiBsYXRlciByb3VuZHMsIHRoZSBwbGF5ZXJzIGNvbnZlcmdlZCBtYWlubHkgdG8gdGhlIGNvb3BlcmF0aW5nIHN0cmF0ZWd5LiBJbiB0aGUgbGFzdCByb3VuZCwgZml2ZSBwYWlycyBvZiBwbGF5ZXJzIG91dCBvZiBuaW5lIGVtcGxveWVkIHRoZSBOYXNoIGVxdWlsaWJyaXVtIHN0cmF0ZWd5LCBpbiB3aGljaCBib3RoIHBsYXllcnMgY29vcGVyYXRlLiBUaHVzLCB3ZSBzaG93IHRoYXQgY29udmVyZ2VuY2UgdG93YXJkcyBhIGRvbWluYW50IE5hc2ggZXF1aWxpYnJpdW0gZG9lcyBub3QgZW1lcmdlIHN1ZGRlbmx5LCBidXQgcmF0aGVyIGl0IGlzIHRoZSByZXN1bHQgb2YgdHJpYWwtYW5kLWVycm9yIGV4cGVyaW1lbnRzIGJ5IHRoZSBwbGF5ZXJzLiBBdCB0aGUgc2FtZSB0aW1lLCB0d28gcGFpcnMgb2YgcGxheWVycyBwbGF5ZWQgdGhlIGRvbWluYXRlZCBOYXNoIGVxdWlsaWJyaXVtIG9mIG11dHVhbCBub24tY29vcGVyYXRpb24uIEp1c3QgdHdvIHBhaXJzIG9mIHBsYXllcnMgcGxheWVkIG91dCBvZiB0aGUgZXF1aWxpYnJpYSBpbiB0aGUgbGFzdCByb3VuZC4KCioqRmlnLiAxLioqIEVpZ2h0IHJvdW5kcyBvZiB0aGUgc3RyYXRlZ2llcyBldm9sdXRpb24KCmBgYHtyfQojIExvYWQgcmVxdWlyZWQgcGFja2FnZXMKbGlicmFyeSh0aWR5dmVyc2UpCgojIExvYWQgZGF0YQojIHVkYWplU0ggPC0gcmVhZF9jc3YyKCJTdGFnSHVudERhdGEuY3N2IikKdWRhamVTSCA8LSByZWFkX2NzdjIoInVkYWplU0guY3N2IikKCiMgRmlsdGVyIGZvciBSb2xlID09IDEKcm9sZTEgPC0gdWRhamVTSCAlPiUgCiAgZmlsdGVyKFJvbGUgPT0gMSkKCiMgLS0tIENvbXB1dGUgMngyIG9jY3VycmVuY2UgdGFibGVzIC0tLQpyb3VuZF90YWJsZXMgPC0gcm9sZTEgJT4lCiAgZ3JvdXBfYnkoUm91bmQsIERlY2lzaW9uLCBPdGhlckRlY2lzaW9uKSAlPiUKICBzdW1tYXJpc2UoY291bnQgPSBuKCksIC5ncm91cHMgPSAiZHJvcCIpICU+JQogIGNvbXBsZXRlKFJvdW5kLCBEZWNpc2lvbiA9IDE6MiwgT3RoZXJEZWNpc2lvbiA9IDE6MiwgZmlsbCA9IGxpc3QoY291bnQgPSAwKSkKCiMgLS0tIFByaW50IDJ4MiB0YWJsZXMgZm9yIGVhY2ggcm91bmQgLS0tCmZvciAociBpbiBzb3J0KHVuaXF1ZShyb3VuZF90YWJsZXMkUm91bmQpKSkgewogICNjYXQoIlxuUm91bmQiLCByLCAiXG4iKQogIHRibCA8LSByb3VuZF90YWJsZXMgJT4lCiAgICBmaWx0ZXIoUm91bmQgPT0gcikgJT4lCiAgICBwaXZvdF93aWRlcihuYW1lc19mcm9tID0gT3RoZXJEZWNpc2lvbiwgdmFsdWVzX2Zyb20gPSBjb3VudCkKICAjcHJpbnQodGJsKQp9CmBgYAoKCgoKYGBge3IgaGVhdG1hcHNTSH0KCiMgLS0tIEhlYXRtYXBzIGFjcm9zcyByb3VuZHMgKHdoaXRlIOKGkiBsaWdodCBibHVlIOKGkiBkYXJrIGJsdWUpIC0tLQpnZ3Bsb3Qocm91bmRfdGFibGVzLCBhZXMoeCA9IGZhY3RvcihPdGhlckRlY2lzaW9uKSwKICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSBmYWN0b3IoRGVjaXNpb24pLAogICAgICAgICAgICAgICAgICAgICAgICAgZmlsbCA9IGNvdW50KSkgKwogIGdlb21fdGlsZShjb2xvciA9ICJ3aGl0ZSIpICsKICBnZW9tX3RleHQoYWVzKGxhYmVsID0gY291bnQpLCBjb2xvciA9ICJibGFjayIsIHNpemUgPSA0KSArCiAgc2NhbGVfZmlsbF9ncmFkaWVudG4oCiAgICBjb2xvdXJzID0gYygid2hpdGUiLCAiI0FERDhFNiIsICIjMDAwMDhCIiksICAjIHdoaXRlIOKGkiBsaWdodCBibHVlIOKGkiBkYXJrIGJsdWUKICAgIGxpbWl0cyA9IGMoMCwgNiksCiAgICBuYW1lID0gIkNvdW50IgogICkgKwogIHNjYWxlX3lfZGlzY3JldGUobGltaXRzID0gYygiMiIsICIxIikpICsgICMgUmV2ZXJzZSBZLWF4aXM6IDEgb24gdG9wCiAgZmFjZXRfd3JhcCh+IFJvdW5kLCBuY29sID0gNCkgKwogIGxhYnMoCiAgICAjIHRpdGxlID0gIiIsCiAgICB4ID0gIkNvbHVtbiBQbGF5ZXIgMS1jb29wZXJhdGUsIDIgbm9uLWNvb3BlcmF0ZSIsCiAgICB5ID0gIlJvdyBQbGF5ZXIgMS1jb29wZXJhdGUsIDIgbm9uLWNvb3BlcmF0ZSIKICApICsKICB0aGVtZV9taW5pbWFsKGJhc2Vfc2l6ZSA9IDkpICsKICB0aGVtZSgKICAgIHBhbmVsLmdyaWQgPSBlbGVtZW50X2JsYW5rKCksCiAgICBzdHJpcC50ZXh0ID0gZWxlbWVudF90ZXh0KGZhY2UgPSAiYm9sZCIpCiAgKQoKCmBgYAoKClRoZSBibHVlIGxpbmUgaW4gKipGaWcuIDIqKiBkZXBpY3RzIHRoZSBldm9sdXRpb24gb2YgdGhlIGF2ZXJhZ2UgcGF5b2ZmcyBhY2hpZXZlZCBkdXJpbmcgdGhlIHNpbXVsYXRpb24uIFRoZSBzb2xpZCByZWQgbGluZSBmaXRzIHRoZSBleHBlcmltZW50YWwgcmVzdWx0cywgc2hvd2luZyB0aGF0IHRoZSBhdmVyYWdlIHBheW9mZnMgaW5jcmVhc2UgYXMgdGhlIHNpbXVsYXRpb24gcHJvZ3Jlc3NlcyB0aHJvdWdoIHRoZSByb3VuZHMuIFRoZSBkb3R0ZWQgcmVkIGxpbmUgZGVub3RlcyB0aGUgcGF5b2ZmIGlmIHBsYXlpbmcgdGhlIGNvb3BlcmF0aXZlIE5hc2ggZXF1aWxpYnJpdW0sIHdoaWNoIGlzIHRoZSBtYXhpbXVtIHBvc3NpYmxlIHBheW9mZiBpbiB0aGUgZ2FtZS4gVGhlIGRhc2hlZCByZWQgbGluZSBkZW5vdGVzIHRoZSBwYXlvZmZzIG9mIHBsYXlpbmcgdGhlIG5vbi1jb29wZXJhdGl2ZSBOYXNoIGVxdWlsaWJyaXVtLiBUaGUgcmVhbCBhdmVyYWdlIHBheW9mZnMgZXZvbHZlIHByb2dyZXNzaXZlbHkgYmV0d2VlbiB0aGUgdHdvIGhvcml6b250YWwgbGluZXM7IGhvd2V2ZXIsIHRoZXJlIGlzIGEgc2xpZ2h0IGNoYW5jZSBvZiByZWFjaGluZyB0aGUgY29vcGVyYXRpdmUgc3RyYXRlZ2llcyBwbGF5ZWQgYnkgYWxsIHRoZSBleHBlcmltZW50IHBhcnRpY2lwYW50cy4KCioqRmlnIDIuKiogRXZvbHV0aW9uIG9mIHRoZSBhdmVyYWdlIHBheW9mZnMKCmBgYHtyIGxpbmVncmFwaFNIfQojIC0tLSBDb21wdXRlIGF2ZXJhZ2UgcGF5b2ZmIHBlciByb3VuZCAoc3ltbWV0cmljIGdhbWUpIC0tLQphdmdfcGF5b2ZmcyA8LSB1ZGFqZVNIICU+JQogIGdyb3VwX2J5KFJvdW5kKSAlPiUKICBzdW1tYXJpc2UoQXZlcmFnZV9QYXlvZmYgPSBtZWFuKEVhcm5pbmdzLCBuYS5ybSA9IFRSVUUpKSAlPiUKICB1bmdyb3VwKCkKCiMgLS0tIExpbmUgcGxvdCBvZiBhdmVyYWdlIHBheW9mZnMgYnkgcm91bmQgLS0tCmdncGxvdChhdmdfcGF5b2ZmcywgYWVzKHggPSBSb3VuZCwgeSA9IEF2ZXJhZ2VfUGF5b2ZmKSkgKwogICMgRXZvbHV0aW9uIGxpbmUgKGRhcmsgYmx1ZSkKICBnZW9tX2xpbmUoYWVzKGNvbG9yID0gIkV2b2x1dGlvbiBvZiBhdmVyYWdlIHBheW9mZnMiKSwgbGluZXdpZHRoID0gMC42KSArCiAgZ2VvbV9wb2ludChjb2xvciA9ICJkYXJrYmx1ZSIsIHNpemUgPSAyKSArCiAgCgoKICAjIFRyZW5kIGxpbmUgKHNvbGlkIHJlZCkKICBnZW9tX3Ntb290aChhZXMoY29sb3IgPSAiVHJlbmQgZXZvbHV0aW9uIGxpbmUiKSwKICAgICAgICAgICAgICBtZXRob2QgPSAibG0iLCBzZSA9IEZBTFNFLCBsaW5ldHlwZSA9ICJzb2xpZCIsIGxpbmV3aWR0aCA9IDAuNSkgKwogIAogICMgSG9yaXpvbnRhbCBsaW5lcyAoZG90dGVkICYgZGFzaGVkIHJlZCkKICBnZW9tX2hsaW5lKGFlcyh5aW50ZXJjZXB0ID0gMiwgY29sb3IgPSAiQXZnLiBwYXlvZmYgaWYgYm90aCBjb29wZXJhdGluZyAoMykiKSwKICAgICAgICAgICAgIGxpbmV0eXBlID0gImRvdHRlZCIsIGxpbmV3aWR0aCA9IDAuNSkgKwogIGdlb21faGxpbmUoYWVzKHlpbnRlcmNlcHQgPSAxLCBjb2xvciA9ICJBdmcuIHBheW9mZiBpZiBib3RoIGRlZmVjdGluZyAoMikiKSwKICAgICAgICAgICAgIGxpbmV0eXBlID0gImRhc2hlZCIsIGxpbmV3aWR0aCA9IDAuNSkgKwogIAogICMgRGVmaW5lIGxlZ2VuZCBhbmQgY29sb3JzCiAgc2NhbGVfY29sb3JfbWFudWFsKAogICAgbmFtZSA9ICJMZWdlbmQiLAogICAgdmFsdWVzID0gYygKICAgICAgIkV2b2x1dGlvbiBvZiBhdmVyYWdlIHBheW9mZnMiID0gImRhcmtibHVlIiwKICAgICAgIkF2Zy4gcGF5b2ZmIGlmIGJvdGggY29vcGVyYXRpbmcgKDIpIiA9ICJyZWQiLAogICAgICAiQXZnLiBwYXlvZmYgaWYgYm90aCBkZWZlY3RpbmcgKDEpIiA9ICJyZWQiLAogICAgICAiVHJlbmQgZXZvbHV0aW9uIGxpbmUiID0gInJlZCIKICAgICkKICApICsKICAKICAjIFdyYXAgbGVnZW5kIGludG8gdHdvIHJvd3MKICBndWlkZXMoY29sb3IgPSBndWlkZV9sZWdlbmQobnJvdyA9IDQsIGJ5cm93ID0gVFJVRSkpICsKICAKICBsYWJzKAogICAgIyB0aXRsZSA9ICIiLAogICAgeCA9ICJSb3VuZCIsCiAgICB5ID0gIkF2ZXJhZ2UgUGF5b2ZmIgogICkgKwogIHRoZW1lX21pbmltYWwoYmFzZV9zaXplID0gOSkgKwogIHRoZW1lKAogICAgbGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIsCiAgICBsZWdlbmQudGl0bGUgPSBlbGVtZW50X3RleHQoZmFjZSA9ICJib2xkIiksCiAgICBsZWdlbmQudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gOCksCiAgICBwYW5lbC5ncmlkLm1pbm9yID0gZWxlbWVudF9ibGFuaygpCiAgKQoKCmBgYAoKCgojIyBQcmlzb25lcidzIERpbGVtbWEgR2FtZQoKCmBgYHtyfQpybShsaXN0PWxzKCkpCmBgYAoKVGhlIFByaXNvbmVyJ3MgRGlsZW1tYSBpcyBhIHN0cmF0ZWdpYyBnYW1lIHRoYXQgY2FwdHVyZXMgdGhlIGNvbmZsaWN0IGJldHdlZW4gbXV0dWFsIGJlbmVmaXRzIG9mIGNvb3BlcmF0aW9uIGFuZCBzZWxmaXNoIGluY2VudGl2ZXMgdG8gdW5pbGF0ZXJhbGx5IGJyZWFrIHRoZSBjb29wZXJhdGlvbi4KCioqVGFibGUgMi4qKiBQYXlvZmYgbWF0cml4IG9mIHRoZSBQcmlzb25lcuKAmXMgRGlsZW1tYS4KCnwgUGxheWVyIFIgXCBQbGF5ZXIgQyB8IENvb3BlcmF0ZSB8IE5vbi1Db29wZXJhdGUgKERlZmVjdCkgfAp8Oi0tLS0tLS0tLS0tLS0tLS0tLS0tOnw6LS0tLS0tLS0tLTp8Oi0tLS0tLS06fAp8IENvb3BlcmF0ZSB8IDxzcGFuIHN0eWxlPSJjb2xvcjpyZWQiPjMgXFwgMzwvc3Bhbj4gfCAwIFxcIDUgfAp8IE5vbi1Db29wZXJhdGUgKERlZmVjdCkgfCA1IFxcIDAgfCA8c3BhbiBzdHlsZT0iY29sb3I6Ymx1ZSI+MiBcXCAyPC9zcGFuPiB8CgpUd28gcGxheWVycyBlYWNoIGNob29zZSBiZXR3ZWVuIGNvb3BlcmF0aW5nIGFuZCBkZWZlY3RpbmcuIENvb3BlcmF0aW9uIGxlYWRzIHRvIGEgbW9kZXJhdGUgcGF5b2ZmIGZvciBib3RoLCB3aGlsZSB1bmlsYXRlcmFsIGRlZmVjdGlvbiBvZmZlcnMgYSB0ZW1wdGluZywgaGlnaGVyIHJld2FyZCBpZiB0aGUgb3RoZXIgcmVtYWlucyBjb29wZXJhdGl2ZSDigJQgYnV0IGF0IHRoZSBjb3N0IG9mIHNldmVyZWx5IHB1bmlzaGluZyB0aGUgY29vcGVyYXRvci4gSWYgYm90aCBkZWZlY3QsIHRoZXkgZWFjaCByZWNlaXZlIGEgbG93ZXIgcGF5b2ZmIHRoYW4gaWYgdGhleSBoYWQgY29vcGVyYXRlZC4gVGhlIGRpbGVtbWEgbGllcyBpbiB0aGUgZmFjdCB0aGF0IG11dHVhbCBkZWZlY3Rpb24gaXMgYSBOYXNoIEVxdWlsaWJyaXVtIHN0cmF0ZWd5LCBldmVuIHRob3VnaCBjb29wZXJhdGlvbiBwYXlvZmYgZG9taW5hdGVzIG11dHVhbCBkZWZlY3Rpb24sIGkuZS4sIG11dHVhbCBjb29wZXJhdGlvbiB3b3VsZCBsZWFkIHRvIGEgYmV0dGVyIG91dGNvbWUgZm9yIGJvdGggKHJlZCBjb2xvcikuIFRoZSBnYW1lIHJldmVhbHMgdGhlIGNoYWxsZW5nZXMgb2YgdHJ1c3QgYW5kIHRoZSB0ZW1wdGluZyBvcHRpb24gb2YgdW5pbGF0ZXJhbCBkZWZlY3Rpb24sIHNob3dpbmcgaG93IHJhdGlvbmFsIHNlbGYtaW50ZXJlc3QgY2FuIGxlYWQgdG8gY29sbGVjdGl2ZWx5IHN1Ym9wdGltYWwgb3V0Y29tZXMuIE11dHVhbCBjb29wZXJhdGlvbiBpcyBQYXJldG8gZWZmaWNpZW50LCB3aGlsZSBtdXR1YWwgZGVmZWN0aW9uIGNvbnN0aXR1dGVzIGEgUGFyZXRvIGluZWZmaWNpZW50IE5hc2ggZXF1aWxpYnJpdW0uCgoKIyMjIEV2b2x1dGlvbgoKVXBvbiBpbnNwZWN0aW5nICoqRmlnLiAzKiosIHRoZSBhcHBhcmVudCBkb21pbmFuY2UgaW4gbXV0dWFsbHkgcGxheWluZyB0aGUgZGVmZWN0aXZlIHN0cmF0ZWdpZXMgaXMgZXZpZGVudCBmcm9tIHRoZSB2ZXJ5IHN0YXJ0IG9mIHRoZSBzaW11bGF0aW9uLiBGaXZlIHBhaXJzIG9mIHBsYXllcnMgcGxheWVkIHRoZSBOYXNoIGVxdWlsaWJyaXVtIGluIHRoZSBmaXJzdCByb3VuZDsgaG93ZXZlciwgbm8gcGFpciBwbGF5ZWQgdGhlIFBhcmV0by1lZmZpY2llbnQgc3RyYXRlZ3kgcHJvZmlsZSBvZiBtdXR1YWxseSBwbGF5aW5nIHRoZSBDb29wZXJhdGl2ZSBzdHJhdGVnaWVzLiBIb3dldmVyLCB0aGUgb3RoZXIgc3RyYXRlZ2llcyBhcmUgdGVtcHRpbmcsIGNhdXNpbmcgdGhlIE5hc2ggZXF1aWxpYnJpdW0gdG8gYmUgbGVzcyBzdGFibGUsIGFuZCBzb21lIHBsYXllcnMgdHJ5IGluZGl2aWR1YWxseSB0byByZXN0b3JlIHRoZSBQYXJldG8tb3B0aW1hbCBzdHJhdGVneSBwcm9maWxlIG9mIG11dHVhbCBjb29wZXJhdGlvbi4gSXQgd2FzIGFjaGlldmVkIG9ubHkgb25jZSBpbiB0aGUgZm91cnRoIHJvdW5kOyBvdGhlcndpc2UsIG5vIHBhaXIgY29udmVydGVkIHRvIHRoaXMgc3RyYXRlZ3kgcHJvZmlsZSB0aHJvdWdob3V0IHRoZSBlbnRpcmUgc2ltdWxhdGlvbi4gV2UgZXhwbGFpbiBpdCBzbyB0aGF0IHRoZXJlIGlzIG5vIGNvb3BlcmF0aW9uIGluY2VudGl2ZSBwcmV2ZW50aW5nIHVuaWxhdGVyYWwgdmlvbGF0aW9uIG9mIHRoZSBjb29wZXJhdGlvbi4KCioqRmlnLjMqKiBFaWdodCByb3VuZHMgb2YgdGhlIHN0cmF0ZWdpZXMgZXZvbHV0aW9uCgpgYGB7ciBoZWF0bWFwUER9CiMgTG9hZCByZXF1aXJlZCBwYWNrYWdlcwpsaWJyYXJ5KHRpZHl2ZXJzZSkKCiMgTG9hZCBkYXRhCnVkYWplUEQgPC0gcmVhZF9jc3YyKCJQcmlzb25lcnNEaWxlbW1hRGF0YS5jc3YiKQoKIyBGaWx0ZXIgZm9yIFJvbGUgPT0gMQpyb2xlMSA8LSB1ZGFqZVBEICU+JSAKICBmaWx0ZXIoUm9sZSA9PSAxKQoKIyAtLS0gQ29tcHV0ZSAyeDIgb2NjdXJyZW5jZSB0YWJsZXMgLS0tCnJvdW5kX3RhYmxlcyA8LSByb2xlMSAlPiUKICBncm91cF9ieShSb3VuZCwgRGVjaXNpb24sIE90aGVyRGVjaXNpb24pICU+JQogIHN1bW1hcmlzZShjb3VudCA9IG4oKSwgLmdyb3VwcyA9ICJkcm9wIikgJT4lCiAgY29tcGxldGUoUm91bmQsIERlY2lzaW9uID0gMToyLCBPdGhlckRlY2lzaW9uID0gMToyLCBmaWxsID0gbGlzdChjb3VudCA9IDApKQoKIyAtLS0gUHJpbnQgMngyIHRhYmxlcyBmb3IgZWFjaCByb3VuZCAtLS0KZm9yIChyIGluIHNvcnQodW5pcXVlKHJvdW5kX3RhYmxlcyRSb3VuZCkpKSB7CiMgIGNhdCgiXG5Sb3VuZCIsIHIsICJcbiIpCiAgdGJsIDwtIHJvdW5kX3RhYmxlcyAlPiUKICAgIGZpbHRlcihSb3VuZCA9PSByKSAlPiUKICAgIHBpdm90X3dpZGVyKG5hbWVzX2Zyb20gPSBPdGhlckRlY2lzaW9uLCB2YWx1ZXNfZnJvbSA9IGNvdW50KQogICNwcmludCh0YmwpCn0KCiMgLS0tIEhlYXRtYXBzIGFjcm9zcyByb3VuZHMgKHdoaXRlIOKGkiBsaWdodCBibHVlIOKGkiBkYXJrIGJsdWUpIC0tLQpnZ3Bsb3Qocm91bmRfdGFibGVzLCBhZXMoeCA9IGZhY3RvcihPdGhlckRlY2lzaW9uKSwKICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSBmYWN0b3IoRGVjaXNpb24pLAogICAgICAgICAgICAgICAgICAgICAgICAgZmlsbCA9IGNvdW50KSkgKwogIGdlb21fdGlsZShjb2xvciA9ICJ3aGl0ZSIpICsKICBnZW9tX3RleHQoYWVzKGxhYmVsID0gY291bnQpLCBjb2xvciA9ICJibGFjayIsIHNpemUgPSA0KSArCiAgc2NhbGVfZmlsbF9ncmFkaWVudG4oCiAgICBjb2xvdXJzID0gYygid2hpdGUiLCAiI0FERDhFNiIsICIjMDAwMDhCIiksICAjIHdoaXRlIOKGkiBsaWdodCBibHVlIOKGkiBkYXJrIGJsdWUKICAgIGxpbWl0cyA9IGMoMCwgNyksCiAgICBuYW1lID0gIkNvdW50IgogICkgKwogIHNjYWxlX3lfZGlzY3JldGUobGltaXRzID0gYygiMiIsICIxIikpICsgICMgUmV2ZXJzZSBZLWF4aXM6IDEgb24gdG9wCiAgZmFjZXRfd3JhcCh+IFJvdW5kLCBuY29sID0gNCkgKwogIGxhYnMoCiAgICAjIHRpdGxlID0gIiIsCiAgICB4ID0gIkNvbHVtbiBQbGF5ZXIgMS1jb29wZXJhdGUsIDIgbm9uLWNvb3BlcmF0ZSIsCiAgICB5ID0gIlJvdyBQbGF5ZXIgMS1jb29wZXJhdGUsIDIgbm9uLWNvb3BlcmF0ZSIKICApICsKICB0aGVtZV9taW5pbWFsKGJhc2Vfc2l6ZSA9IDkpICsKICB0aGVtZSgKICAgIHBhbmVsLmdyaWQgPSBlbGVtZW50X2JsYW5rKCksCiAgICBzdHJpcC50ZXh0ID0gZWxlbWVudF90ZXh0KGZhY2UgPSAiYm9sZCIpCiAgKQoKCmBgYAoKCgpJZiBpbnNwZWN0aW5nIGF2ZXJhZ2UgcGF5b2ZmcywgYXMgaW50cm9kdWNlZCBpbiAqKkZpZy4gNCoqLCB0aGUgZm9sbG93aW5nIGlzIGFwcGFyZW50OiB0aGUgcmVkIHNvbGlkIGxpbmUgZGVtb25zdHJhdGVzIHRoZSBnZW5lcmFsIHRyZW5kLCB3aGljaCBpcyBzbG9waW5nIGRvd247IGhvd2V2ZXIsIHdlIGRvIG5vdCBjb25zaWRlciBpdCB0byBiZSBzdGF0aXN0aWNhbGx5IHNpZ25pZmljYW50LiBEdXJpbmcgdGhlIGVudGlyZSBleHBlcmltZW50LCB0aGUgbnVtYmVyIG9mIGRlZmVjdGl2ZSBwbGF5ZXIgcGFpcnMgb3NjaWxsYXRlcyBhcm91bmQgZml2ZS4gSXQgbWVhbnMgdGhhdCB0aGUgTmFzaCBlcXVpbGlicml1bSBvZiBtdXR1YWwgZGVmZWN0aW9uIChtZWFuaW5nIHRoZSBsb3dlc3QgYXZlcmFnZSBwYXlvZmYgKDIpIGZvciBib3RoIHBsYXllcnMpIGlzIHBsYXllZCBtb3N0IGZyZXF1ZW50bHk7IGhvd2V2ZXIsIHRoZSBwbGF5ZXJzIGFsd2F5cyB0cnkgdG8gZGVzdHJveSB0aGlzIGtpbmQgb2YgZGlzYWR2YW50YWdlb3VzIGVxdWlsaWJyaXVtLiBBdHRlbXB0cyB0byBkaXNydXB0IHRoaXMga2luZCBvZiBlcXVpbGlicml1bSByZXN1bHQgaW4gc2lnbmlmaWNhbnQgb3NjaWxsYXRpb25zIGluIHRoZSBhdmVyYWdlIHBheW9mZnMgKGJsdWUgY3VydmUpIGFyb3VuZCB0aGUgdHJlbmQgbGluZS4gCgoKCgoqKkZpZyA0LioqIEV2b2x1dGlvbiBvZiB0aGUgYXZlcmFnZSBwYXlvZmZzCgpgYGB7ciB0cmVuZHBsb3RQRH0KIyAtLS0gQ29tcHV0ZSBhdmVyYWdlIHBheW9mZiBwZXIgcm91bmQgKHN5bW1ldHJpYyBnYW1lKSAtLS0KYXZnX3BheW9mZnMgPC0gdWRhamVQRCAlPiUKICBncm91cF9ieShSb3VuZCkgJT4lCiAgc3VtbWFyaXNlKEF2ZXJhZ2VfUGF5b2ZmID0gbWVhbihFYXJuaW5ncywgbmEucm0gPSBUUlVFKSkgJT4lCiAgdW5ncm91cCgpCgojIC0tLSBMaW5lIHBsb3Qgb2YgYXZlcmFnZSBwYXlvZmZzIGJ5IHJvdW5kIC0tLQpnZ3Bsb3QoYXZnX3BheW9mZnMsIGFlcyh4ID0gUm91bmQsIHkgPSBBdmVyYWdlX1BheW9mZikpICsKICAjIEV2b2x1dGlvbiBsaW5lIChkYXJrIGJsdWUpCiAgZ2VvbV9saW5lKGFlcyhjb2xvciA9ICJFdm9sdXRpb24gb2YgYXZlcmFnZSBwYXlvZmZzIiksIGxpbmV3aWR0aCA9IDAuNikgKwogIGdlb21fcG9pbnQoY29sb3IgPSAiZGFya2JsdWUiLCBzaXplID0gMikgKwogIAogICMgVHJlbmQgbGluZSAoc29saWQgcmVkKQogIGdlb21fc21vb3RoKGFlcyhjb2xvciA9ICJUcmVuZCBldm9sdXRpb24gbGluZSIpLAogICAgICAgICAgICAgIG1ldGhvZCA9ICJsbSIsIHNlID0gRkFMU0UsIGxpbmV0eXBlID0gInNvbGlkIiwgbGluZXdpZHRoID0gMC41KSArCiAgCiAgIyBIb3Jpem9udGFsIGxpbmVzIChkb3R0ZWQgJiBkYXNoZWQgcmVkKQogIGdlb21faGxpbmUoYWVzKHlpbnRlcmNlcHQgPSAzLCBjb2xvciA9ICJBdmcuIHBheW9mZiBpZiBib3RoIGNvb3BlcmF0aW5nICgzKSIpLAogICAgICAgICAgICAgbGluZXR5cGUgPSAiZG90dGVkIiwgbGluZXdpZHRoID0gMC41KSArCiAgZ2VvbV9obGluZShhZXMoeWludGVyY2VwdCA9IDIsIGNvbG9yID0gIkF2Zy4gcGF5b2ZmIGlmIGJvdGggZGVmZWN0aW5nICgyKSIpLAogICAgICAgICAgICAgbGluZXR5cGUgPSAiZGFzaGVkIiwgbGluZXdpZHRoID0gMC41KSArCiAgCiAgIyBEZWZpbmUgbGVnZW5kIGFuZCBjb2xvcnMKICBzY2FsZV9jb2xvcl9tYW51YWwoCiAgICBuYW1lID0gIkxlZ2VuZCIsCiAgICB2YWx1ZXMgPSBjKAogICAgICAiRXZvbHV0aW9uIG9mIGF2ZXJhZ2UgcGF5b2ZmcyIgPSAiZGFya2JsdWUiLAogICAgICAiQXZnLiBwYXlvZmYgaWYgYm90aCBjb29wZXJhdGluZyAoMykiID0gInJlZCIsCiAgICAgICJBdmcuIHBheW9mZiBpZiBib3RoIGRlZmVjdGluZyAoMikiID0gInJlZCIsCiAgICAgICJUcmVuZCBldm9sdXRpb24gbGluZSIgPSAicmVkIgogICAgKQogICkgKwogIAogICMgV3JhcCBsZWdlbmQgaW50byB0d28gcm93cwogIGd1aWRlcyhjb2xvciA9IGd1aWRlX2xlZ2VuZChucm93ID0gNCwgYnlyb3cgPSBUUlVFKSkgKwogIAogIGxhYnMoCiAgICAjIHRpdGxlID0gIiIsCiAgICB4ID0gIlJvdW5kIiwKICAgIHkgPSAiQXZlcmFnZSBQYXlvZmYiCiAgKSArCiAgdGhlbWVfbWluaW1hbChiYXNlX3NpemUgPSA5KSArCiAgdGhlbWUoCiAgICBsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIiwKICAgIGxlZ2VuZC50aXRsZSA9IGVsZW1lbnRfdGV4dChmYWNlID0gImJvbGQiKSwKICAgIGxlZ2VuZC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSA4KSwKICAgIHBhbmVsLmdyaWQubWlub3IgPSBlbGVtZW50X2JsYW5rKCkKICApCgpgYGAKSW5zcGVjdGluZyB0aGUgcGF5b2ZmIG1hdHJpeCBnaXZlbiBpbiAqKlRhYmxlIDIuKiogY29uY2x1ZGVzIHRoYXQgc2VsZWN0aW9uIG9mIHRoZSBzZWNvbmQgcm93LCBvciBzZWxlY3Rpb24gb2YgdGhlIGxlZnQgY29sdW1uIGlzIG5vdCByYXRpb25hbGUsIGFzIGJvdGggc3RyYXRlZ2llcyBkb21pbmF0ZSB0aGVpciBjb3VudGVycGFydCAoaS5lLiwgZmlyc3Qgcm93IG9yIHRoZSByaWdodCBjb2x1bW4pIGFzIHJlZ2FyZGxlc3MgdGhlIHR1cm4gb2YgdGhlIG9wcG9uZW50LCB0aGUgc2Vjb25kIHJhdyAocmlnaHQgY29sdW1uKSBwcm92aWRlcyBoaWdoZXIgcGF5b2ZmIHRoYW4gdGhlIGZpcnN0IHJhdyAobGVmdCBjb2x1bW4pLiAqKkZpZy4gNSoqIGRlbW9uc3RyYXRlcyB0aGF0IHRoZSBudW1iZXIgb2YgdGhlc2UgaXJyYXRpb25hbCBzdHJhdGVnaWVzIHNlbGVjdGVkIGRlY3JlYXNlcyBhcyB0aGUgbnVtYmVyIG9mIHJvdW5kcyBwYXNzZWQgaW5jcmVhc2VzLiBIb3dldmVyLCB0aGVyZSBpcyBhIHJlbGF0aXZlbHkgc21hbGwgY2hhbmNlIHRoZXkgY29udmVyZ2UgdG8gemVybywgYXMgdGhlIGluY2VudGl2ZXMgdG8gZGV2aWF0ZSBmcm9tIHRoZSBoaWdoIGNvb3BlcmF0aW9uIHBheW9mZnMgc3RyYXRlZ2llcyBhcmUgaGlnaC4KCioqRmlnLjUqKiBOdW1iZXIgb2YgTm90IEJlc3QgUmVzcG9uc2VzIC0gZXZvbHV0aW9uCgpgYGB7cn0KbGlicmFyeShnZ3Bsb3QyKQoKbm90X2Jlc3QgPC0gZGF0YS5mcmFtZSgKICBSb3VuZCA9IDE6OCwKICBOb3RfQmVzdF9SZXNwb25zZSA9IGMoMywgNywgNCwgMiwgMywgNiwgMiwgMykKKQoKZ2dwbG90KG5vdF9iZXN0LCBhZXMoeCA9IFJvdW5kLCB5ID0gTm90X0Jlc3RfUmVzcG9uc2UpKSArCiAgZ2VvbV9jb2woZmlsbCA9ICJzdGVlbGJsdWUiLCB3aWR0aCA9IDAuNSkgKwogIGdlb21fdGV4dChhZXMobGFiZWwgPSBOb3RfQmVzdF9SZXNwb25zZSksCiAgICAgICAgICAgIHZqdXN0ID0gLTAuNSwgc2l6ZSA9IDMuNSwgY29sb3IgPSAicmVkIikgKwogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIHNlID0gRkFMU0UsIGNvbG9yID0gInJlZCIsIGxpbmV3aWR0aCA9IDAuOCkgKyAgIyByZWdyZXNzaW9uIGxpbmUKICBsYWJzKAogICAgeCA9ICJSb3VuZCIsCiAgICB5ID0gIkNvdW50IG9mIE5vbuKAk0Jlc3TigJNSZXNwb25zZSBTdHJhdGVnaWVzIgogICkgKwogIHRoZW1lX21pbmltYWwoYmFzZV9zaXplID0gOSkgKwogIHRoZW1lKAogICAgcGFuZWwuZ3JpZC5taW5vciA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIHBhbmVsLmdyaWQubWFqb3IueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGF4aXMudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gOSksCiAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGZhY2UgPSAiYm9sZCIsIGhqdXN0ID0gMC41KQogICkgKwogIHlsaW0oMCwgbWF4KG5vdF9iZXN0JE5vdF9CZXN0X1Jlc3BvbnNlKSArIDEpCgpgYGAKCg==