-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathPaquetes_de_R-ES.html
779 lines (763 loc) · 320 KB
/
Paquetes_de_R-ES.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Content-Style-Type" content="text/css" />
<meta name="generator" content="pandoc" />
<meta name="author" content="Alex Sanchez ([email protected])" />
<title>Creación de paquetes de R</title>
<style type="text/css">code{white-space: pre;}</style>
<style type="text/css">
a.sourceLine { display: inline-block; line-height: 1.25; }
a.sourceLine { pointer-events: none; color: inherit; text-decoration: inherit; }
a.sourceLine:empty { height: 1.2em; }
.sourceCode { overflow: visible; }
code.sourceCode { white-space: pre; position: relative; }
div.sourceCode { margin: 1em 0; }
pre.sourceCode { margin: 0; }
@media screen {
div.sourceCode { overflow: auto; }
}
@media print {
code.sourceCode { white-space: pre-wrap; }
a.sourceLine { text-indent: -1em; padding-left: 1em; }
}
pre.numberSource a.sourceLine
{ position: relative; left: -4em; }
pre.numberSource a.sourceLine::before
{ content: attr(data-line-number);
position: relative; left: -1em; text-align: right; vertical-align: baseline;
border: none; pointer-events: all; display: inline-block;
-webkit-touch-callout: none; -webkit-user-select: none;
-khtml-user-select: none; -moz-user-select: none;
-ms-user-select: none; user-select: none;
padding: 0 4px; width: 4em;
color: #aaaaaa;
}
pre.numberSource { margin-left: 3em; border-left: 1px solid #aaaaaa; padding-left: 4px; }
div.sourceCode
{ }
@media screen {
a.sourceLine::before { text-decoration: underline; }
}
code span.al { color: #ff0000; font-weight: bold; } /* Alert */
code span.an { color: #60a0b0; font-weight: bold; font-style: italic; } /* Annotation */
code span.at { color: #7d9029; } /* Attribute */
code span.bn { color: #40a070; } /* BaseN */
code span.bu { } /* BuiltIn */
code span.cf { color: #007020; font-weight: bold; } /* ControlFlow */
code span.ch { color: #4070a0; } /* Char */
code span.cn { color: #880000; } /* Constant */
code span.co { color: #60a0b0; font-style: italic; } /* Comment */
code span.cv { color: #60a0b0; font-weight: bold; font-style: italic; } /* CommentVar */
code span.do { color: #ba2121; font-style: italic; } /* Documentation */
code span.dt { color: #902000; } /* DataType */
code span.dv { color: #40a070; } /* DecVal */
code span.er { color: #ff0000; font-weight: bold; } /* Error */
code span.ex { } /* Extension */
code span.fl { color: #40a070; } /* Float */
code span.fu { color: #06287e; } /* Function */
code span.im { } /* Import */
code span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Information */
code span.kw { color: #007020; font-weight: bold; } /* Keyword */
code span.op { color: #666666; } /* Operator */
code span.ot { color: #007020; } /* Other */
code span.pp { color: #bc7a00; } /* Preprocessor */
code span.sc { color: #4070a0; } /* SpecialChar */
code span.ss { color: #bb6688; } /* SpecialString */
code span.st { color: #4070a0; } /* String */
code span.va { color: #19177c; } /* Variable */
code span.vs { color: #4070a0; } /* VerbatimString */
code span.wa { color: #60a0b0; font-weight: bold; font-style: italic; } /* Warning */
</style>
<style type="text/css">
body
{
margin: 0 0 0 0;
padding: 0 0 0 0;
width: 100%;
height: 100%;
color: black;
background-color: white;
font-family: "Gill Sans MT", "Gill Sans", GillSans, sans-serif;
font-size: 14pt;
}
div.toolbar {
position: fixed; z-index: 200;
top: auto; bottom: 0; left: 0; right: 0;
height: 1.2em; text-align: right;
padding-left: 1em;
padding-right: 1em; font-size: 60%;
color: DimGray;
background-color: rgb(240,240,240);
border-top: solid 1px rgb(180,180,180);
}
div.toolbar span.copyright {
color: DimGray;
margin-left: 0.5em;
}
div.initial_prompt {
position: absolute;
z-index: 1000;
bottom: 1.2em;
width: 100%;
background-color: rgb(200,200,200);
opacity: 0.35;
background-color: rgb(200,200,200, 0.35);
cursor: pointer;
}
div.initial_prompt p.help {
text-align: center;
}
div.initial_prompt p.close {
text-align: right;
font-style: italic;
}
div.slidy_toc {
position: absolute;
z-index: 300;
width: 60%;
max-width: 30em;
height: 30em;
overflow: auto;
top: auto;
right: auto;
left: 4em;
bottom: 4em;
padding: 1em;
background: rgb(240,240,240);
border-style: solid;
border-width: 2px;
font-size: 60%;
}
div.slidy_toc .toc_heading {
text-align: center;
width: 100%;
margin: 0;
margin-bottom: 1em;
border-bottom-style: solid;
border-bottom-color: rgb(180,180,180);
border-bottom-width: 1px;
}
div.slide {
z-index: 20;
margin: 0 0 0 0;
padding-top: 0;
padding-bottom: 0;
padding-left: 20px;
padding-right: 20px;
border-width: 0;
clear: both;
top: 0;
bottom: 0;
left: 0;
right: 0;
line-height: 120%;
background-color: transparent;
}
div.background {
display: none;
}
div.handout {
margin-left: 20px;
margin-right: 20px;
}
div.slide.titlepage {
text-align: center;
}
div.slide.titlepage h1 {
padding-top: 10%;
margin-right: 0;
}
div.slide h1 {
padding-left: 0;
padding-right: 20pt;
padding-top: 4pt;
padding-bottom: 4pt;
margin-top: 0;
margin-left: 0;
margin-right: 60pt;
margin-bottom: 0.5em;
display: block; font-size: 160%;
line-height: 1.2em;
background: transparent;
}
@media screen and (max-device-width: 1024px)
{
div.slide { font-size: 100%; }
}
@media screen and (max-device-width: 800px)
{
div.slide { font-size: 200%; }
div.slidy_toc {
top: 1em;
left: 1em;
right: auto;
width: 80%;
font-size: 180%;
}
}
div.toc-heading {
width: 100%;
border-bottom: solid 1px rgb(180,180,180);
margin-bottom: 1em;
text-align: center;
}
img {
image-rendering: optimize-quality;
}
pre {
font-size: 80%;
font-weight: bold;
line-height: 120%;
padding-top: 0.2em;
padding-bottom: 0.2em;
padding-left: 1em;
padding-right: 1em;
border-style: solid;
border-left-width: 1em;
border-top-width: thin;
border-right-width: thin;
border-bottom-width: thin;
border-color: #95ABD0;
color: #00428C;
background-color: #E4E5E7;
}
li pre { margin-left: 0; }
blockquote { font-style: italic }
img { background-color: transparent }
p.copyright { font-size: smaller }
.center { text-align: center }
.footnote { font-size: smaller; margin-left: 2em; }
a img { border-width: 0; border-style: none }
a:visited { color: navy }
a:link { color: navy }
a:hover { color: red; text-decoration: underline }
a:active { color: red; text-decoration: underline }
a {text-decoration: none}
.toolbar a:link {color: blue}
.toolbar a:visited {color: blue}
.toolbar a:active {color: red}
.toolbar a:hover {color: red}
ul { list-style-type: square; }
ul ul { list-style-type: disc; }
ul ul ul { list-style-type: circle; }
ul ul ul ul { list-style-type: disc; }
li { margin-left: 0.5em; margin-top: 0.5em; }
li li { font-size: 85%; font-style: italic }
li li li { font-size: 85%; font-style: normal }
div dt
{
margin-left: 0;
margin-top: 1em;
margin-bottom: 0.5em;
font-weight: bold;
}
div dd
{
margin-left: 2em;
margin-bottom: 0.5em;
}
p,pre,ul,ol,blockquote,h2,h3,h4,h5,h6,dl,table {
margin-left: 1em;
margin-right: 1em;
}
p.subhead { font-weight: bold; margin-top: 2em; }
.smaller { font-size: smaller }
.bigger { font-size: 130% }
td,th { padding: 0.2em }
ul {
margin: 0.5em 1.5em 0.5em 1.5em;
padding: 0;
}
ol {
margin: 0.5em 1.5em 0.5em 1.5em;
padding: 0;
}
ul { list-style-type: square; }
ul ul { list-style-type: disc; }
ul ul ul { list-style-type: circle; }
ul ul ul ul { list-style-type: disc; }
ul li { list-style: square;
margin: 0.1em 0em 0.6em 0;
padding: 0 0 0 0;
line-height: 140%;
}
ol li { margin: 0.1em 0em 0.6em 1.5em;
padding: 0 0 0 0px;
line-height: 140%;
list-style-type: decimal;
}
li ul li { font-size: 85%; font-style: italic;
list-style-type: disc;
background: transparent;
padding: 0 0 0 0;
}
li li ul li { font-size: 85%; font-style: normal;
list-style-type: circle;
background: transparent;
padding: 0 0 0 0;
}
li li li ul li {
list-style-type: disc;
background: transparent;
padding: 0 0 0 0;
}
li ol li {
list-style-type: decimal;
}
li li ol li {
list-style-type: decimal;
}
ol.outline li:hover { cursor: pointer }
ol.outline li.nofold:hover { cursor: default }
ul.outline li:hover { cursor: pointer }
ul.outline li.nofold:hover { cursor: default }
ol.outline { list-style:decimal; }
ol.outline ol { list-style-type:lower-alpha }
ol.outline li.nofold {
padding: 0 0 0 20px;
background: transparent url(data:image/gif;base64,R0lGODdhCQAJAIACAMzMzOvr/ywAAAAACQAJAAACD4SPoRvG614Dctb4MEMcFAA7) no-repeat 0px 0.5em;
}
ol.outline li.unfolded {
padding: 0 0 0 20px;
background: transparent url(data:image/gif;base64,R0lGODdhCQAJAKEDAMPD/8zMzOvr/////ywAAAAACQAJAAACEYyPoivG614LAlg7ZZbxoR8UADs=) no-repeat 0px 0.5em;
}
ol.outline li.folded {
padding: 0 0 0 20px;
background: transparent url(data:image/gif;base64,R0lGODdhCQAJAKEDAMPD/8zMzOvr/////ywAAAAACQAJAAACFIyPoiu2sJyCyoF7W3hxz850CFIAADs=) no-repeat 0px 0.5em;
}
ol.outline li.unfolded:hover {
padding: 0 0 0 20px;
background: transparent url(data:image/gif;base64,R0lGODdhCQAJAKEDAAAAAAAA/8PD/////ywAAAAACQAJAAACEYSPoivG614DIlg7ZZbxoQ8UADs=) no-repeat 0px 0.5em;
}
ol.outline li.folded:hover {
padding: 0 0 0 20px;
background: transparent url(data:image/gif;base64,R0lGODdhCQAJAKEDAAAAAAAA/8PD/////ywAAAAACQAJAAACFISPoiu2sZyCyoV7G3hxz850CFIAADs=) no-repeat 0px 0.5em;
}
ul.outline li.nofold {
padding: 0 0 0 20px;
background: transparent url(data:image/gif;base64,R0lGODdhCQAJAIACAMzMzOvr/ywAAAAACQAJAAACD4SPoRvG614Dctb4MEMcFAA7) no-repeat 0px 0.5em;
}
ul.outline li.unfolded {
padding: 0 0 0 20px;
background: transparent url(data:image/gif;base64,R0lGODdhCQAJAKEDAMPD/8zMzOvr/////ywAAAAACQAJAAACEYyPoivG614LAlg7ZZbxoR8UADs=) no-repeat 0px 0.5em;
}
ul.outline li.folded {
padding: 0 0 0 20px;
background: transparent url(data:image/gif;base64,R0lGODdhCQAJAKEDAMPD/8zMzOvr/////ywAAAAACQAJAAACFIyPoiu2sJyCyoF7W3hxz850CFIAADs=) no-repeat 0px 0.5em;
}
ul.outline li.unfolded:hover {
padding: 0 0 0 20px;
background: transparent url(data:image/gif;base64,R0lGODdhCQAJAKEDAAAAAAAA/8PD/////ywAAAAACQAJAAACEYSPoivG614DIlg7ZZbxoQ8UADs=) no-repeat 0px 0.5em;
}
ul.outline li.folded:hover {
padding: 0 0 0 20px;
background: transparent url(data:image/gif;base64,R0lGODdhCQAJAKEDAAAAAAAA/8PD/////ywAAAAACQAJAAACFISPoiu2sZyCyoV7G3hxz850CFIAADs=) no-repeat 0px 0.5em;
}
a.titleslide { font-weight: bold; font-style: italic }
img.hidden { display: none; visibility: hidden }
div.initial_prompt { display: none; visibility: hidden }
div.slide {
visibility: visible;
position: inherit;
}
div.handout {
border-top-style: solid;
border-top-width: thin;
border-top-color: black;
}
@media screen {
.hidden { display: none; visibility: visible }
div.slide.hidden { display: block; visibility: visible }
div.handout.hidden { display: block; visibility: visible }
div.background { display: none; visibility: hidden }
body.single_slide div.initial_prompt { display: block; visibility: visible }
body.single_slide div.background { display: block; visibility: visible }
body.single_slide div.background.hidden { display: none; visibility: hidden }
body.single_slide .invisible { visibility: hidden }
body.single_slide .hidden { display: none; visibility: hidden }
body.single_slide div.slide { position: absolute }
body.single_slide div.handout { display: none; visibility: hidden }
}
@media print {
.hidden { display: block; visibility: visible }
div.slide pre { font-size: 60%; padding-left: 0.5em; }
div.toolbar { display: none; visibility: hidden; }
div.slidy_toc { display: none; visibility: hidden; }
div.background { display: none; visibility: hidden; }
div.slide { page-break-before: always }
div.slide.first-slide { page-break-before: avoid }
}
.jslider table {
margin-left: 0em;
margin-right: 0em;
}
table.dataTable, .shiny-datatable-output div {
font-size: 14pt;
}
.dataTables_info, .dataTables_paginate {
font-size: 19px;
}
pre.sourceCode, code.sourceCode {
font-size: 80%;
}
label, button, input, select, textarea {
font-size: 14pt;
}
ul.nav, ul.nav li {
list-style-type: none;
}
</style>
<script src="data:application/javascript;base64,Lyogc2xpZHkuanMKCiAgIENvcHlyaWdodCAoYykgMjAwNS0yMDEzIFczQyAoTUlULCBFUkNJTSwgS2VpbyksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgIFczQyBsaWFiaWxpdHksIHRyYWRlbWFyaywgZG9jdW1lbnQgdXNlIGFuZCBzb2Z0d2FyZSBsaWNlbnNpbmcKICAgcnVsZXMgYXBwbHksIHNlZToKCiAgIGh0dHA6Ly93d3cudzMub3JnL0NvbnNvcnRpdW0vTGVnYWwvY29weXJpZ2h0LWRvY3VtZW50cwogICBodHRwOi8vd3d3LnczLm9yZy9Db25zb3J0aXVtL0xlZ2FsL2NvcHlyaWdodC1zb2Z0d2FyZQoKICAgRGVmaW5lcyBzaW5nbGUgbmFtZSAidzNjX3NsaWR5IiBpbiBnbG9iYWwgbmFtZXNwYWNlCiAgIEFkZHMgZXZlbnQgaGFuZGxlcnMgd2l0aG91dCB0cmFtcGxpbmcgb24gYW55IG90aGVycwoqLwoKLy8gdGhlIHNsaWR5IG9iamVjdCBpbXBsZW1lbnRhdGlvbgp2YXIgdzNjX3NsaWR5ID0gewogIC8vIGNsYXNzaWZ5IHdoaWNoIGtpbmQgb2YgYnJvd3NlciB3ZSdyZSBydW5uaW5nIHVuZGVyCiAgbnNfcG9zOiAodHlwZW9mIHdpbmRvdy5wYWdlWU9mZnNldCE9J3VuZGVmaW5lZCcpLAogIGtodG1sOiAoKG5hdmlnYXRvci51c2VyQWdlbnQpLmluZGV4T2YoIktIVE1MIikgPj0gMCA/IHRydWUgOiBmYWxzZSksCiAgb3BlcmE6ICgobmF2aWdhdG9yLnVzZXJBZ2VudCkuaW5kZXhPZigiT3BlcmEiKSA+PSAwID8gdHJ1ZSA6IGZhbHNlKSwKICBpcGFkOiAoKG5hdmlnYXRvci51c2VyQWdlbnQpLmluZGV4T2YoImlQYWQiKSA+PSAwID8gdHJ1ZSA6IGZhbHNlKSwKICBpcGhvbmU6ICgobmF2aWdhdG9yLnVzZXJBZ2VudCkuaW5kZXhPZigiaVBob25lIikgPj0gMCA/IHRydWUgOiBmYWxzZSksCiAgYW5kcm9pZDogKChuYXZpZ2F0b3IudXNlckFnZW50KS5pbmRleE9mKCJBbmRyb2lkIikgPj0gMCA/IHRydWUgOiBmYWxzZSksCiAgaWU6ICh0eXBlb2YgZG9jdW1lbnQuYWxsICE9ICJ1bmRlZmluZWQiICYmICF0aGlzLm9wZXJhKSwKICBpZTY6ICghdGhpcy5uc19wb3MgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCJNU0lFIDYiKSAhPSAtMSksCiAgaWU3OiAoIXRoaXMubnNfcG9zICYmIG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZigiTVNJRSA3IikgIT0gLTEpLAogIGllODogKCF0aGlzLm5zX3BvcyAmJiBuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoIk1TSUUgOCIpICE9IC0xKSwKICBpZTk6ICghdGhpcy5uc19wb3MgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCJNU0lFIDkiKSAhPSAtMSksCgogIC8vIGRhdGEgZm9yIHN3aXBlIGFuZCBkb3VibGUgdGFwIGRldGVjdGlvbiBvbiB0b3VjaCBzY3JlZW5zCiAgbGFzdF90YXA6IDAsCiAgcHJldl90YXA6IDAsCiAgc3RhcnRfeDogMCwKICBzdGFydF95OiAwLAogIGRlbHRhX3g6IDAsCiAgZGVsdGFfeTogMCwKCiAgLy8gYXJlIHdlIHJ1bm5pbmcgYXMgWEhUTUw/IChkb2Vzbid0IHdvcmsgb24gT3BlcmEpCiAgaXNfeGh0bWw6IC94bWwvLnRlc3QoZG9jdW1lbnQuY29udGVudFR5cGUpLAoKICBzbGlkZV9udW1iZXI6IDAsIC8vIGludGVnZXIgc2xpZGUgY291bnQ6IDAsIDEsIDIsIC4uLgogIHNsaWRlX251bWJlcl9lbGVtZW50OiBudWxsLCAvLyBlbGVtZW50IGNvbnRhaW5pbmcgc2xpZGUgbnVtYmVyCiAgc2xpZGVzOiBbXSwgLy8gc2V0IHRvIGFycmF5IG9mIHNsaWRlIGRpdidzCiAgbm90ZXM6IFtdLCAvLyBzZXQgdG8gYXJyYXkgb2YgaGFuZG91dCBkaXYncwogIGJhY2tncm91bmRzOiBbXSwgLy8gc2V0IHRvIGFycmF5IG9mIGJhY2tncm91bmQgZGl2J3MKICBvYnNlcnZlcnM6IFtdLCAvLyBsaXN0IG9mIG9ic2VydmVyIGZ1bmN0aW9ucwogIHRvb2xiYXI6IG51bGwsIC8vIGVsZW1lbnQgY29udGFpbmluZyB0b29sYmFyCiAgdGl0bGU6IG51bGwsIC8vIGRvY3VtZW50IHRpdGxlCiAgbGFzdF9zaG93bjogbnVsbCwgLy8gbGFzdCBpbmNyZW1lbnRhbGx5IHNob3duIGl0ZW0KICBlb3M6IG51bGwsICAvLyBzcGFuIGVsZW1lbnQgZm9yIGVuZCBvZiBzbGlkZSBpbmRpY2F0b3IKICB0b2M6IG51bGwsIC8vIHRhYmxlIG9mIGNvbnRlbnRzCiAgb3V0bGluZTogbnVsbCwgLy8gb3V0bGluZSBlbGVtZW50IHdpdGggdGhlIGZvY3VzCiAgc2VsZWN0ZWRfdGV4dF9sZW46IDAsIC8vIGxlbmd0aCBvZiBkcmFnIHNlbGVjdGlvbiBvbiBkb2N1bWVudAogIHZpZXdfYWxsOiAwLCAgLy8gMSB0byB2aWV3IGFsbCBzbGlkZXMgKyBoYW5kb3V0cwogIHdhbnRfdG9vbGJhcjogdHJ1ZSwgIC8vIHVzZXIgcHJlZmVyZW5jZSB0byBzaG93L2hpZGUgdG9vbGJhcgogIG1vdXNlX2NsaWNrX2VuYWJsZWQ6IHRydWUsIC8vIGVuYWJsZXMgbGVmdCBjbGljayBmb3IgbmV4dCBzbGlkZQogIHNjcm9sbF9oYWNrOiAwLCAvLyBJRSB3b3JrIGFyb3VuZCBmb3IgcG9zaXRpb246IGZpeGVkCiAgZGlzYWJsZV9zbGlkZV9jbGljazogZmFsc2UsICAvLyB1c2VkIGJ5IGNsaWNrZWQgYW5jaG9ycwoKICBsYW5nOiAiZW4iLCAvLyB1cGRhdGVkIHRvIGxhbmd1YWdlIHNwZWNpZmllZCBieSBodG1sIGZpbGUKCiAgaGVscF9hbmNob3I6IG51bGwsIC8vIHVzZWQgZm9yIGtleWJvYXJkIGZvY3VzIGhhY2sgaW4gc2hvd1Rvb2xiYXIoKQogIGhlbHBfcGFnZTogImh0dHA6Ly93d3cudzMub3JnL1RhbGtzL1Rvb2xzL1NsaWR5Mi9oZWxwL2hlbHAuaHRtbCIsCiAgaGVscF90ZXh0OiAiTmF2aWdhdGUgd2l0aCBtb3VzZSBjbGljaywgc3BhY2UgYmFyLCBDdXJzb3IgTGVmdC9SaWdodCwgIiArCiAgICAgICAgICAgICAib3IgUGcgVXAgYW5kIFBnIERuLiBVc2UgUyBhbmQgQiB0byBjaGFuZ2UgZm9udCBzaXplLiIsCgogIHNpemVfaW5kZXg6IDAsCiAgc2l6ZV9hZGp1c3RtZW50OiAwLAogIHNpemVzOiAgbmV3IEFycmF5KCIxMHB0IiwgIjEycHQiLCAiMTRwdCIsICIxNnB0IiwgIjE4cHQiLCAiMjBwdCIsCiAgICAgICAgICAgICAgICAgICAgIjIycHQiLCAiMjRwdCIsICIyNnB0IiwgIjI4cHQiLCAiMzBwdCIsICIzMnB0IiksCgogIC8vIG5lZWRlZCBmb3IgZWZmaWNpZW50IHJlc2l6aW5nCiAgbGFzdF93aWR0aDogMCwKICBsYXN0X2hlaWdodDogMCwKCgogIC8vIE5lZWRlZCBmb3IgY3Jvc3MgYnJvd3NlciBzdXBwb3J0IGZvciByZWxhdGl2ZSB3aWR0aC9oZWlnaHQgb24KICAvLyBvYmplY3QgZWxlbWVudHMuIFRoZSB3b3JrIGFyb3VuZCBpcyB0byBzYXZlIHdpZHRoL2hlaWdodCBhdHRyaWJ1dGVzCiAgLy8gYW5kIHRoZW4gdG8gcmVjb21wdXRlIGFic29sdXRlIHdpZHRoL2hlaWdodCBkaW1lbnNpb25zIG9uIHJlc2l6aW5nCiAgIG9iamVjdHM6IFtdLAoKICAvLyBhdHRhY2ggaW5pdGlhbGlhdGlvbiBldmVudCBoYW5kbGVycwogIHNldF91cDogZnVuY3Rpb24gKCkgewogICAgdmFyIGluaXQgPSBmdW5jdGlvbigpIHsgdzNjX3NsaWR5LmluaXQoKTsgfTsKICAgIGlmICh0eXBlb2Ygd2luZG93LmFkZEV2ZW50TGlzdGVuZXIgIT0gInVuZGVmaW5lZCIpCiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwgaW5pdCwgZmFsc2UpOwogICAgZWxzZQogICAgICB3aW5kb3cuYXR0YWNoRXZlbnQoIm9ubG9hZCIsIGluaXQpOwogIH0sCgogIGhpZGVfc2xpZGVzOiBmdW5jdGlvbiAoKSB7CiAgICBpZiAoZG9jdW1lbnQuYm9keSAmJiAhdzNjX3NsaWR5LmluaXRpYWxpemVkKQogICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLnZpc2liaWxpdHkgPSAiaGlkZGVuIjsKICAgIGVsc2UKICAgICAgc2V0VGltZW91dCh3M2Nfc2xpZHkuaGlkZV9zbGlkZXMsIDUwKTsKICB9LAoKICAvLyBoYWNrIHRvIHBlcnN1YWRlIElFIHRvIGNvbXB1dGUgY29ycmVjdCBkb2N1bWVudCBoZWlnaHQKICAvLyBhcyBuZWVkZWQgZm9yIHNpbXVsYXRpbmcgZml4ZWQgcG9zaXRpb25pbmcgb2YgdG9vbGJhcgogIGllX2hhY2s6IGZ1bmN0aW9uICgpIHsKICAgIHdpbmRvdy5yZXNpemVCeSgwLC0xKTsKICAgIHdpbmRvdy5yZXNpemVCeSgwLCAxKTsKICB9LAoKICBpbml0OiBmdW5jdGlvbiAoKSB7CiAgICAvL2FsZXJ0KCJzbGlkeSBzdGFydGluZyB0ZXN0IDEwIik7CiAgICBkb2N1bWVudC5ib2R5LnN0eWxlLnZpc2liaWxpdHkgPSAidmlzaWJsZSI7CiAgICB0aGlzLmluaXRfbG9jYWxpemF0aW9uKCk7CiAgICB0aGlzLmFkZF90b29sYmFyKCk7CiAgICB0aGlzLndyYXBfaW1wbGljaXRfc2xpZGVzKCk7CiAgICB0aGlzLmNvbGxlY3Rfc2xpZGVzKCk7CiAgICB0aGlzLmNvbGxlY3Rfbm90ZXMoKTsKICAgIHRoaXMuY29sbGVjdF9iYWNrZ3JvdW5kcygpOwogICAgdGhpcy5vYmplY3RzID0gZG9jdW1lbnQuYm9keS5nZXRFbGVtZW50c0J5VGFnTmFtZSgib2JqZWN0Iik7CiAgICB0aGlzLnBhdGNoX2FuY2hvcnMoKTsKICAgIHRoaXMuc2xpZGVfbnVtYmVyID0gdGhpcy5maW5kX3NsaWRlX251bWJlcihsb2NhdGlvbi5ocmVmKTsKICAgIHdpbmRvdy5vZmZzY3JlZW5idWZmZXJpbmcgPSB0cnVlOwogICAgdGhpcy5zaXplX2FkanVzdG1lbnQgPSB0aGlzLmZpbmRfc2l6ZV9hZGp1c3QoKTsKICAgIHRoaXMudGltZV9sZWZ0ID0gdGhpcy5maW5kX2R1cmF0aW9uKCk7CiAgICB0aGlzLmhpZGVfaW1hZ2VfdG9vbGJhcigpOyAgLy8gc3VwcHJlc3MgSUUgaW1hZ2UgdG9vbGJhciBwb3B1cAogICAgdGhpcy5pbml0X291dGxpbmVyKCk7ICAvLyBhY3RpdmF0ZSBmb2xkL3VuZm9sZCBzdXBwb3J0CiAgICB0aGlzLnRpdGxlID0gZG9jdW1lbnQudGl0bGU7CiAgICB0aGlzLmtleWJvYXJkbGVzcyA9ICh0aGlzLmlwYWR8fHRoaXMuaXBob25lfHx0aGlzLmFuZHJvaWQpOwoKICAgIGlmICh0aGlzLmtleWJvYXJkbGVzcykKICAgIHsKICAgICAgdzNjX3NsaWR5LnJlbW92ZV9jbGFzcyh3M2Nfc2xpZHkudG9vbGJhciwgImhpZGRlbiIpCiAgICAgIHRoaXMud2FudF90b29sYmFyID0gMDsKICAgIH0KCiAgICAvLyB3b3JrIGFyb3VuZCBmb3Igb3BlcmEgYnVnCiAgICB0aGlzLmlzX3hodG1sID0gKGRvY3VtZW50LmJvZHkudGFnTmFtZSA9PSAiQk9EWSIgPyBmYWxzZSA6IHRydWUpOwoKICAgIGlmICh0aGlzLnNsaWRlcy5sZW5ndGggPiAwKQogICAgewogICAgICB2YXIgc2xpZGUgPSB0aGlzLnNsaWRlc1t0aGlzLnNsaWRlX251bWJlcl07CiAgIAogICAgICBpZiAodGhpcy5zbGlkZV9udW1iZXIgPiAwKQogICAgICB7CiAgICAgICAgdGhpcy5zZXRfdmlzaWJpbGl0eV9hbGxfaW5jcmVtZW50YWwoInZpc2libGUiKTsKICAgICAgICB0aGlzLmxhc3Rfc2hvd24gPSB0aGlzLnByZXZpb3VzX2luY3JlbWVudGFsX2l0ZW0obnVsbCk7CiAgICAgICAgdGhpcy5zZXRfZW9zX3N0YXR1cyh0cnVlKTsKICAgICAgfQogICAgICBlbHNlCiAgICAgIHsKICAgICAgICB0aGlzLmxhc3Rfc2hvd24gPSBudWxsOwogICAgICAgIHRoaXMuc2V0X3Zpc2liaWxpdHlfYWxsX2luY3JlbWVudGFsKCJoaWRkZW4iKTsKICAgICAgICB0aGlzLnNldF9lb3Nfc3RhdHVzKCF0aGlzLm5leHRfaW5jcmVtZW50YWxfaXRlbSh0aGlzLmxhc3Rfc2hvd24pKTsKICAgICAgfQoKICAgICAgdGhpcy5zZXRfbG9jYXRpb24oKTsKICAgICAgdGhpcy5hZGRfY2xhc3ModGhpcy5zbGlkZXNbMF0sICJmaXJzdC1zbGlkZSIpOwogICAgICB3M2Nfc2xpZHkuc2hvd19zbGlkZShzbGlkZSk7CiAgICB9CgogICAgdGhpcy50b2MgPSB0aGlzLnRhYmxlX29mX2NvbnRlbnRzKCk7CgogICAgdGhpcy5hZGRfaW5pdGlhbF9wcm9tcHQoKTsKCiAgICAvLyBiaW5kIGV2ZW50IGhhbmRsZXJzIHdpdGhvdXQgaW50ZXJmZXJpbmcgd2l0aCBjdXN0b20gcGFnZSBzY3JpcHRzCiAgICAvLyBUYXAgZXZlbnRzIGJlaGF2ZSB0b28gd2VpcmRseSB0byBzdXBwb3J0IGNsaWNrcyByZWxpYWJseSBvbgogICAgLy8gaVBob25lIGFuZCBpUGFkLCBzbyBleGNsdWRlIHRoZXNlIGZyb20gY2xpY2sgaGFuZGxlcgoKICAgIGlmICghdGhpcy5rZXlib2FyZGxlc3MpCiAgICB7CiAgICAgIHRoaXMuYWRkX2xpc3RlbmVyKGRvY3VtZW50LmJvZHksICJjbGljayIsIHRoaXMubW91c2VfYnV0dG9uX2NsaWNrKTsKICAgICAgdGhpcy5hZGRfbGlzdGVuZXIoZG9jdW1lbnQuYm9keSwgIm1vdXNlZG93biIsIHRoaXMubW91c2VfYnV0dG9uX2Rvd24pOwogICAgfQoKICAgIHRoaXMuYWRkX2xpc3RlbmVyKGRvY3VtZW50LCAia2V5ZG93biIsIHRoaXMua2V5X2Rvd24pOwogICAgdGhpcy5hZGRfbGlzdGVuZXIoZG9jdW1lbnQsICJrZXlwcmVzcyIsIHRoaXMua2V5X3ByZXNzKTsKICAgIHRoaXMuYWRkX2xpc3RlbmVyKHdpbmRvdywgInJlc2l6ZSIsIHRoaXMucmVzaXplZCk7CiAgICB0aGlzLmFkZF9saXN0ZW5lcih3aW5kb3csICJzY3JvbGwiLCB0aGlzLnNjcm9sbGVkKTsKICAgIHRoaXMuYWRkX2xpc3RlbmVyKHdpbmRvdywgInVubG9hZCIsIHRoaXMudW5sb2FkZWQpOwoKICAgIHRoaXMuYWRkX2xpc3RlbmVyKGRvY3VtZW50LCAiZ2VzdHVyZWNoYW5nZSIsIGZ1bmN0aW9uICgpCiAgICB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0pOwoKICAgIHRoaXMuYXR0YWNoX3RvdWNoX2hhbmRlcnModGhpcy5zbGlkZXMpOwoKICAgIC8vIHRoaXMgc2VlbXMgdG8gYmUgYSBkZWJ1Z2dpbmcgaGFjawogICAgLy9pZiAoIWRvY3VtZW50LmJvZHkub25jbGljaykKICAgIC8vICBkb2N1bWVudC5ib2R5Lm9uY2xpY2sgPSBmdW5jdGlvbiAoKSB7IH07CgogICAgdGhpcy5zaW5nbGVfc2xpZGVfdmlldygpOwoKICAgIC8vdGhpcy5zZXRfbG9jYXRpb24oKTsKCiAgICB0aGlzLnJlc2l6ZWQoKTsKCiAgICBpZiAodGhpcy5pZTcpCiAgICAgIHNldFRpbWVvdXQodzNjX3NsaWR5LmllX2hhY2ssIDEwMCk7CgogICAgdGhpcy5zaG93X3Rvb2xiYXIoKTsKCiAgICAvLyBmb3IgYmFjayBidXR0b24gZGV0ZWN0aW9uCiAgICBzZXRJbnRlcnZhbChmdW5jdGlvbiAoKSB7IHczY19zbGlkeS5jaGVja19sb2NhdGlvbigpOyB9LCAyMDApOwogICAgdzNjX3NsaWR5LmluaXRpYWxpemVkID0gdHJ1ZTsKICB9LAoKICAvLyBjcmVhdGUgZGl2IGVsZW1lbnQgd2l0aCBsaW5rcyB0byBlYWNoIHNsaWRlCiAgdGFibGVfb2ZfY29udGVudHM6IGZ1bmN0aW9uICgpIHsKICAgIHZhciB0b2MgPSB0aGlzLmNyZWF0ZV9lbGVtZW50KCJkaXYiKTsKICAgIHRoaXMuYWRkX2NsYXNzKHRvYywgInNsaWR5X3RvYyBoaWRkZW4iKTsKICAgIC8vdG9jLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLCAiMCIpOwoKICAgIHZhciBoZWFkaW5nID0gdGhpcy5jcmVhdGVfZWxlbWVudCgiZGl2Iik7CiAgICB0aGlzLmFkZF9jbGFzcyhoZWFkaW5nLCAidG9jLWhlYWRpbmciKTsKICAgIGhlYWRpbmcuaW5uZXJIVE1MID0gdGhpcy5sb2NhbGl6ZSgiVGFibGUgb2YgQ29udGVudHMiKTsKCiAgICB0b2MuYXBwZW5kQ2hpbGQoaGVhZGluZyk7CiAgICB2YXIgcHJldmlvdXMgPSBudWxsOwoKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5zbGlkZXMubGVuZ3RoOyArK2kpCiAgICB7CiAgICAgIHZhciB0aXRsZSA9IHRoaXMuaGFzX2NsYXNzKHRoaXMuc2xpZGVzW2ldLCAidGl0bGUiKTsKICAgICAgdmFyIG51bSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKChpICsgMSkgKyAiLiAiKTsKCiAgICAgIHRvYy5hcHBlbmRDaGlsZChudW0pOwoKICAgICAgdmFyIGEgPSB0aGlzLmNyZWF0ZV9lbGVtZW50KCJhIik7CiAgICAgIGEuc2V0QXR0cmlidXRlKCJocmVmIiwgIiMoIiArIChpKzEpICsgIikiKTsKCiAgICAgIGlmICh0aXRsZSkKICAgICAgICB0aGlzLmFkZF9jbGFzcyhhLCAidGl0bGVzbGlkZSIpOwoKICAgICAgdmFyIG5hbWUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0aGlzLnNsaWRlX25hbWUoaSkpOwogICAgICBhLmFwcGVuZENoaWxkKG5hbWUpOwogICAgICBhLm9uY2xpY2sgPSB3M2Nfc2xpZHkudG9jX2NsaWNrOwogICAgICBhLm9ua2V5ZG93biA9IHczY19zbGlkeS50b2Nfa2V5X2Rvd247CiAgICAgIGEucHJldmlvdXMgPSBwcmV2aW91czsKCiAgICAgIGlmIChwcmV2aW91cykKICAgICAgICBwcmV2aW91cy5uZXh0ID0gYTsKCiAgICAgIHRvYy5hcHBlbmRDaGlsZChhKTsKCiAgICAgIGlmIChpID09IDApCiAgICAgICAgdG9jLmZpcnN0ID0gYTsKCiAgICAgIGlmIChpIDwgdGhpcy5zbGlkZXMubGVuZ3RoIC0gMSkKICAgICAgewogICAgICAgIHZhciBiciA9IHRoaXMuY3JlYXRlX2VsZW1lbnQoImJyIik7CiAgICAgICAgdG9jLmFwcGVuZENoaWxkKGJyKTsKICAgICAgfQoKICAgICAgcHJldmlvdXMgPSBhOwogICAgfQoKICAgIHRvYy5mb2N1cyA9IGZ1bmN0aW9uICgpIHsKICAgICAgaWYgKHRoaXMuZmlyc3QpCiAgICAgICAgdGhpcy5maXJzdC5mb2N1cygpOwogICAgfQoKICAgIHRvYy5vbm1vdXNldXAgPSB3M2Nfc2xpZHkubW91c2VfYnV0dG9uX3VwOwoKICAgIHRvYy5vbmNsaWNrID0gZnVuY3Rpb24gKGUpIHsKICAgICAgZXx8KGU9d2luZG93LmV2ZW50KTsKCiAgICAgIGlmICh3M2Nfc2xpZHkuc2VsZWN0ZWRfdGV4dF9sZW4gPD0gMCkKICAgICAgICAgdzNjX3NsaWR5LmhpZGVfdGFibGVfb2ZfY29udGVudHModHJ1ZSk7CgogICAgICB3M2Nfc2xpZHkuc3RvcF9wcm9wYWdhdGlvbihlKTsKICAgIAogICAgICBpZiAoZS5jYW5jZWwgIT0gdW5kZWZpbmVkKQogICAgICAgIGUuY2FuY2VsID0gdHJ1ZTsKICAgICAgCiAgICAgIGlmIChlLnJldHVyblZhbHVlICE9IHVuZGVmaW5lZCkKICAgICAgICBlLnJldHVyblZhbHVlID0gZmFsc2U7CiAgICAgIAogICAgICByZXR1cm4gZmFsc2U7CiAgICB9OwoKICAgIGRvY3VtZW50LmJvZHkuaW5zZXJ0QmVmb3JlKHRvYywgZG9jdW1lbnQuYm9keS5maXJzdENoaWxkKTsKICAgIHJldHVybiB0b2M7CiAgfSwKCiAgaXNfc2hvd25fdG9jOiBmdW5jdGlvbiAoKSB7CiAgICByZXR1cm4gIXczY19zbGlkeS5oYXNfY2xhc3ModzNjX3NsaWR5LnRvYywgImhpZGRlbiIpOwogIH0sCgogIHNob3dfdGFibGVfb2ZfY29udGVudHM6IGZ1bmN0aW9uICgpIHsKICAgIHczY19zbGlkeS5yZW1vdmVfY2xhc3ModzNjX3NsaWR5LnRvYywgImhpZGRlbiIpOwogICAgdmFyIHRvYyA9IHczY19zbGlkeS50b2M7CiAgICB0b2MuZm9jdXMoKTsKCiAgICBpZiAodzNjX3NsaWR5LmllNyAmJiB3M2Nfc2xpZHkuc2xpZGVfbnVtYmVyID09IDApCiAgICAgIHNldFRpbWVvdXQodzNjX3NsaWR5LmllX2hhY2ssIDEwMCk7CiAgfSwKCiAgaGlkZV90YWJsZV9vZl9jb250ZW50czogZnVuY3Rpb24gKGZvY3VzKSB7CiAgICB3M2Nfc2xpZHkuYWRkX2NsYXNzKHczY19zbGlkeS50b2MsICJoaWRkZW4iKTsKCiAgICBpZiAoZm9jdXMgJiYgIXczY19zbGlkeS5vcGVyYSAmJgogICAgICAgICF3M2Nfc2xpZHkuaGFzX2NsYXNzKHczY19zbGlkeS50b2MsICJoaWRkZW4iKSkKICAgICAgdzNjX3NsaWR5LnNldF9mb2N1cygpOwogIH0sCgogIHRvZ2dsZV90YWJsZV9vZl9jb250ZW50czogZnVuY3Rpb24gKCkgewogICAgaWYgKHczY19zbGlkeS5pc19zaG93bl90b2MoKSkKICAgICAgdzNjX3NsaWR5LmhpZGVfdGFibGVfb2ZfY29udGVudHModHJ1ZSk7CiAgICBlbHNlCiAgICAgIHczY19zbGlkeS5zaG93X3RhYmxlX29mX2NvbnRlbnRzKCk7CiAgfSwKCiAgLy8gY2FsbGVkIG9uIGNsaWNraW5nIHRvYyBlbnRyeQogIHRvY19jbGljazogZnVuY3Rpb24gKGUpIHsKICAgIGlmICghZSkKICAgICAgZSA9IHdpbmRvdy5ldmVudDsKCiAgICB2YXIgdGFyZ2V0ID0gdzNjX3NsaWR5LmdldF90YXJnZXQoZSk7CgogICAgaWYgKHRhcmdldCAmJiB0YXJnZXQubm9kZVR5cGUgPT0gMSkKICAgIHsKICAgICAgdmFyIHVyaSA9IHRhcmdldC5nZXRBdHRyaWJ1dGUoImhyZWYiKTsKCiAgICAgIGlmICh1cmkpCiAgICAgIHsKICAgICAgICAvL2FsZXJ0KCJnb2luZyB0byAiICsgdXJpKTsKICAgICAgICB2YXIgc2xpZGUgPSB3M2Nfc2xpZHkuc2xpZGVzW3czY19zbGlkeS5zbGlkZV9udW1iZXJdOwogICAgICAgIHczY19zbGlkeS5oaWRlX3NsaWRlKHNsaWRlKTsKICAgICAgICB3M2Nfc2xpZHkuc2xpZGVfbnVtYmVyID0gdzNjX3NsaWR5LmZpbmRfc2xpZGVfbnVtYmVyKHVyaSk7CiAgICAgICAgc2xpZGUgPSB3M2Nfc2xpZHkuc2xpZGVzW3czY19zbGlkeS5zbGlkZV9udW1iZXJdOwogICAgICAgIHczY19zbGlkeS5sYXN0X3Nob3duID0gbnVsbDsKICAgICAgICB3M2Nfc2xpZHkuc2V0X2xvY2F0aW9uKCk7CiAgICAgICAgdzNjX3NsaWR5LnNldF92aXNpYmlsaXR5X2FsbF9pbmNyZW1lbnRhbCgiaGlkZGVuIik7CiAgICAgICAgdzNjX3NsaWR5LnNldF9lb3Nfc3RhdHVzKCF3M2Nfc2xpZHkubmV4dF9pbmNyZW1lbnRhbF9pdGVtKHczY19zbGlkeS5sYXN0X3Nob3duKSk7CiAgICAgICAgdzNjX3NsaWR5LnNob3dfc2xpZGUoc2xpZGUpOwogICAgICAgIC8vdGFyZ2V0LmZvY3VzKCk7CgogICAgICAgIHRyeQogICAgICAgIHsKICAgICAgICAgIGlmICghdzNjX3NsaWR5Lm9wZXJhKQogICAgICAgICAgICB3M2Nfc2xpZHkuc2V0X2ZvY3VzKCk7CiAgICAgICAgfQogICAgICAgIGNhdGNoIChlKQogICAgICAgIHsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICB3M2Nfc2xpZHkuaGlkZV90YWJsZV9vZl9jb250ZW50cyh0cnVlKTsKICAgIGlmICh3M2Nfc2xpZHkuaWU3KSB3M2Nfc2xpZHkuaWVfaGFjaygpOwogICAgdzNjX3NsaWR5LnN0b3BfcHJvcGFnYXRpb24oZSk7CiAgICByZXR1cm4gdzNjX3NsaWR5LmNhbmNlbChlKTsKICB9LAoKICAvLyBjYWxsZWQgb25rZXlkb3duIGZvciB0b2MgZW50cnkKICB0b2Nfa2V5X2Rvd246IGZ1bmN0aW9uIChldmVudCkgewogICAgdmFyIGtleTsKCiAgICBpZiAoIWV2ZW50KQogICAgICB2YXIgZXZlbnQgPSB3aW5kb3cuZXZlbnQ7CgogICAgLy8ga2x1ZGdlIGFyb3VuZCBOUy9JRSBkaWZmZXJlbmNlcyAKICAgIGlmICh3aW5kb3cuZXZlbnQpCiAgICAgIGtleSA9IHdpbmRvdy5ldmVudC5rZXlDb2RlOwogICAgZWxzZSBpZiAoZXZlbnQud2hpY2gpCiAgICAgIGtleSA9IGV2ZW50LndoaWNoOwogICAgZWxzZQogICAgICByZXR1cm4gdHJ1ZTsgLy8gWWlrZXMhIHVua25vd24gYnJvd3NlcgoKICAgIC8vIGlnbm9yZSBldmVudCBpZiBrZXkgdmFsdWUgaXMgemVybwogICAgLy8gYXMgZm9yIGFsdCBvbiBPcGVyYSBhbmQgS29ucXVlcm9yCiAgICBpZiAoIWtleSkKICAgICAgcmV0dXJuIHRydWU7CgogICAgLy8gY2hlY2sgZm9yIGNvbmN1cnJlbnQgY29udHJvbC9jb21tYW5kL2FsdCBrZXkKICAgIC8vIGJ1dCBhcmUgdGhlc2Ugb25seSBwcmVzZW50IG9uIG1vdXNlIGV2ZW50cz8KCiAgICBpZiAoZXZlbnQuY3RybEtleSB8fCBldmVudC5hbHRLZXkpCiAgICAgIHJldHVybiB0cnVlOwoKICAgIGlmIChrZXkgPT0gMTMpCiAgICB7CiAgICAgIHZhciB1cmkgPSB0aGlzLmdldEF0dHJpYnV0ZSgiaHJlZiIpOwoKICAgICAgaWYgKHVyaSkKICAgICAgewogICAgICAgIC8vYWxlcnQoImdvaW5nIHRvICIgKyB1cmkpOwogICAgICAgdmFyIHNsaWRlID0gdzNjX3NsaWR5LnNsaWRlc1t3M2Nfc2xpZHkuc2xpZGVfbnVtYmVyXTsKICAgICAgICB3M2Nfc2xpZHkuaGlkZV9zbGlkZShzbGlkZSk7CiAgICAgICAgdzNjX3NsaWR5LnNsaWRlX251bWJlciA9IHczY19zbGlkeS5maW5kX3NsaWRlX251bWJlcih1cmkpOwogICAgICAgIHNsaWRlID0gdzNjX3NsaWR5LnNsaWRlc1t3M2Nfc2xpZHkuc2xpZGVfbnVtYmVyXTsKICAgICAgICB3M2Nfc2xpZHkubGFzdF9zaG93biA9IG51bGw7CiAgICAgICAgdzNjX3NsaWR5LnNldF9sb2NhdGlvbigpOwogICAgICAgIHczY19zbGlkeS5zZXRfdmlzaWJpbGl0eV9hbGxfaW5jcmVtZW50YWwoImhpZGRlbiIpOwogICAgICAgIHczY19zbGlkeS5zZXRfZW9zX3N0YXR1cyghdzNjX3NsaWR5Lm5leHRfaW5jcmVtZW50YWxfaXRlbSh3M2Nfc2xpZHkubGFzdF9zaG93bikpOwogICAgICAgIHczY19zbGlkeS5zaG93X3NsaWRlKHNsaWRlKTsKICAgICAgICAvL3RhcmdldC5mb2N1cygpOwoKICAgICAgICB0cnkKICAgICAgICB7CiAgICAgICAgICBpZiAoIXczY19zbGlkeS5vcGVyYSkKICAgICAgICAgICAgdzNjX3NsaWR5LnNldF9mb2N1cygpOwogICAgICAgIH0KICAgICAgICBjYXRjaCAoZSkKICAgICAgICB7CiAgICAgICAgfQogICAgICB9CgogICAgICB3M2Nfc2xpZHkuaGlkZV90YWJsZV9vZl9jb250ZW50cyh0cnVlKTsKCiAgICAgIGlmIChzZWxmLmllNykKICAgICAgIHczY19zbGlkeS5pZV9oYWNrKCk7CgogICAgICByZXR1cm4gdzNjX3NsaWR5LmNhbmNlbChldmVudCk7CiAgICB9CgogICAgaWYgKGtleSA9PSA0MCAmJiB0aGlzLm5leHQpCiAgICB7CiAgICAgIHRoaXMubmV4dC5mb2N1cygpOwogICAgICByZXR1cm4gdzNjX3NsaWR5LmNhbmNlbChldmVudCk7CiAgICB9CgogICAgaWYgKGtleSA9PSAzOCAmJiB0aGlzLnByZXZpb3VzKQogICAgewogICAgICB0aGlzLnByZXZpb3VzLmZvY3VzKCk7CiAgICAgIHJldHVybiB3M2Nfc2xpZHkuY2FuY2VsKGV2ZW50KTsKICAgIH0KCiAgICByZXR1cm4gdHJ1ZTsKICB9LAoKICB0b3VjaHN0YXJ0OiBmdW5jdGlvbiAoZSkKICB7CiAgICAvLyBhIGRvdWJsZSB0b3VjaCBvZnRlbiBzdGFydHMgd2l0aCBhCiAgICAvLyBzaW5nbGUgdG91Y2ggZHVlIHRvIGZpbmdlcnMgdG91Y2hpbmcKICAgIC8vIGRvd24gYXQgc2xpZ2h0bHkgZGlmZmVyZW50IHRpbWVzCiAgICAvLyB0aHVzIGF2b2lkIGNhbGxpbmcgcHJldmVudERlZmF1bHQgaGVyZQogICAgdGhpcy5wcmV2X3RhcCA9IHRoaXMubGFzdF90YXA7CiAgICB0aGlzLmxhc3RfdGFwID0gKG5ldyBEYXRlKS5nZXRUaW1lKCk7CgogICAgdmFyIHRhcF9kZWxheSA9IHRoaXMubGFzdF90YXAgLSB0aGlzLnByZXZfdGFwOwoKICAgIGlmICh0YXBfZGVsYXkgPD0gMjAwKQogICAgewogICAgICAvLyBkb3VibGUgdGFwCiAgICB9CgogICAgdmFyIHRvdWNoID0gZS50b3VjaGVzWzBdOwoKICAgIHRoaXMucGFnZVggPSB0b3VjaC5wYWdlWDsKICAgIHRoaXMucGFnZVkgPSB0b3VjaC5wYWdlWTsKICAgIHRoaXMuc2NyZWVuWCA9IHRvdWNoLnNjcmVlblg7CiAgICB0aGlzLnNjcmVlblkgPSB0b3VjaC5zY3JlZW5ZOwogICAgdGhpcy5jbGllbnRYID0gdG91Y2guY2xpZW50WDsKICAgIHRoaXMuY2xpZW50WSA9IHRvdWNoLmNsaWVudFk7CgogICAgdGhpcy5kZWx0YV94ID0gdGhpcy5kZWx0YV95ID0gMDsKICB9LAoKICB0b3VjaG1vdmU6IGZ1bmN0aW9uIChlKQogIHsKICAgIC8vIG92ZXJyaWRlIG5hdGl2ZSBnZXN0dXJlcyBmb3Igc2luZ2xlIHRvdWNoCiAgICBpZiAoZS50b3VjaGVzLmxlbmd0aCA+IDEpCiAgICAgIHJldHVybjsKCiAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICB2YXIgdG91Y2ggPSBlLnRvdWNoZXNbMF07CiAgICB0aGlzLmRlbHRhX3ggPSB0b3VjaC5wYWdlWCAtIHRoaXMucGFnZVg7CiAgICB0aGlzLmRlbHRhX3kgPSB0b3VjaC5wYWdlWSAtIHRoaXMucGFnZVk7CiAgfSwKCiAgdG91Y2hlbmQ6IGZ1bmN0aW9uIChlKQogIHsKICAgIC8vIGRlZmF1bHQgYmVoYXZpb3IgZm9yIG11bHRpLXRvdWNoCiAgICBpZiAoZS50b3VjaGVzLmxlbmd0aCA+IDEpCiAgICAgIHJldHVybjsKCiAgICB2YXIgZGVsYXkgPSAobmV3IERhdGUpLmdldFRpbWUoKSAtIHRoaXMubGFzdF90YXA7CiAgICB2YXIgZHggPSB0aGlzLmRlbHRhX3g7CiAgICB2YXIgZHkgPSB0aGlzLmRlbHRhX3k7CiAgICB2YXIgYWJzX2R4ID0gTWF0aC5hYnMoZHgpOwogICAgdmFyIGFic19keSA9IE1hdGguYWJzKGR5KTsKCiAgICBpZiAoZGVsYXkgPCA1MDAgJiYgKGFic19keCA+IDEwMCB8fCBhYnNfZHkgPiAxMDApKQogICAgewogICAgICBpZiAoYWJzX2R4ID4gMC41ICogYWJzX2R5KQogICAgICB7CiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwoKICAgICAgICBpZiAoZHggPCAwKQogICAgICAgICAgdzNjX3NsaWR5Lm5leHRfc2xpZGUodHJ1ZSk7CiAgICAgICAgZWxzZQogICAgICAgICAgdzNjX3NsaWR5LnByZXZpb3VzX3NsaWRlKHRydWUpOwogICAgICB9CiAgICAgIGVsc2UgaWYgKGFic19keSA+IDIgKiBhYnNfZHgpCiAgICAgIHsKICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgdzNjX3NsaWR5LnRvZ2dsZV90YWJsZV9vZl9jb250ZW50cygpOwogICAgICB9CiAgICB9CiAgfSwKCiAgLy8gIyMjIE9CU09MRVRFICMjIwogIGJlZm9yZV9wcmludDogZnVuY3Rpb24gKCkgewogICAgdGhpcy5zaG93X2FsbF9zbGlkZXMoKTsKICAgIHRoaXMuaGlkZV90b29sYmFyKCk7CiAgICBhbGVydCgiYmVmb3JlIHByaW50Iik7CiAgfSwKCiAgLy8gIyMjIE9CU09MRVRFICMjIwogIGFmdGVyX3ByaW50OiBmdW5jdGlvbiAoKSB7CiAgICBpZiAoIXRoaXMudmlld19hbGwpCiAgICB7CiAgICAgIHRoaXMuc2luZ2xlX3NsaWRlX3ZpZXcoKTsKICAgICAgdGhpcy5zaG93X3Rvb2xiYXIoKTsKICAgIH0KICAgIGFsZXJ0KCJhZnRlciBwcmludCIpOwogIH0sCgogIC8vICMjIyBPQlNPTEVURSAjIyMKICBwcmludF9zbGlkZXM6IGZ1bmN0aW9uICgpIHsKICAgIHRoaXMuYmVmb3JlX3ByaW50KCk7CiAgICB3aW5kb3cucHJpbnQoKTsKICAgIHRoaXMuYWZ0ZXJfcHJpbnQoKTsKICB9LAoKICAvLyAjIyMgT0JTT0xFVEUgPz8gIyMjCiAgdG9nZ2xlX3ZpZXc6IGZ1bmN0aW9uICgpIHsKICAgIGlmICh0aGlzLnZpZXdfYWxsKQogICAgewogICAgICB0aGlzLnNpbmdsZV9zbGlkZV92aWV3KCk7CiAgICAgIHRoaXMuc2hvd190b29sYmFyKCk7CiAgICAgIHRoaXMudmlld19hbGwgPSAwOwogICAgfQogICAgZWxzZQogICAgewogICAgICB0aGlzLnNob3dfYWxsX3NsaWRlcygpOwogICAgICB0aGlzLmhpZGVfdG9vbGJhcigpOwogICAgICB0aGlzLnZpZXdfYWxsID0gMTsKICAgIH0KICB9LAoKICAvLyBwcmVwYXJlIGZvciBwcmludGluZyAgIyMjIE9CU09MRVRFICMjIwogIHNob3dfYWxsX3NsaWRlczogZnVuY3Rpb24gKCkgewogICAgdGhpcy5yZW1vdmVfY2xhc3MoZG9jdW1lbnQuYm9keSwgInNpbmdsZV9zbGlkZSIpOwogICAgdGhpcy5zZXRfdmlzaWJpbGl0eV9hbGxfaW5jcmVtZW50YWwoInZpc2libGUiKTsKICB9LAoKICAvLyByZXN0b3JlIGFmdGVyIHByaW50aW5nICAjIyMgT0JTT0xFVEUgIyMjCiAgc2luZ2xlX3NsaWRlX3ZpZXc6IGZ1bmN0aW9uICgpIHsKICAgIHRoaXMuYWRkX2NsYXNzKGRvY3VtZW50LmJvZHksICJzaW5nbGVfc2xpZGUiKTsKICAgIHRoaXMuc2V0X3Zpc2liaWxpdHlfYWxsX2luY3JlbWVudGFsKCJ2aXNpYmxlIik7CiAgICB0aGlzLmxhc3Rfc2hvd24gPSB0aGlzLnByZXZpb3VzX2luY3JlbWVudGFsX2l0ZW0obnVsbCk7CiAgfSwKCiAgLy8gc3VwcHJlc3MgSUUncyBpbWFnZSB0b29sYmFyIHBvcCB1cAogIGhpZGVfaW1hZ2VfdG9vbGJhcjogZnVuY3Rpb24gKCkgewogICAgaWYgKCF0aGlzLm5zX3BvcykKICAgIHsKICAgICAgdmFyIGltYWdlcyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJJTUciKTsKCiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW1hZ2VzLmxlbmd0aDsgKytpKQogICAgICAgIGltYWdlc1tpXS5zZXRBdHRyaWJ1dGUoImdhbGxlcnlpbWciLCAibm8iKTsKICAgIH0KICB9LAoKICB1bmxvYWRlZDogZnVuY3Rpb24gKGUpIHsKICAgIC8vYWxlcnQoInVubG9hZGVkIik7CiAgfSwKCiAgLy8gU2FmYXJpIGFuZCBLb25xdWVyb3IgZG9uJ3QgeWV0IHN1cHBvcnQgZ2V0Q29tcHV0ZWRTdHlsZSgpCiAgLy8gYW5kIHRoZXkgYWx3YXlzIHJlbG9hZCBwYWdlIHdoZW4gbG9jYXRpb24uaHJlZiBpcyB1cGRhdGVkCiAgaXNfS0hUTUw6IGZ1bmN0aW9uICgpIHsKICAgIHZhciBhZ2VudCA9IG5hdmlnYXRvci51c2VyQWdlbnQ7CiAgICByZXR1cm4gKGFnZW50LmluZGV4T2YoIktIVE1MIikgPj0gMCA/IHRydWUgOiBmYWxzZSk7CiAgfSwKCiAgLy8gZmluZCBzbGlkZSBuYW1lIGZyb20gZmlyc3QgaDEgZWxlbWVudAogIC8vIGRlZmF1bHQgdG8gZG9jdW1lbnQgdGl0bGUgKyBzbGlkZSBudW1iZXIKICBzbGlkZV9uYW1lOiBmdW5jdGlvbiAoaW5kZXgpIHsKICAgIHZhciBuYW1lID0gbnVsbDsKICAgIHZhciBzbGlkZSA9IHRoaXMuc2xpZGVzW2luZGV4XTsKCiAgICB2YXIgaGVhZGluZyA9IHRoaXMuZmluZF9oZWFkaW5nKHNsaWRlKTsKCiAgICBpZiAoaGVhZGluZykKICAgICAgbmFtZSA9IHRoaXMuZXh0cmFjdF90ZXh0KGhlYWRpbmcpOwoKICAgIGlmICghbmFtZSkKICAgICAgbmFtZSA9IHRoaXMudGl0bGUgKyAiKCIgKyAoaW5kZXggKyAxKSArICIpIjsKCiAgICBuYW1lLnJlcGxhY2UoL1wmL2csICImYW1wOyIpOwogICAgbmFtZS5yZXBsYWNlKC9cPC9nLCAiJmx0OyIpOwogICAgbmFtZS5yZXBsYWNlKC9cPi9nLCAiJmd0OyIpOwoKICAgIHJldHVybiBuYW1lOwogIH0sCgogIC8vIGZpbmQgZmlyc3QgaDEgZWxlbWVudCBpbiBET00gdHJlZQogIGZpbmRfaGVhZGluZzogZnVuY3Rpb24gKG5vZGUpIHsKICAgIGlmICghbm9kZSB8fCBub2RlLm5vZGVUeXBlICE9IDEpCiAgICAgIHJldHVybiBudWxsOwoKICAgIGlmIChub2RlLm5vZGVOYW1lID09ICJIMSIgfHwgbm9kZS5ub2RlTmFtZSA9PSAiaDEiKQogICAgICByZXR1cm4gbm9kZTsKCiAgICB2YXIgY2hpbGQgPSBub2RlLmZpcnN0Q2hpbGQ7CgogICAgd2hpbGUgKGNoaWxkKQogICAgewogICAgICBub2RlID0gdGhpcy5maW5kX2hlYWRpbmcoY2hpbGQpOwoKICAgICAgaWYgKG5vZGUpCiAgICAgICAgcmV0dXJuIG5vZGU7CgogICAgICBjaGlsZCA9IGNoaWxkLm5leHRTaWJsaW5nOwogICAgfQoKICAgIHJldHVybiBudWxsOwogIH0sCgogIC8vIHJlY3Vyc2l2ZWx5IGV4dHJhY3QgdGV4dCBmcm9tIERPTSB0cmVlCiAgZXh0cmFjdF90ZXh0OiBmdW5jdGlvbiAobm9kZSkgewogICAgaWYgKCFub2RlKQogICAgICByZXR1cm4gIiI7CgogICAgLy8gdGV4dCBub2RlcwogICAgaWYgKG5vZGUubm9kZVR5cGUgPT0gMykKICAgICAgcmV0dXJuIG5vZGUubm9kZVZhbHVlOwoKICAgIC8vIGVsZW1lbnRzCiAgICBpZiAobm9kZS5ub2RlVHlwZSA9PSAxKQogICAgewogICAgICBub2RlID0gbm9kZS5maXJzdENoaWxkOwogICAgICB2YXIgdGV4dCA9ICIiOwoKICAgICAgd2hpbGUgKG5vZGUpCiAgICAgIHsKICAgICAgICB0ZXh0ID0gdGV4dCArIHRoaXMuZXh0cmFjdF90ZXh0KG5vZGUpOwogICAgICAgIG5vZGUgPSBub2RlLm5leHRTaWJsaW5nOwogICAgICB9CgogICAgICByZXR1cm4gdGV4dDsKICAgIH0KCiAgICByZXR1cm4gIiI7CiAgfSwKCiAgLy8gZmluZCBjb3B5cmlnaHQgdGV4dCBmcm9tIG1ldGEgZWxlbWVudAogIGZpbmRfY29weXJpZ2h0OiBmdW5jdGlvbiAoKSB7CiAgICB2YXIgbmFtZSwgY29udGVudDsKICAgIHZhciBtZXRhID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIm1ldGEiKTsKCiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1ldGEubGVuZ3RoOyArK2kpCiAgICB7CiAgICAgIG5hbWUgPSBtZXRhW2ldLmdldEF0dHJpYnV0ZSgibmFtZSIpOwogICAgICBjb250ZW50ID0gbWV0YVtpXS5nZXRBdHRyaWJ1dGUoImNvbnRlbnQiKTsKCiAgICAgIGlmIChuYW1lID09ICJjb3B5cmlnaHQiKQogICAgICAgIHJldHVybiBjb250ZW50OwogICAgfQoKICAgIHJldHVybiBudWxsOwogIH0sCgogIGZpbmRfc2l6ZV9hZGp1c3Q6IGZ1bmN0aW9uICgpIHsKICAgIHZhciBuYW1lLCBjb250ZW50LCBvZmZzZXQ7CiAgICB2YXIgbWV0YSA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJtZXRhIik7CgogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZXRhLmxlbmd0aDsgKytpKQogICAgewogICAgICBuYW1lID0gbWV0YVtpXS5nZXRBdHRyaWJ1dGUoIm5hbWUiKTsKICAgICAgY29udGVudCA9IG1ldGFbaV0uZ2V0QXR0cmlidXRlKCJjb250ZW50Iik7CgogICAgICBpZiAobmFtZSA9PSAiZm9udC1zaXplLWFkanVzdG1lbnQiKQogICAgICAgIHJldHVybiAxICogY29udGVudDsKICAgIH0KCiAgICByZXR1cm4gMTsKICB9LAoKICAvLyA8bWV0YSBuYW1lPSJkdXJhdGlvbiIgY29udGVudD0iMjAiIC8+ICBmb3IgMjAgbWludXRlcwogIGZpbmRfZHVyYXRpb246IGZ1bmN0aW9uICgpIHsKICAgIHZhciBuYW1lLCBjb250ZW50LCBvZmZzZXQ7CiAgICB2YXIgbWV0YSA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJtZXRhIik7CgogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZXRhLmxlbmd0aDsgKytpKQogICAgewogICAgICBuYW1lID0gbWV0YVtpXS5nZXRBdHRyaWJ1dGUoIm5hbWUiKTsKICAgICAgY29udGVudCA9IG1ldGFbaV0uZ2V0QXR0cmlidXRlKCJjb250ZW50Iik7CgogICAgICBpZiAobmFtZSA9PSAiZHVyYXRpb24iKQogICAgICAgIHJldHVybiA2MDAwMCAqIGNvbnRlbnQ7CiAgICB9CgogICAgcmV0dXJuIG51bGw7CiAgfSwKCiAgcmVwbGFjZV9ieV9ub25fYnJlYWtpbmdfc3BhY2U6IGZ1bmN0aW9uIChzdHIpIHsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgKytpKQogICAgICBzdHJbaV0gPSAxNjA7CiAgfSwKCiAgLy8gIyMjIENIRUNLIE1FICMjIyBpcyB1c2Ugb2YgImxpIiBva2F5IGZvciB0ZXh0L2h0bWw/CiAgLy8gZm9yIFhIVE1MIGRvIHdlIGFsc28gbmVlZCB0byBzcGVjaWZ5IG5hbWVzcGFjZT8KICBpbml0X291dGxpbmVyOiBmdW5jdGlvbiAoKSB7CiAgICB2YXIgaXRlbXMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgibGkiKTsKCiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgKytpKQogICAgewogICAgICB2YXIgdGFyZ2V0ID0gaXRlbXNbaV07CgogICAgICBpZiAoIXRoaXMuaGFzX2NsYXNzKHRhcmdldC5wYXJlbnROb2RlLCAib3V0bGluZSIpKQogICAgICAgIGNvbnRpbnVlOwoKICAgICAgdGFyZ2V0Lm9uY2xpY2sgPSB0aGlzLm91dGxpbmVfY2xpY2s7Ci8qICMjIyBtb3JlIHdvcmsgbmVlZGVkIGZvciBJRTYKICAgICAgaWYgKCF0aGlzLm5zX3BvcykKICAgICAgewogICAgICAgIHRhcmdldC5vbm1vdXNlb3ZlciA9IHRoaXMuaG92ZXJfb3V0bGluZTsKICAgICAgICB0YXJnZXQub25tb3VzZW91dCA9IHRoaXMudW5ob3Zlcl9vdXRsaW5lOwogICAgICB9CiovCiAgICAgIGlmICh0aGlzLmZvbGRhYmxlKHRhcmdldCkpCiAgICAgIHsKICAgICAgICB0YXJnZXQuZm9sZGFibGUgPSB0cnVlOwogICAgICAgIHRhcmdldC5vbmZvY3VzID0gZnVuY3Rpb24gKCkge3czY19zbGlkeS5vdXRsaW5lID0gdGhpczt9OwogICAgICAgIHRhcmdldC5vbmJsdXIgPSBmdW5jdGlvbiAoKSB7dzNjX3NsaWR5Lm91dGxpbmUgPSBudWxsO307CgogICAgICAgIGlmICghdGFyZ2V0LmdldEF0dHJpYnV0ZSgidGFiaW5kZXgiKSkKICAgICAgICAgIHRhcmdldC5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwgIjAiKTsKCiAgICAgICAgaWYgKHRoaXMuaGFzX2NsYXNzKHRhcmdldCwgImV4cGFuZCIpKQogICAgICAgICAgdGhpcy51bmZvbGQodGFyZ2V0KTsKICAgICAgICBlbHNlCiAgICAgICAgICB0aGlzLmZvbGQodGFyZ2V0KTsKICAgICAgfQogICAgICBlbHNlCiAgICAgIHsKICAgICAgICB0aGlzLmFkZF9jbGFzcyh0YXJnZXQsICJub2ZvbGQiKTsKICAgICAgICB0YXJnZXQudmlzaWJsZSA9IHRydWU7CiAgICAgICAgdGFyZ2V0LmZvbGRhYmxlID0gZmFsc2U7CiAgICAgIH0KICAgIH0KICB9LAoKICBmb2xkYWJsZTogZnVuY3Rpb24gKGl0ZW0pIHsKICAgIGlmICghaXRlbSB8fCBpdGVtLm5vZGVUeXBlICE9IDEpCiAgICAgIHJldHVybiBmYWxzZTsKCiAgICB2YXIgbm9kZSA9IGl0ZW0uZmlyc3RDaGlsZDsKCiAgICB3aGlsZSAobm9kZSkKICAgIHsKICAgICAgaWYgKG5vZGUubm9kZVR5cGUgPT0gMSAmJiB0aGlzLmlzX2Jsb2NrKG5vZGUpKQogICAgICAgIHJldHVybiB0cnVlOwoKICAgICAgbm9kZSA9IG5vZGUubmV4dFNpYmxpbmc7CiAgICB9CgogICAgcmV0dXJuIGZhbHNlOwogIH0sCgogIC8vICMjIyBDSEVDSyBNRSAjIyMgc3dpdGNoIHRvIGFkZC9yZW1vdmUgImhpZGRlbiIgY2xhc3MKICBmb2xkOiBmdW5jdGlvbiAoaXRlbSkgewogICAgaWYgKGl0ZW0pCiAgICB7CiAgICAgIHRoaXMucmVtb3ZlX2NsYXNzKGl0ZW0sICJ1bmZvbGRlZCIpOwogICAgICB0aGlzLmFkZF9jbGFzcyhpdGVtLCAiZm9sZGVkIik7CiAgICB9CgogICAgdmFyIG5vZGUgPSBpdGVtID8gaXRlbS5maXJzdENoaWxkIDogbnVsbDsKCiAgICB3aGlsZSAobm9kZSkKICAgIHsKICAgICAgaWYgKG5vZGUubm9kZVR5cGUgPT0gMSAmJiB0aGlzLmlzX2Jsb2NrKG5vZGUpKSAvLyBlbGVtZW50CiAgICAgIHsKICAgICAgICAgdzNjX3NsaWR5LmFkZF9jbGFzcyhub2RlLCAiaGlkZGVuIik7CiAgICAgIH0KCiAgICAgIG5vZGUgPSBub2RlLm5leHRTaWJsaW5nOwogICAgfQoKICAgIGl0ZW0udmlzaWJsZSA9IGZhbHNlOwogIH0sCgogIC8vICMjIyBDSEVDSyBNRSAjIyMgc3dpdGNoIHRvIGFkZC9yZW1vdmUgImhpZGRlbiIgY2xhc3MKICB1bmZvbGQ6IGZ1bmN0aW9uIChpdGVtKSB7CiAgICBpZiAoaXRlbSkKICAgIHsKICAgICAgdGhpcy5hZGRfY2xhc3MoaXRlbSwgInVuZm9sZGVkIik7CiAgICAgIHRoaXMucmVtb3ZlX2NsYXNzKGl0ZW0sICJmb2xkZWQiKTsKICAgIH0KCiAgICB2YXIgbm9kZSA9IGl0ZW0gPyBpdGVtLmZpcnN0Q2hpbGQgOiBudWxsOwoKICAgIHdoaWxlIChub2RlKQogICAgewogICAgICBpZiAobm9kZS5ub2RlVHlwZSA9PSAxICYmIHRoaXMuaXNfYmxvY2sobm9kZSkpIC8vIGVsZW1lbnQKICAgICAgewogICAgICAgIHczY19zbGlkeS5yZW1vdmVfY2xhc3Mobm9kZSwgImhpZGRlbiIpOwogICAgICB9CgogICAgICBub2RlID0gbm9kZS5uZXh0U2libGluZzsKICAgIH0KCiAgICBpdGVtLnZpc2libGUgPSB0cnVlOwogIH0sCgogIG91dGxpbmVfY2xpY2s6IGZ1bmN0aW9uIChlKSB7CiAgICBpZiAoIWUpCiAgICAgIGUgPSB3aW5kb3cuZXZlbnQ7CgogICAgdmFyIHJpZ2h0Y2xpY2sgPSBmYWxzZTsKICAgIHZhciB0YXJnZXQgPSB3M2Nfc2xpZHkuZ2V0X3RhcmdldChlKTsKCiAgICB3aGlsZSAodGFyZ2V0ICYmIHRhcmdldC52aXNpYmxlID09IHVuZGVmaW5lZCkKICAgICAgdGFyZ2V0ID0gdGFyZ2V0LnBhcmVudE5vZGU7CgogICAgaWYgKCF0YXJnZXQpCiAgICAgIHJldHVybiB0cnVlOwoKICAgIGlmIChlLndoaWNoKQogICAgICByaWdodGNsaWNrID0gKGUud2hpY2ggPT0gMyk7CiAgICBlbHNlIGlmIChlLmJ1dHRvbikKICAgICAgcmlnaHRjbGljayA9IChlLmJ1dHRvbiA9PSAyKTsKCiAgICBpZiAoIXJpZ2h0Y2xpY2sgJiYgdGFyZ2V0LnZpc2libGUgIT0gdW5kZWZpbmVkKQogICAgewogICAgICBpZiAodGFyZ2V0LmZvbGRhYmxlKQogICAgICB7CiAgICAgICAgaWYgKHRhcmdldC52aXNpYmxlKQogICAgICAgICAgdzNjX3NsaWR5LmZvbGQodGFyZ2V0KTsKICAgICAgICBlbHNlCiAgICAgICAgICB3M2Nfc2xpZHkudW5mb2xkKHRhcmdldCk7CiAgICAgIH0KCiAgICAgIHczY19zbGlkeS5zdG9wX3Byb3BhZ2F0aW9uKGUpOwogICAgICBlLmNhbmNlbCA9IHRydWU7CiAgICAgIGUucmV0dXJuVmFsdWUgPSBmYWxzZTsKICAgIH0KCiAgICByZXR1cm4gZmFsc2U7CiAgfSwKCiAgYWRkX2luaXRpYWxfcHJvbXB0OiBmdW5jdGlvbiAoKSB7CiAgICB2YXIgcHJvbXB0ID0gdGhpcy5jcmVhdGVfZWxlbWVudCgiZGl2Iik7CiAgICBwcm9tcHQuc2V0QXR0cmlidXRlKCJjbGFzcyIsICJpbml0aWFsX3Byb21wdCIpOwoKICAgIHZhciBwMSA9IHRoaXMuY3JlYXRlX2VsZW1lbnQoInAiKTsKICAgIHByb21wdC5hcHBlbmRDaGlsZChwMSk7CiAgICBwMS5zZXRBdHRyaWJ1dGUoImNsYXNzIiwgImhlbHAiKTsKCiAgICBpZiAodGhpcy5rZXlib2FyZGxlc3MpCiAgICAgIHAxLmlubmVySFRNTCA9ICJzd2lwZSBsZWZ0IHRvIG1vdmUgdG8gbmV4dCBzbGlkZSI7CiAgICBlbHNlCiAgICAgIHAxLmlubmVySFRNTCA9ICJTcGFjZSwgUmlnaHQgQXJyb3cgb3Igc3dpcGUgbGVmdCB0byBtb3ZlIHRvICIgKwogICAgICAgICAgICAgICAgICAgICAibmV4dCBzbGlkZSwgY2xpY2sgaGVscCBiZWxvdyBmb3IgbW9yZSBkZXRhaWxzIjsKCiAgICB0aGlzLmFkZF9saXN0ZW5lcihwcm9tcHQsICJjbGljayIsIGZ1bmN0aW9uIChlKSB7CiAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQocHJvbXB0KTsKICAgICAgdzNjX3NsaWR5LnN0b3BfcHJvcGFnYXRpb24oZSk7CiAgICAKICAgICAgaWYgKGUuY2FuY2VsICE9IHVuZGVmaW5lZCkKICAgICAgICBlLmNhbmNlbCA9IHRydWU7CiAgICAgIAogICAgICBpZiAoZS5yZXR1cm5WYWx1ZSAhPSB1bmRlZmluZWQpCiAgICAgICAgZS5yZXR1cm5WYWx1ZSA9IGZhbHNlOwogICAgICAKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfSk7CgogICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChwcm9tcHQpOwogICAgdGhpcy5pbml0aWFsX3Byb21wdCA9IHByb21wdDsKICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7ZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChwcm9tcHQpO30sIDUwMDApOwogIH0sCgogIGFkZF90b29sYmFyOiBmdW5jdGlvbiAoKSB7CiAgICB2YXIgY291bnRlciwgcGFnZTsKCiAgICAgdGhpcy50b29sYmFyID0gdGhpcy5jcmVhdGVfZWxlbWVudCgiZGl2Iik7CiAgICAgdGhpcy50b29sYmFyLnNldEF0dHJpYnV0ZSgiY2xhc3MiLCAidG9vbGJhciIpOwoKICAgICAvLyBhIHJlYXNvbmFibHkgYmVoYXZlZCBicm93c2VyCiAgICAgaWYgKHRoaXMubnNfcG9zIHx8ICF0aGlzLmllNikKICAgICB7CiAgICAgICB2YXIgcmlnaHQgPSB0aGlzLmNyZWF0ZV9lbGVtZW50KCJkaXYiKTsKICAgICAgIHJpZ2h0LnNldEF0dHJpYnV0ZSgic3R5bGUiLCAiZmxvYXQ6IHJpZ2h0OyB0ZXh0LWFsaWduOiByaWdodCIpOwoKICAgICAgIGNvdW50ZXIgPSB0aGlzLmNyZWF0ZV9lbGVtZW50KCJzcGFuIikKICAgICAgIGNvdW50ZXIuaW5uZXJIVE1MID0gdGhpcy5sb2NhbGl6ZSgic2xpZGUiKSArICIgbi9tIjsKICAgICAgIHJpZ2h0LmFwcGVuZENoaWxkKGNvdW50ZXIpOwogICAgICAgdGhpcy50b29sYmFyLmFwcGVuZENoaWxkKHJpZ2h0KTsKCiAgICAgICB2YXIgbGVmdCA9IHRoaXMuY3JlYXRlX2VsZW1lbnQoImRpdiIpOwogICAgICAgbGVmdC5zZXRBdHRyaWJ1dGUoInN0eWxlIiwgInRleHQtYWxpZ246IGxlZnQiKTsKCiAgICAgICAvLyBnbG9iYWwgZW5kIG9mIHNsaWRlIGluZGljYXRvcgogICAgICAgdGhpcy5lb3MgPSB0aGlzLmNyZWF0ZV9lbGVtZW50KCJzcGFuIik7CiAgICAgICB0aGlzLmVvcy5pbm5lckhUTUwgPSAiKiAiOwogICAgICAgbGVmdC5hcHBlbmRDaGlsZCh0aGlzLmVvcyk7CgogICAgICAgdmFyIGhlbHAgPSB0aGlzLmNyZWF0ZV9lbGVtZW50KCJhIik7CiAgICAgICBoZWxwLnNldEF0dHJpYnV0ZSgiaHJlZiIsIHRoaXMuaGVscF9wYWdlKTsKICAgICAgIGhlbHAuc2V0QXR0cmlidXRlKCJ0aXRsZSIsIHRoaXMubG9jYWxpemUodGhpcy5oZWxwX3RleHQpKTsKICAgICAgIGhlbHAuaW5uZXJIVE1MID0gdGhpcy5sb2NhbGl6ZSgiaGVscD8iKTsKICAgICAgIGxlZnQuYXBwZW5kQ2hpbGQoaGVscCk7CiAgICAgICBoZWxwLnN0eWxlLmRpc3BsYXk9Im5vbmUiOyAKICAgICAgIHRoaXMuaGVscF9hbmNob3IgPSBoZWxwOyAgLy8gc2F2ZSBmb3IgZm9jdXMgaGFjawoKICAgICAgIHZhciBnYXAxID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiAiKTsKICAgICAgIGxlZnQuYXBwZW5kQ2hpbGQoZ2FwMSk7CgogICAgICAgdmFyIGNvbnRlbnRzID0gdGhpcy5jcmVhdGVfZWxlbWVudCgiYSIpOwogICAgICAgY29udGVudHMuc2V0QXR0cmlidXRlKCJocmVmIiwgImphdmFzY3JpcHQ6dzNjX3NsaWR5LnRvZ2dsZV90YWJsZV9vZl9jb250ZW50cygpIik7CiAgICAgICBjb250ZW50cy5zZXRBdHRyaWJ1dGUoInRpdGxlIiwgdGhpcy5sb2NhbGl6ZSgidGFibGUgb2YgY29udGVudHMiKSk7CiAgICAgICBjb250ZW50cy5pbm5lckhUTUwgPSB0aGlzLmxvY2FsaXplKCJDb250ZW50cyIpOwogICAgICAgbGVmdC5hcHBlbmRDaGlsZChjb250ZW50cyk7CgogICAgICAgdmFyIGdhcDIgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiICIpOwogICAgICAgbGVmdC5hcHBlbmRDaGlsZChnYXAyKTsKCiAgICAgICB2YXIgY29weXJpZ2h0ID0gdGhpcy5maW5kX2NvcHlyaWdodCgpOwoKICAgICAgIGlmIChjb3B5cmlnaHQpCiAgICAgICB7CiAgICAgICAgIHZhciBzcGFuID0gdGhpcy5jcmVhdGVfZWxlbWVudCgic3BhbiIpOwogICAgICAgICBzcGFuLmNsYXNzTmFtZSA9ICJjb3B5cmlnaHQiOwogICAgICAgICBzcGFuLmlubmVySFRNTCA9IGNvcHlyaWdodDsKICAgICAgICAgbGVmdC5hcHBlbmRDaGlsZChzcGFuKTsKICAgICAgIH0KCiAgICAgICB0aGlzLnRvb2xiYXIuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsICIwIik7CiAgICAgICB0aGlzLnRvb2xiYXIuYXBwZW5kQ2hpbGQobGVmdCk7CiAgICAgfQogICAgIGVsc2UgLy8gSUU2IHNvIG5lZWQgdG8gd29yayBhcm91bmQgaXRzIHBvb3IgQ1NTIHN1cHBvcnQKICAgICB7CiAgICAgICB0aGlzLnRvb2xiYXIuc3R5bGUucG9zaXRpb24gPSAodGhpcy5pZTcgPyAiZml4ZWQiIDogImFic29sdXRlIik7CiAgICAgICB0aGlzLnRvb2xiYXIuc3R5bGUuekluZGV4ID0gIjIwMCI7CiAgICAgICB0aGlzLnRvb2xiYXIuc3R5bGUud2lkdGggPSAiOTkuOSUiOwogICAgICAgdGhpcy50b29sYmFyLnN0eWxlLmhlaWdodCA9ICIxLjJlbSI7CiAgICAgICB0aGlzLnRvb2xiYXIuc3R5bGUudG9wID0gImF1dG8iOwogICAgICAgdGhpcy50b29sYmFyLnN0eWxlLmJvdHRvbSA9ICIwIjsKICAgICAgIHRoaXMudG9vbGJhci5zdHlsZS5sZWZ0ID0gIjAiOwogICAgICAgdGhpcy50b29sYmFyLnN0eWxlLnJpZ2h0ID0gIjAiOwogICAgICAgdGhpcy50b29sYmFyLnN0eWxlLnRleHRBbGlnbiA9ICJsZWZ0IjsKICAgICAgIHRoaXMudG9vbGJhci5zdHlsZS5mb250U2l6ZSA9ICI2MCUiOwogICAgICAgdGhpcy50b29sYmFyLnN0eWxlLmNvbG9yID0gInJlZCI7CiAgICAgICB0aGlzLnRvb2xiYXIuYm9yZGVyV2lkdGggPSAwOwogICAgICAgdGhpcy50b29sYmFyLmNsYXNzTmFtZSA9ICJ0b29sYmFyIjsKICAgICAgIHRoaXMudG9vbGJhci5zdHlsZS5iYWNrZ3JvdW5kID0gInJnYigyNDAsMjQwLDI0MCkiOwoKICAgICAgIC8vIHdvdWxkIGxpa2UgdG8gaGF2ZSBoZWxwIHRleHQgbGVmdCBhbGlnbmVkCiAgICAgICAvLyBhbmQgcGFnZSBjb3VudGVyIHJpZ2h0IGFsaWduZWQsIGZsb2F0aW5nCiAgICAgICAvLyBkaXYncyBkb24ndCB3b3JrLCBzbyBpbnN0ZWFkIHVzZSBuZXN0ZWQKICAgICAgIC8vIGFic29sdXRlbHkgcG9zaXRpb25lZCBkaXYncy4KCiAgICAgICB2YXIgc3AgPSB0aGlzLmNyZWF0ZV9lbGVtZW50KCJzcGFuIik7CiAgICAgICBzcC5pbm5lckhUTUwgPSAiJm5ic3A7Jm5ic3A7KiZuYnNwOyI7CiAgICAgICB0aGlzLnRvb2xiYXIuYXBwZW5kQ2hpbGQoc3ApOwogICAgICAgdGhpcy5lb3MgPSBzcDsgIC8vIGVuZCBvZiBzbGlkZSBpbmRpY2F0b3IKCiAgICAgICB2YXIgaGVscCA9IHRoaXMuY3JlYXRlX2VsZW1lbnQoImEiKTsKICAgICAgIGhlbHAuc2V0QXR0cmlidXRlKCJocmVmIiwgdGhpcy5oZWxwX3BhZ2UpOwogICAgICAgaGVscC5zZXRBdHRyaWJ1dGUoInRpdGxlIiwgdGhpcy5sb2NhbGl6ZSh0aGlzLmhlbHBfdGV4dCkpOwogICAgICAgaGVscC5pbm5lckhUTUwgPSB0aGlzLmxvY2FsaXplKCJoZWxwPyIpOwogICAgICAgdGhpcy50b29sYmFyLmFwcGVuZENoaWxkKGhlbHApOwogICAgICAgdGhpcy5oZWxwX2FuY2hvciA9IGhlbHA7ICAvLyBzYXZlIGZvciBmb2N1cyBoYWNrCgogICAgICAgdmFyIGdhcDEgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiICIpOwogICAgICAgdGhpcy50b29sYmFyLmFwcGVuZENoaWxkKGdhcDEpOwoKICAgICAgIHZhciBjb250ZW50cyA9IHRoaXMuY3JlYXRlX2VsZW1lbnQoImEiKTsKICAgICAgIGNvbnRlbnRzLnNldEF0dHJpYnV0ZSgiaHJlZiIsICJqYXZhc2NyaXB0OnRvZ2dsZVRhYmxlT2ZDb250ZW50cygpIik7CiAgICAgICBjb250ZW50cy5zZXRBdHRyaWJ1dGUoInRpdGxlIiwgdGhpcy5sb2NhbGl6ZSgidGFibGUgb2YgY29udGVudHMiLmxvY2FsaXplKSk7CiAgICAgICBjb250ZW50cy5pbm5lckhUTUwgPSB0aGlzLmxvY2FsaXplKCJjb250ZW50cz8iKTsKICAgICAgIHRoaXMudG9vbGJhci5hcHBlbmRDaGlsZChjb250ZW50cyk7CgogICAgICAgdmFyIGdhcDIgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiICIpOwogICAgICAgdGhpcy50b29sYmFyLmFwcGVuZENoaWxkKGdhcDIpOwoKICAgICAgIHZhciBjb3B5cmlnaHQgPSB0aGlzLmZpbmRfY29weXJpZ2h0KCk7CgogICAgICAgaWYgKGNvcHlyaWdodCkKICAgICAgIHsKICAgICAgICAgdmFyIHNwYW4gPSB0aGlzLmNyZWF0ZV9lbGVtZW50KCJzcGFuIik7CiAgICAgICAgIHNwYW4uaW5uZXJIVE1MID0gY29weXJpZ2h0OwogICAgICAgICBzcGFuLnN0eWxlLmNvbG9yID0gImJsYWNrIjsKICAgICAgICAgc3Bhbi5zdHlsZS5tYXJnaW5MZWZ0ID0gIjAuNWVtIjsKICAgICAgICAgdGhpcy50b29sYmFyLmFwcGVuZENoaWxkKHNwYW4pOwogICAgICAgfQoKICAgICAgIGNvdW50ZXIgPSB0aGlzLmNyZWF0ZV9lbGVtZW50KCJkaXYiKQogICAgICAgY291bnRlci5zdHlsZS5wb3NpdGlvbiA9ICJhYnNvbHV0ZSI7CiAgICAgICBjb3VudGVyLnN0eWxlLndpZHRoID0gImF1dG8iOyAvLyIyMCUiOwogICAgICAgY291bnRlci5zdHlsZS5oZWlnaHQgPSAiMS4yZW0iOwogICAgICAgY291bnRlci5zdHlsZS50b3AgPSAiYXV0byI7CiAgICAgICBjb3VudGVyLnN0eWxlLmJvdHRvbSA9IDA7CiAgICAgICBjb3VudGVyLnN0eWxlLnJpZ2h0ID0gIjAiOwogICAgICAgY291bnRlci5zdHlsZS50ZXh0QWxpZ24gPSAicmlnaHQiOwogICAgICAgY291bnRlci5zdHlsZS5jb2xvciA9ICJyZWQiOwogICAgICAgY291bnRlci5zdHlsZS5iYWNrZ3JvdW5kID0gInJnYigyNDAsMjQwLDI0MCkiOwoKICAgICAgIGNvdW50ZXIuaW5uZXJIVE1MID0gdGhpcy5sb2NhbGl6ZSgic2xpZGUiKSArICIgbi9tIjsKICAgICAgIHRoaXMudG9vbGJhci5hcHBlbmRDaGlsZChjb3VudGVyKTsKICAgICB9CgogICAgIC8vIGVuc3VyZSB0aGF0IGNsaWNrIGlzbid0IHBhc3NlZCB0aHJvdWdoIHRvIHRoZSBwYWdlCiAgICAgdGhpcy50b29sYmFyLm9uY2xpY2sgPQogICAgICAgICBmdW5jdGlvbiAoZSkgewogICAgICAgICAgIGlmICghZSkKICAgICAgICAgICAgIGUgPSB3aW5kb3cuZXZlbnQ7CgogICAgICAgICAgIHZhciB0YXJnZXQgPSBlLnRhcmdldDsKCiAgICAgICAgICAgaWYgKCF0YXJnZXQgJiYgZS5zcmNFbGVtZW50KQogICAgICAgICAgICAgdGFyZ2V0ID0gZS5zcmNFbGVtZW50OwoKICAgICAgICAgICAvLyB3b3JrIGFyb3VuZCBTYWZhcmkgYnVnCiAgICAgICAgICAgaWYgKHRhcmdldCAmJiB0YXJnZXQubm9kZVR5cGUgPT0gMykKICAgICAgICAgICAgIHRhcmdldCA9IHRhcmdldC5wYXJlbnROb2RlOwoKICAgICAgICAgICB3M2Nfc2xpZHkuc3RvcF9wcm9wYWdhdGlvbihlKTsKCiAgICAgICAgICAgaWYgKHRhcmdldCAmJiB0YXJnZXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSAhPSAiYSIpCiAgICAgICAgICAgICB3M2Nfc2xpZHkubW91c2VfYnV0dG9uX2NsaWNrKGUpOwogICAgICAgICB9OwoKICAgICB0aGlzLnNsaWRlX251bWJlcl9lbGVtZW50ID0gY291bnRlcjsKICAgICB0aGlzLnNldF9lb3Nfc3RhdHVzKGZhbHNlKTsKICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMudG9vbGJhcik7CiAgfSwKCiAgLy8gd3lzaXd5ZyBlZGl0b3JzIG1ha2UgaXQgaGFyZCB0byB1c2UgZGl2IGVsZW1lbnRzCiAgLy8gZS5nLiBhbWF5YSBsb3NlcyB0aGUgZGl2IHdoZW4geW91IGNvcHkgYW5kIHBhc3RlCiAgLy8gdGhpcyBmdW5jdGlvbiB3cmFwcyBkaXYgZWxlbWVudHMgYXJvdW5kIGltcGxpY2l0CiAgLy8gc2xpZGVzIHdoaWNoIHN0YXJ0IHdpdGggYW4gaDEgZWxlbWVudCBhbmQgY29udGludWUKICAvLyB1cCB0byB0aGUgbmV4dCBoZWFkaW5nIG9yIGRpdiBlbGVtZW50CiAgd3JhcF9pbXBsaWNpdF9zbGlkZXM6IGZ1bmN0aW9uICgpIHsKICAgIHZhciBpLCBoZWFkaW5nLCBub2RlLCBuZXh0LCBkaXY7CiAgICB2YXIgaGVhZGluZ3MgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaDEiKTsKCiAgICBpZiAoIWhlYWRpbmdzKQogICAgICByZXR1cm47CgogICAgZm9yIChpID0gMDsgaSA8IGhlYWRpbmdzLmxlbmd0aDsgKytpKQogICAgewogICAgICBoZWFkaW5nID0gaGVhZGluZ3NbaV07CgogICAgICBpZiAoaGVhZGluZy5wYXJlbnROb2RlICE9IGRvY3VtZW50LmJvZHkpCiAgICAgICAgY29udGludWU7CgogICAgICBub2RlID0gaGVhZGluZy5uZXh0U2libGluZzsKCiAgICAgIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgICB0aGlzLmFkZF9jbGFzcyhkaXYsICJzbGlkZSIpOwogICAgICBkb2N1bWVudC5ib2R5LnJlcGxhY2VDaGlsZChkaXYsIGhlYWRpbmcpOwogICAgICBkaXYuYXBwZW5kQ2hpbGQoaGVhZGluZyk7CgogICAgICB3aGlsZSAobm9kZSkKICAgICAgewogICAgICAgIGlmIChub2RlLm5vZGVUeXBlID09IDEpIC8vIGFuIGVsZW1lbnQKICAgICAgICB7CiAgICAgICAgICAgaWYgKG5vZGUubm9kZU5hbWUgPT0gIkgxIiB8fCBub2RlLm5vZGVOYW1lID09ICJoMSIpCiAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgaWYgKG5vZGUubm9kZU5hbWUgPT0gIkRJViIgfHwgbm9kZS5ub2RlTmFtZSA9PSAiZGl2IikKICAgICAgICAgICB7CiAgICAgICAgICAgICBpZiAodGhpcy5oYXNfY2xhc3Mobm9kZSwgInNsaWRlIikpCiAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgIGlmICh0aGlzLmhhc19jbGFzcyhub2RlLCAiaGFuZG91dCIpKQogICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBuZXh0ID0gbm9kZS5uZXh0U2libGluZzsKICAgICAgICBub2RlID0gZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChub2RlKTsKICAgICAgICBkaXYuYXBwZW5kQ2hpbGQobm9kZSk7CiAgICAgICAgbm9kZSA9IG5leHQ7CiAgICAgIH0gCiAgICB9CiAgfSwKCiAgYXR0YWNoX3RvdWNoX2hhbmRlcnM6IGZ1bmN0aW9uKHNsaWRlcykKICB7CiAgICB2YXIgaSwgc2xpZGU7CgogICAgZm9yIChpID0gMDsgaSA8IHNsaWRlcy5sZW5ndGg7ICsraSkKICAgIHsKICAgICAgc2xpZGUgPSBzbGlkZXNbaV07CiAgICAgIHRoaXMuYWRkX2xpc3RlbmVyKHNsaWRlLCAidG91Y2hzdGFydCIsIHRoaXMudG91Y2hzdGFydCk7CiAgICAgIHRoaXMuYWRkX2xpc3RlbmVyKHNsaWRlLCAidG91Y2htb3ZlIiwgdGhpcy50b3VjaG1vdmUpOwogICAgICB0aGlzLmFkZF9saXN0ZW5lcihzbGlkZSwgInRvdWNoZW5kIiwgdGhpcy50b3VjaGVuZCk7CiAgICB9CiAgfSwKCi8vIHJldHVybiBuZXcgYXJyYXkgb2YgYWxsIHNsaWRlcwogIGNvbGxlY3Rfc2xpZGVzOiBmdW5jdGlvbiAoKSB7CiAgICB2YXIgc2xpZGVzID0gbmV3IEFycmF5KCk7CiAgICB2YXIgZGl2cyA9IGRvY3VtZW50LmJvZHkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImRpdiIpOwoKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGl2cy5sZW5ndGg7ICsraSkKICAgIHsKICAgICAgZGl2ID0gZGl2cy5pdGVtKGkpOwoKICAgICAgaWYgKHRoaXMuaGFzX2NsYXNzKGRpdiwgInNsaWRlIikpCiAgICAgIHsKICAgICAgICAvLyBhZGQgc2xpZGUgdG8gY29sbGVjdGlvbgogICAgICAgIHNsaWRlc1tzbGlkZXMubGVuZ3RoXSA9IGRpdjsKCiAgICAgICAgLy8gaGlkZSBlYWNoIHNsaWRlIGFzIGl0IGlzIGZvdW5kCiAgICAgICAgdGhpcy5hZGRfY2xhc3MoZGl2LCAiaGlkZGVuIik7CgogICAgICAgIC8vIGFkZCBkdW1teSA8YnIvPiBhdCBlbmQgZm9yIHNjcm9sbGluZyBoYWNrCiAgICAgICAgdmFyIG5vZGUxID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnIiKTsKICAgICAgICBkaXYuYXBwZW5kQ2hpbGQobm9kZTEpOwogICAgICAgIHZhciBub2RlMiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJyIik7CiAgICAgICAgZGl2LmFwcGVuZENoaWxkKG5vZGUyKTsKICAgICAgfQogICAgICBlbHNlIGlmICh0aGlzLmhhc19jbGFzcyhkaXYsICJiYWNrZ3JvdW5kIikpCiAgICAgIHsgIC8vIHdvcmsgYXJvdW5kIGZvciBGaXJlZm94IFNWRyByZWxvYWQgYnVnCiAgICAgICAgLy8gd2hpY2ggb3RoZXJ3aXNlIHJlcGxhY2VzIDFzdCBTVkcgZ3JhcGhpYyB3aXRoIDJuZAogICAgICAgIGRpdi5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIjsKICAgICAgfQogICAgfQoKICAgIHRoaXMuc2xpZGVzID0gc2xpZGVzOwogIH0sCgogIC8vIHJldHVybiBuZXcgYXJyYXkgb2YgYWxsIDxkaXYgY2xhc3M9ImhhbmRvdXQiPgogIGNvbGxlY3Rfbm90ZXM6IGZ1bmN0aW9uICgpIHsKICAgIHZhciBub3RlcyA9IG5ldyBBcnJheSgpOwogICAgdmFyIGRpdnMgPSBkb2N1bWVudC5ib2R5LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJkaXYiKTsKCiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRpdnMubGVuZ3RoOyArK2kpCiAgICB7CiAgICAgIGRpdiA9IGRpdnMuaXRlbShpKTsKCiAgICAgIGlmICh0aGlzLmhhc19jbGFzcyhkaXYsICJoYW5kb3V0IikpCiAgICAgIHsKICAgICAgICAvLyBhZGQgbm90ZSB0byBjb2xsZWN0aW9uCiAgICAgICAgbm90ZXNbbm90ZXMubGVuZ3RoXSA9IGRpdjsKCiAgICAgICAgLy8gYW5kIGhpZGUgaXQKICAgICAgICB0aGlzLmFkZF9jbGFzcyhkaXYsICJoaWRkZW4iKTsKICAgICAgfQogICAgfQoKICAgIHRoaXMubm90ZXMgPSBub3RlczsKICB9LAoKICAvLyByZXR1cm4gbmV3IGFycmF5IG9mIGFsbCA8ZGl2IGNsYXNzPSJiYWNrZ3JvdW5kIj4KICAvLyBpbmNsdWRpbmcgbmFtZWQgYmFja2dyb3VuZHMgZS5nLiBjbGFzcz0iYmFja2dyb3VuZCB0aXRsZXBhZ2UiCiAgY29sbGVjdF9iYWNrZ3JvdW5kczogZnVuY3Rpb24gKCkgewogICAgdmFyIGJhY2tncm91bmRzID0gbmV3IEFycmF5KCk7CiAgICB2YXIgZGl2cyA9IGRvY3VtZW50LmJvZHkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImRpdiIpOwoKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGl2cy5sZW5ndGg7ICsraSkKICAgIHsKICAgICAgZGl2ID0gZGl2cy5pdGVtKGkpOwoKICAgICAgaWYgKHRoaXMuaGFzX2NsYXNzKGRpdiwgImJhY2tncm91bmQiKSkKICAgICAgewogICAgICAgIC8vIGFkZCBiYWNrZ3JvdW5kIHRvIGNvbGxlY3Rpb24KICAgICAgICBiYWNrZ3JvdW5kc1tiYWNrZ3JvdW5kcy5sZW5ndGhdID0gZGl2OwoKICAgICAgICAvLyBhbmQgaGlkZSBpdAogICAgICAgIHRoaXMuYWRkX2NsYXNzKGRpdiwgImhpZGRlbiIpOwogICAgICB9CiAgICB9CgogICAgdGhpcy5iYWNrZ3JvdW5kcyA9IGJhY2tncm91bmRzOwogIH0sCgogIC8vIHNldCBjbGljayBoYW5kbGVycyBvbiBhbGwgYW5jaG9ycwogIHBhdGNoX2FuY2hvcnM6IGZ1bmN0aW9uICgpIHsKICAgIHZhciBzZWxmID0gdzNjX3NsaWR5OwogICAgdmFyIGhhbmRsZXIgPSBmdW5jdGlvbiAoZXZlbnQpIHsKICAgICAgLy8gY29tcGFyZSB0aGlzLmhyZWYgd2l0aCBsb2NhdGlvbi5ocmVmCiAgICAgIC8vIGZvciBsaW5rIHRvIGFub3RoZXIgc2xpZGUgaW4gdGhpcyBkb2MKCiAgICAgIGlmIChzZWxmLnBhZ2VfYWRkcmVzcyh0aGlzLmhyZWYpID09IHNlbGYucGFnZV9hZGRyZXNzKGxvY2F0aW9uLmhyZWYpKQogICAgICB7CiAgICAgICAgLy8geWVzLCBzbyBmaW5kIG5ldyBzbGlkZSBudW1iZXIKICAgICAgICB2YXIgbmV3c2xpZGVudW0gPSBzZWxmLmZpbmRfc2xpZGVfbnVtYmVyKHRoaXMuaHJlZik7CgogICAgICAgIGlmIChuZXdzbGlkZW51bSAhPSBzZWxmLnNsaWRlX251bWJlcikKICAgICAgICB7CiAgICAgICAgICB2YXIgc2xpZGUgPSBzZWxmLnNsaWRlc1tzZWxmLnNsaWRlX251bWJlcl07CiAgICAgICAgICBzZWxmLmhpZGVfc2xpZGUoc2xpZGUpOwogICAgICAgICAgc2VsZi5zbGlkZV9udW1iZXIgPSBuZXdzbGlkZW51bTsKICAgICAgICAgIHNsaWRlID0gc2VsZi5zbGlkZXNbc2VsZi5zbGlkZV9udW1iZXJdOwogICAgICAgICAgc2VsZi5zaG93X3NsaWRlKHNsaWRlKTsKICAgICAgICAgIHNlbGYuc2V0X2xvY2F0aW9uKCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGVsc2UKICAgICAgICB3M2Nfc2xpZHkuc3RvcF9wcm9wYWdhdGlvbihldmVudCk7CgovLyAgICAgIGVsc2UgaWYgKHRoaXMudGFyZ2V0ID09IG51bGwpCi8vICAgICAgICBsb2NhdGlvbi5ocmVmID0gdGhpcy5ocmVmOwoKICAgICAgdGhpcy5ibHVyKCk7CiAgICAgIHNlbGYuZGlzYWJsZV9zbGlkZV9jbGljayA9IHRydWU7CiAgICB9OwoKICAgIHZhciBhbmNob3JzID0gZG9jdW1lbnQuYm9keS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYSIpOwoKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW5jaG9ycy5sZW5ndGg7ICsraSkKICAgIHsKICAgICAgaWYgKHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKQogICAgICAgIGFuY2hvcnNbaV0uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBoYW5kbGVyLCBmYWxzZSk7CiAgICAgIGVsc2UKICAgICAgICBhbmNob3JzW2ldLmF0dGFjaEV2ZW50KCJvbmNsaWNrIiwgaGFuZGxlcik7CiAgICB9CiAgfSwKCiAgLy8gIyMjIENIRUNLIE1FICMjIyBzZWUgd2hpY2ggZnVuY3Rpb25zIGFyZSBpbnZva2VkIHZpYSBzZXRUaW1lb3V0CiAgLy8gZWl0aGVyIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgZm9yIHVzZSBvZiB3M2Nfc2xpZHkgdnMgdGhpcwogIHNob3dfc2xpZGVfbnVtYmVyOiBmdW5jdGlvbiAoKSB7CiAgICB2YXIgdGltZXIgPSB3M2Nfc2xpZHkuZ2V0X3RpbWVyKCk7CiAgICB3M2Nfc2xpZHkuc2xpZGVfbnVtYmVyX2VsZW1lbnQuaW5uZXJIVE1MID0gdGltZXIgKyB3M2Nfc2xpZHkubG9jYWxpemUoInNsaWRlIikgKyAiICIgKwogICAgICAgICAgICh3M2Nfc2xpZHkuc2xpZGVfbnVtYmVyICsgMSkgKyAiLyIgKyB3M2Nfc2xpZHkuc2xpZGVzLmxlbmd0aDsKICB9LAoKICAvLyBldmVyeSAyMDBtUyBjaGVjayBpZiB0aGUgbG9jYXRpb24gaGFzIGJlZW4gY2hhbmdlZCBhcyBhCiAgLy8gcmVzdWx0IG9mIHRoZSB1c2VyIGFjdGl2YXRpbmcgdGhlIEJhY2sgYnV0dG9uL21lbnUgaXRlbQogIC8vIGRvZXNuJ3Qgd29yayBmb3IgT3BlcmEgPCA5LjUKICBjaGVja19sb2NhdGlvbjogZnVuY3Rpb24gKCkgewogICAgdmFyIGhhc2ggPSBsb2NhdGlvbi5oYXNoOwoKICAgIGlmICh3M2Nfc2xpZHkuc2xpZGVfbnVtYmVyID4gMCAmJiAoaGFzaCA9PSAiIiB8fCBoYXNoID09ICIjIikpCiAgICAgIHczY19zbGlkeS5nb3RvX3NsaWRlKDApOwogICAgZWxzZSBpZiAoaGFzaC5sZW5ndGggPiAyICYmIGhhc2ggIT0gIiMoIisodzNjX3NsaWR5LnNsaWRlX251bWJlcisxKSsiKSIpCiAgICB7CiAgICAgIHZhciBudW0gPSBwYXJzZUludChsb2NhdGlvbi5oYXNoLnN1YnN0cigyKSk7CgogICAgICBpZiAoIWlzTmFOKG51bSkpCiAgICAgICAgdzNjX3NsaWR5LmdvdG9fc2xpZGUobnVtLTEpOwogICAgfQoKICAgIGlmICh3M2Nfc2xpZHkudGltZV9sZWZ0ICYmIHczY19zbGlkeS5zbGlkZV9udW1iZXIgPiAwKQogICAgewogICAgICB3M2Nfc2xpZHkuc2hvd19zbGlkZV9udW1iZXIoKTsKCiAgICAgIGlmICh3M2Nfc2xpZHkudGltZV9sZWZ0ID4gMCkKICAgICAgICB3M2Nfc2xpZHkudGltZV9sZWZ0IC09IDIwMDsKICAgIH0gCiAgfSwKCiAgZ2V0X3RpbWVyOiBmdW5jdGlvbiAoKSB7CiAgICB2YXIgdGltZXIgPSAiIjsKICAgIGlmICh3M2Nfc2xpZHkudGltZV9sZWZ0KQogICAgewogICAgICB2YXIgbWlucywgc2VjczsKICAgICAgc2VjcyA9IE1hdGguZmxvb3IodzNjX3NsaWR5LnRpbWVfbGVmdC8xMDAwKTsKICAgICAgbWlucyA9IE1hdGguZmxvb3Ioc2VjcyAvIDYwKTsKICAgICAgc2VjcyA9IHNlY3MgJSA2MDsKICAgICAgdGltZXIgPSAobWlucyA/IG1pbnMrIm0iIDogIiIpICsgc2VjcyArICJzICI7CiAgICB9CgogICAgcmV0dXJuIHRpbWVyOwogIH0sCgogIC8vIHRoaXMgZG9lc24ndCBwdXNoIGxvY2F0aW9uIG9udG8gaGlzdG9yeSBzdGFjayBmb3IgSUUKICAvLyBmb3Igd2hpY2ggYSBoaWRkZW4gaWZyYW1lIGhhY2sgaXMgbmVlZGVkOiBsb2FkIHBhZ2UgaW50bwogIC8vIHRoZSBpZnJhbWUgd2l0aCBzY3JpcHQgdGhhdCBzZXQncyBwYXJlbnQncyBsb2NhdGlvbi5oYXNoCiAgLy8gYnV0IHRoYXQgd29uJ3Qgd29yayBmb3Igc3RhbmRhbG9uZSB1c2UgdW5sZXNzIHdlIGNhbgogIC8vIGNyZWF0ZSB0aGUgcGFnZSBkeW5hbWljYWxseSB2aWEgYSBqYXZhc2NyaXB0OiBVUkwKICAvLyAjIyMgdXNlIGhpc3RvcnkucHVzaFN0YXRlIGlmIGF2YWlsYWJsZQogIHNldF9sb2NhdGlvbjogZnVuY3Rpb24gKCkgewogICAgIHZhciB1cmkgPSB3M2Nfc2xpZHkucGFnZV9hZGRyZXNzKGxvY2F0aW9uLmhyZWYpOwogICAgIHZhciBoYXNoID0gIiMoIiArICh3M2Nfc2xpZHkuc2xpZGVfbnVtYmVyKzEpICsgIikiOwoKICAgICBpZiAodzNjX3NsaWR5LnNsaWRlX251bWJlciA+PSAwKQogICAgICAgdXJpID0gdXJpICsgaGFzaDsKCiAgICAgaWYgKHR5cGVvZihoaXN0b3J5LnB1c2hTdGF0ZSkgIT0gInVuZGVmaW5lZCIgJiYgbG9jYXRpb24ucHJvdG9jb2wgIT09ICJmaWxlOiIpCiAgICAgewogICAgICAgZG9jdW1lbnQudGl0bGUgPSB3M2Nfc2xpZHkudGl0bGUgKyAiICgiICsgKHczY19zbGlkeS5zbGlkZV9udW1iZXIrMSkgKyAiKSI7CiAgICAgICBoaXN0b3J5LnB1c2hTdGF0ZSgwLCBkb2N1bWVudC50aXRsZSwgaGFzaCk7CiAgICAgICB3M2Nfc2xpZHkuc2hvd19zbGlkZV9udW1iZXIoKTsKICAgICAgIHczY19zbGlkeS5ub3RpZnlfb2JzZXJ2ZXJzKCk7CiAgICAgICByZXR1cm47CiAgICAgfQoKICAgICBpZiAodzNjX3NsaWR5LmllICYmICh3M2Nfc2xpZHkuaWU2IHx8IHczY19zbGlkeS5pZTcpKQogICAgICAgdzNjX3NsaWR5LnB1c2hfaGFzaChoYXNoKTsKCiAgICAgaWYgKHVyaSAhPSBsb2NhdGlvbi5ocmVmKSAvLyAmJiAha2h0bWwKICAgICAgICBsb2NhdGlvbi5ocmVmID0gdXJpOwoKICAgICBpZiAodGhpcy5raHRtbCkKICAgICAgICBoYXNoID0gIigiICsgKHczY19zbGlkeS5zbGlkZV9udW1iZXIrMSkgKyAiKSI7CgogICAgIGlmICghdGhpcy5pZSAmJiBsb2NhdGlvbi5oYXNoICE9IGhhc2ggJiYgbG9jYXRpb24uaGFzaCAhPSAiIikKICAgICAgIGxvY2F0aW9uLmhhc2ggPSBoYXNoOwoKICAgICBkb2N1bWVudC50aXRsZSA9IHczY19zbGlkeS50aXRsZSArICIgKCIgKyAodzNjX3NsaWR5LnNsaWRlX251bWJlcisxKSArICIpIjsKICAgICB3M2Nfc2xpZHkuc2hvd19zbGlkZV9udW1iZXIoKTsKICAgICB3M2Nfc2xpZHkubm90aWZ5X29ic2VydmVycygpOwogIH0sCgogIG5vdGlmeV9vYnNlcnZlcnM6IGZ1bmN0aW9uICgpCiAgewogICAgdmFyIHNsaWRlID0gdGhpcy5zbGlkZXNbdGhpcy5zbGlkZV9udW1iZXJdOwoKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5vYnNlcnZlcnMubGVuZ3RoOyArK2kpCiAgICAgIHRoaXMub2JzZXJ2ZXJzW2ldKHRoaXMuc2xpZGVfbnVtYmVyKzEsIHRoaXMuZmluZF9oZWFkaW5nKHNsaWRlKS5pbm5lclRleHQsIGxvY2F0aW9uLmhyZWYpOwogIH0sCgogIGFkZF9vYnNlcnZlcjogZnVuY3Rpb24gKG9ic2VydmVyKQogIHsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5vYnNlcnZlcnMubGVuZ3RoOyArK2kpCiAgICB7CiAgICAgIGlmIChvYnNlcnZlciA9PSB0aGlzLm9ic2VydmVyc1tpXSkKICAgICAgICByZXR1cm47CiAgICB9CgogICAgdGhpcy5vYnNlcnZlcnMucHVzaChvYnNlcnZlcik7CiAgfSwKCiAgcmVtb3ZlX29ic2VydmVyOiBmdW5jdGlvbiAobykKICB7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMub2JzZXJ2ZXJzLmxlbmd0aDsgKytpKQogICAgewogICAgICBpZiAob2JzZXJ2ZXIgPT0gdGhpcy5vYnNlcnZlcnNbaV0pCiAgICAgIHsKICAgICAgICB0aGlzLm9ic2VydmVycy5zcGxpY2UoaSwxKTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogIH0sCgogIHBhZ2VfYWRkcmVzczogZnVuY3Rpb24gKHVyaSkgewogICAgdmFyIGkgPSB1cmkuaW5kZXhPZigiIyIpOwoKICAgIGlmIChpIDwgMCkKICAgICAgaSA9IHVyaS5pbmRleE9mKCIlMjMiKTsKCiAgICAvLyBjaGVjayBpZiBhbmNob3IgaXMgZW50aXJlIHBhZ2UKCiAgICBpZiAoaSA8IDApCiAgICAgIHJldHVybiB1cmk7ICAvLyB5ZXMKCiAgICByZXR1cm4gdXJpLnN1YnN0cigwLCBpKTsKICB9LAoKICAvLyBvbmx5IHVzZWQgZm9yIElFNiBhbmQgSUU3CiAgb25fZnJhbWVfbG9hZGVkOiBmdW5jdGlvbiAoaGFzaCkgewogICAgbG9jYXRpb24uaGFzaCA9IGhhc2g7CiAgICB2YXIgdXJpID0gdzNjX3NsaWR5LnBhZ2VfYWRkcmVzcyhsb2NhdGlvbi5ocmVmKTsKICAgIGxvY2F0aW9uLmhyZWYgPSB1cmkgKyBoYXNoOwogIH0sCgogIC8vIGhpc3RvcnkgaGFjayB3aXRoIHRoYW5rcyB0byBCZXJ0cmFuZCBMZSBSb3kKICBwdXNoX2hhc2g6IGZ1bmN0aW9uIChoYXNoKSB7CiAgICBpZiAoaGFzaCA9PSAiIikgaGFzaCA9ICIjKDEpIjsKICAgICAgd2luZG93LmxvY2F0aW9uLmhhc2ggPSBoYXNoOwoKICAgIHZhciBkb2MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaGlzdG9yeUZyYW1lIikuY29udGVudFdpbmRvdy5kb2N1bWVudDsKICAgIGRvYy5vcGVuKCJqYXZhc2NyaXB0Oic8aHRtbD48L2h0bWw+JyIpOwogICAgZG9jLndyaXRlKCI8aHRtbD48aGVhZD48c2NyaXB0IHR5cGU9XCJ0ZXh0L2phdmFzY3JpcHRcIj53aW5kb3cucGFyZW50LnczY19zbGlkeS5vbl9mcmFtZV9sb2FkZWQoJyIrCiAgICAgIChoYXNoKSArICInKTs8L3NjcmlwdD48L2hlYWQ+PGJvZHk+aGVsbG8gbXVtPC9ib2R5PjwvaHRtbD4iKTsKICAgICAgZG9jLmNsb3NlKCk7CiAgfSwKCiAgLy8gZmluZCBjdXJyZW50IHNsaWRlIGJhc2VkIHVwb24gbG9jYXRpb24KICAvLyBmaXJzdCBmaW5kIHRhcmdldCBhbmNob3IgYW5kIHRoZW4gbG9vawogIC8vIGZvciBhc3NvY2lhdGVkIGRpdiBlbGVtZW50IGVuY2xvc2luZyBpdAogIC8vIGZpbmFsbHkgbWFwIHRoYXQgdG8gc2xpZGUgbnVtYmVyCiAgZmluZF9zbGlkZV9udW1iZXI6IGZ1bmN0aW9uICh1cmkpIHsKICAgIC8vIGZpcnN0IGdldCBhbmNob3IgZnJvbSBwYWdlIGxvY2F0aW9uCgogICAgdmFyIGkgPSB1cmkuaW5kZXhPZigiIyIpOwoKICAgIC8vIGNoZWNrIGlmIGFuY2hvciBpcyBlbnRpcmUgcGFnZQogICAgaWYgKGkgPCAwKQogICAgICByZXR1cm4gMDsgIC8vIHllcwoKICAgIHZhciBhbmNob3IgPSB1bmVzY2FwZSh1cmkuc3Vic3RyKGkrMSkpOwoKICAgIC8vIG5vdyB1c2UgYW5jaG9yIGFzIFhNTCBJRCB0byBmaW5kIHRhcmdldAogICAgdmFyIHRhcmdldCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGFuY2hvcik7CgogICAgaWYgKCF0YXJnZXQpCiAgICB7CiAgICAgIC8vIGRvZXMgYW5jaG9yIGxvb2sgbGlrZSAiKDIpIiBmb3Igc2xpZGUgMiA/PwogICAgICAvLyB3aGVyZSBmaXJzdCBzbGlkZSBpcyAoMSkKICAgICAgdmFyIHJlID0gL1woKFxkKStcKS87CgogICAgICBpZiAoYW5jaG9yLm1hdGNoKHJlKSkKICAgICAgewogICAgICAgIHZhciBudW0gPSBwYXJzZUludChhbmNob3Iuc3Vic3RyaW5nKDEsIGFuY2hvci5sZW5ndGgtMSkpOwoKICAgICAgICBpZiAobnVtID4gdGhpcy5zbGlkZXMubGVuZ3RoKQogICAgICAgICAgbnVtID0gMTsKCiAgICAgICAgaWYgKC0tbnVtIDwgMCkKICAgICAgICAgIG51bSA9IDA7CgogICAgICAgIHJldHVybiBudW07CiAgICAgIH0KCiAgICAgIC8vIGFjY2VwdCBbMl0gZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5CiAgICAgIHJlID0gL1xbKFxkKStcXS87CgogICAgICBpZiAoYW5jaG9yLm1hdGNoKHJlKSkKICAgICAgewogICAgICAgICB2YXIgbnVtID0gcGFyc2VJbnQoYW5jaG9yLnN1YnN0cmluZygxLCBhbmNob3IubGVuZ3RoLTEpKTsKCiAgICAgICAgIGlmIChudW0gPiB0aGlzLnNsaWRlcy5sZW5ndGgpCiAgICAgICAgICAgIG51bSA9IDE7CgogICAgICAgICBpZiAoLS1udW0gPCAwKQogICAgICAgICAgICBudW0gPSAwOwoKICAgICAgICAgcmV0dXJuIG51bTsKICAgICAgfQoKICAgICAgLy8gb2ggZGVhciB1bmtub3duIGFuY2hvcgogICAgICByZXR1cm4gMDsKICAgIH0KCiAgICAvLyBzZWFyY2ggZm9yIGVuY2xvc2luZyBzbGlkZQoKICAgIHdoaWxlICh0cnVlKQogICAgewogICAgICAvLyBicm93c2VyIGNvZXJjZXMgaHRtbCBlbGVtZW50cyB0byB1cHBlcmNhc2UhCiAgICAgIGlmICh0YXJnZXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PSAiZGl2IiAmJgogICAgICAgICAgICB0aGlzLmhhc19jbGFzcyh0YXJnZXQsICJzbGlkZSIpKQogICAgICB7CiAgICAgICAgLy8gZm91bmQgdGhlIHNsaWRlIGVsZW1lbnQKICAgICAgICBicmVhazsKICAgICAgfQoKICAgICAgLy8gb3RoZXJ3aXNlIHRyeSBwYXJlbnQgZWxlbWVudCBpZiBhbnkKCiAgICAgIHRhcmdldCA9IHRhcmdldC5wYXJlbnROb2RlOwoKICAgICAgaWYgKCF0YXJnZXQpCiAgICAgIHsKICAgICAgICByZXR1cm4gMDsgICAvLyBubyBsdWNrIQogICAgICB9CiAgICB9OwoKICAgIGZvciAoaSA9IDA7IGkgPCBzbGlkZXMubGVuZ3RoOyArK2kpCiAgICB7CiAgICAgIGlmIChzbGlkZXNbaV0gPT0gdGFyZ2V0KQogICAgICAgIHJldHVybiBpOyAgLy8gc3VjY2VzcwogICAgfQoKICAgIC8vIG9oIGRlYXIgc3RpbGwgbm8gbHVjawogICAgcmV0dXJuIDA7CiAgfSwKCiAgcHJldmlvdXNfc2xpZGU6IGZ1bmN0aW9uIChpbmNyZW1lbnRhbCkgewogICAgaWYgKCF3M2Nfc2xpZHkudmlld19hbGwpCiAgICB7CiAgICAgIHZhciBzbGlkZTsKCiAgICAgIGlmICgoaW5jcmVtZW50YWwgfHwgdzNjX3NsaWR5LnNsaWRlX251bWJlciA9PSAwKSAmJiB3M2Nfc2xpZHkubGFzdF9zaG93biAhPSBudWxsKQogICAgICB7CiAgICAgICAgdzNjX3NsaWR5Lmxhc3Rfc2hvd24gPSB3M2Nfc2xpZHkuaGlkZV9wcmV2aW91c19pdGVtKHczY19zbGlkeS5sYXN0X3Nob3duKTsKICAgICAgICB3M2Nfc2xpZHkuc2V0X2Vvc19zdGF0dXMoZmFsc2UpOwogICAgICB9CiAgICAgIGVsc2UgaWYgKHczY19zbGlkeS5zbGlkZV9udW1iZXIgPiAwKQogICAgICB7CiAgICAgICAgc2xpZGUgPSB3M2Nfc2xpZHkuc2xpZGVzW3czY19zbGlkeS5zbGlkZV9udW1iZXJdOwogICAgICAgIHczY19zbGlkeS5oaWRlX3NsaWRlKHNsaWRlKTsKCiAgICAgICAgdzNjX3NsaWR5LnNsaWRlX251bWJlciA9IHczY19zbGlkeS5zbGlkZV9udW1iZXIgLSAxOwogICAgICAgIHNsaWRlID0gdzNjX3NsaWR5LnNsaWRlc1t3M2Nfc2xpZHkuc2xpZGVfbnVtYmVyXTsKICAgICAgICB3M2Nfc2xpZHkuc2V0X3Zpc2liaWxpdHlfYWxsX2luY3JlbWVudGFsKCJ2aXNpYmxlIik7CiAgICAgICAgdzNjX3NsaWR5Lmxhc3Rfc2hvd24gPSB3M2Nfc2xpZHkucHJldmlvdXNfaW5jcmVtZW50YWxfaXRlbShudWxsKTsKICAgICAgICB3M2Nfc2xpZHkuc2V0X2Vvc19zdGF0dXModHJ1ZSk7CiAgICAgICAgdzNjX3NsaWR5LnNob3dfc2xpZGUoc2xpZGUpOwogICAgICB9CgogICAgICB3M2Nfc2xpZHkuc2V0X2xvY2F0aW9uKCk7CgogICAgICBpZiAoIXczY19zbGlkeS5uc19wb3MpCiAgICAgICAgdzNjX3NsaWR5LnJlZnJlc2hfdG9vbGJhcigyMDApOwogICAgfQogIH0sCgogIG5leHRfc2xpZGU6IGZ1bmN0aW9uIChpbmNyZW1lbnRhbCkgewogICAgaWYgKCF3M2Nfc2xpZHkudmlld19hbGwpCiAgICB7CiAgICAgIHZhciBzbGlkZSwgbGFzdCA9IHczY19zbGlkeS5sYXN0X3Nob3duOwoKICAgICAgaWYgKGluY3JlbWVudGFsIHx8IHczY19zbGlkeS5zbGlkZV9udW1iZXIgPT0gdzNjX3NsaWR5LnNsaWRlcy5sZW5ndGggLSAxKQogICAgICAgICB3M2Nfc2xpZHkubGFzdF9zaG93biA9IHczY19zbGlkeS5yZXZlYWxfbmV4dF9pdGVtKHczY19zbGlkeS5sYXN0X3Nob3duKTsKCiAgICAgIGlmICgoIWluY3JlbWVudGFsIHx8IHczY19zbGlkeS5sYXN0X3Nob3duID09IG51bGwpICYmCiAgICAgICAgICAgICB3M2Nfc2xpZHkuc2xpZGVfbnVtYmVyIDwgdzNjX3NsaWR5LnNsaWRlcy5sZW5ndGggLSAxKQogICAgICB7CiAgICAgICAgIHNsaWRlID0gdzNjX3NsaWR5LnNsaWRlc1t3M2Nfc2xpZHkuc2xpZGVfbnVtYmVyXTsKICAgICAgICAgdzNjX3NsaWR5LmhpZGVfc2xpZGUoc2xpZGUpOwoKICAgICAgICAgdzNjX3NsaWR5LnNsaWRlX251bWJlciA9IHczY19zbGlkeS5zbGlkZV9udW1iZXIgKyAxOwogICAgICAgICBzbGlkZSA9IHczY19zbGlkeS5zbGlkZXNbdzNjX3NsaWR5LnNsaWRlX251bWJlcl07CiAgICAgICAgIHczY19zbGlkeS5sYXN0X3Nob3duID0gbnVsbDsKICAgICAgICAgdzNjX3NsaWR5LnNldF92aXNpYmlsaXR5X2FsbF9pbmNyZW1lbnRhbCgiaGlkZGVuIik7CiAgICAgICAgIHczY19zbGlkeS5zaG93X3NsaWRlKHNsaWRlKTsKICAgICAgfQogICAgICBlbHNlIGlmICghdzNjX3NsaWR5Lmxhc3Rfc2hvd24pCiAgICAgIHsKICAgICAgICAgaWYgKGxhc3QgJiYgaW5jcmVtZW50YWwpCiAgICAgICAgICAgdzNjX3NsaWR5Lmxhc3Rfc2hvd24gPSBsYXN0OwogICAgICB9CgogICAgICB3M2Nfc2xpZHkuc2V0X2xvY2F0aW9uKCk7CgogICAgICB3M2Nfc2xpZHkuc2V0X2Vvc19zdGF0dXMoIXczY19zbGlkeS5uZXh0X2luY3JlbWVudGFsX2l0ZW0odzNjX3NsaWR5Lmxhc3Rfc2hvd24pKTsKCiAgICAgIGlmICghdzNjX3NsaWR5Lm5zX3BvcykKICAgICAgICAgdzNjX3NsaWR5LnJlZnJlc2hfdG9vbGJhcigyMDApOwogICAgIH0KICB9LAoKICAvLyB0byBmaXJzdCBzbGlkZSB3aXRoIG5vdGhpbmcgcmV2ZWFsZWQKICAvLyBpLmUuIHN0YXRlIGF0IHN0YXJ0IG9mIHByZXNlbnRhdGlvbgogIGZpcnN0X3NsaWRlOiBmdW5jdGlvbiAoKSB7CiAgICAgaWYgKCF3M2Nfc2xpZHkudmlld19hbGwpCiAgICAgewogICAgICAgdmFyIHNsaWRlOwoKICAgICAgIGlmICh3M2Nfc2xpZHkuc2xpZGVfbnVtYmVyICE9IDApCiAgICAgICB7CiAgICAgICAgIHNsaWRlID0gdzNjX3NsaWR5LnNsaWRlc1t3M2Nfc2xpZHkuc2xpZGVfbnVtYmVyXTsKICAgICAgICAgdzNjX3NsaWR5LmhpZGVfc2xpZGUoc2xpZGUpOwoKICAgICAgICAgdzNjX3NsaWR5LnNsaWRlX251bWJlciA9IDA7CiAgICAgICAgIHNsaWRlID0gdzNjX3NsaWR5LnNsaWRlc1t3M2Nfc2xpZHkuc2xpZGVfbnVtYmVyXTsKICAgICAgICAgdzNjX3NsaWR5Lmxhc3Rfc2hvd24gPSBudWxsOwogICAgICAgICB3M2Nfc2xpZHkuc2V0X3Zpc2liaWxpdHlfYWxsX2luY3JlbWVudGFsKCJoaWRkZW4iKTsKICAgICAgICAgdzNjX3NsaWR5LnNob3dfc2xpZGUoc2xpZGUpOwogICAgICAgfQoKICAgICAgIHczY19zbGlkeS5zZXRfZW9zX3N0YXR1cygKICAgICAgICAgIXczY19zbGlkeS5uZXh0X2luY3JlbWVudGFsX2l0ZW0odzNjX3NsaWR5Lmxhc3Rfc2hvd24pKTsKICAgICAgIHczY19zbGlkeS5zZXRfbG9jYXRpb24oKTsKICAgICB9CiAgfSwKCiAgLy8gZ290byBsYXN0IHNsaWRlIHdpdGggZXZlcnl0aGluZyByZXZlYWxlZAogIC8vIGkuZS4gc3RhdGUgYXQgZW5kIG9mIHByZXNlbnRhdGlvbgogIGxhc3Rfc2xpZGU6IGZ1bmN0aW9uICgpIHsKICAgIGlmICghdzNjX3NsaWR5LnZpZXdfYWxsKQogICAgewogICAgICB2YXIgc2xpZGU7CgogICAgICB3M2Nfc2xpZHkubGFzdF9zaG93biA9IG51bGw7IC8vcmV2ZWFsTmV4dEl0ZW0obGFzdFNob3duKTsKCiAgICAgIGlmICh3M2Nfc2xpZHkubGFzdF9zaG93biA9PSBudWxsICYmCiAgICAgICAgICB3M2Nfc2xpZHkuc2xpZGVfbnVtYmVyIDwgdzNjX3NsaWR5LnNsaWRlcy5sZW5ndGggLSAxKQogICAgICB7CiAgICAgICAgIHNsaWRlID0gdzNjX3NsaWR5LnNsaWRlc1t3M2Nfc2xpZHkuc2xpZGVfbnVtYmVyXTsKICAgICAgICAgdzNjX3NsaWR5LmhpZGVfc2xpZGUoc2xpZGUpOwogICAgICAgICB3M2Nfc2xpZHkuc2xpZGVfbnVtYmVyID0gdzNjX3NsaWR5LnNsaWRlcy5sZW5ndGggLSAxOwogICAgICAgICBzbGlkZSA9IHczY19zbGlkeS5zbGlkZXNbdzNjX3NsaWR5LnNsaWRlX251bWJlcl07CiAgICAgICAgIHczY19zbGlkeS5zZXRfdmlzaWJpbGl0eV9hbGxfaW5jcmVtZW50YWwoInZpc2libGUiKTsKICAgICAgICAgdzNjX3NsaWR5Lmxhc3Rfc2hvd24gPSB3M2Nfc2xpZHkucHJldmlvdXNfaW5jcmVtZW50YWxfaXRlbShudWxsKTsKCiAgICAgICAgIHczY19zbGlkeS5zaG93X3NsaWRlKHNsaWRlKTsKICAgICAgfQogICAgICBlbHNlCiAgICAgIHsKICAgICAgICAgdzNjX3NsaWR5LnNldF92aXNpYmlsaXR5X2FsbF9pbmNyZW1lbnRhbCgidmlzaWJsZSIpOwogICAgICAgICB3M2Nfc2xpZHkubGFzdF9zaG93biA9IHczY19zbGlkeS5wcmV2aW91c19pbmNyZW1lbnRhbF9pdGVtKG51bGwpOwogICAgICB9CgogICAgICB3M2Nfc2xpZHkuc2V0X2Vvc19zdGF0dXModHJ1ZSk7CiAgICAgIHczY19zbGlkeS5zZXRfbG9jYXRpb24oKTsKICAgIH0KICB9LAoKCiAgLy8gIyMjIGNoZWNrIHRoaXMgYW5kIGNvbnNpZGVyIGFkZC9yZW1vdmUgY2xhc3MKICBzZXRfZW9zX3N0YXR1czogZnVuY3Rpb24gKHN0YXRlKSB7CiAgICBpZiAodGhpcy5lb3MpCiAgICAgIHRoaXMuZW9zLnN0eWxlLmNvbG9yID0gKHN0YXRlID8gInJnYigyNDAsMjQwLDI0MCkiIDogInJlZCIpOwogIH0sCgogIC8vIGZpcnN0IHNsaWRlIGlzIDAKICBnb3RvX3NsaWRlOiBmdW5jdGlvbiAobnVtKSB7CiAgICAvL2FsZXJ0KCJnb2luZyB0byBzbGlkZSAiICsgKG51bSsxKSk7CiAgICB2YXIgc2xpZGUgPSB3M2Nfc2xpZHkuc2xpZGVzW3czY19zbGlkeS5zbGlkZV9udW1iZXJdOwogICAgdzNjX3NsaWR5LmhpZGVfc2xpZGUoc2xpZGUpOwogICAgdzNjX3NsaWR5LnNsaWRlX251bWJlciA9IG51bTsKICAgIHNsaWRlID0gdzNjX3NsaWR5LnNsaWRlc1t3M2Nfc2xpZHkuc2xpZGVfbnVtYmVyXTsKICAgIHczY19zbGlkeS5sYXN0X3Nob3duID0gbnVsbDsKICAgIHczY19zbGlkeS5zZXRfdmlzaWJpbGl0eV9hbGxfaW5jcmVtZW50YWwoImhpZGRlbiIpOwogICAgdzNjX3NsaWR5LnNldF9lb3Nfc3RhdHVzKCF3M2Nfc2xpZHkubmV4dF9pbmNyZW1lbnRhbF9pdGVtKHczY19zbGlkeS5sYXN0X3Nob3duKSk7CiAgICBkb2N1bWVudC50aXRsZSA9IHczY19zbGlkeS50aXRsZSArICIgKCIgKyAodzNjX3NsaWR5LnNsaWRlX251bWJlcisxKSArICIpIjsKICAgIHczY19zbGlkeS5zaG93X3NsaWRlKHNsaWRlKTsKICAgIHczY19zbGlkeS5zaG93X3NsaWRlX251bWJlcigpOwogIH0sCgoKICBzaG93X3NsaWRlOiBmdW5jdGlvbiAoc2xpZGUpIHsKICAgIHRoaXMuc3luY19iYWNrZ3JvdW5kKHNsaWRlKTsKICAgIHRoaXMucmVtb3ZlX2NsYXNzKHNsaWRlLCAiaGlkZGVuIik7CgogICAgLy8gd29yayBhcm91bmQgSUU5IG9iamVjdCByZW5kZXJpbmcgYnVnCiAgICBzZXRUaW1lb3V0KCJ3aW5kb3cuc2Nyb2xsVG8oMCwwKTsiLCAxKTsKICB9LAoKICBoaWRlX3NsaWRlOiBmdW5jdGlvbiAoc2xpZGUpIHsKICAgIHRoaXMuYWRkX2NsYXNzKHNsaWRlLCAiaGlkZGVuIik7CiAgfSwKCiAgc2V0X2ZvY3VzOiBmdW5jdGlvbiAoZWxlbWVudCkKICB7CiAgICBpZiAoZWxlbWVudCkKICAgICAgZWxlbWVudC5mb2N1cygpOwogICAgZWxzZQogICAgewogICAgICB3M2Nfc2xpZHkuaGVscF9hbmNob3IuZm9jdXMoKTsKCiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICAgICAgdzNjX3NsaWR5LmhlbHBfYW5jaG9yLmJsdXIoKTsKICAgICAgfSwgMSk7CiAgICB9CiAgfSwKCiAgLy8gc2hvdyBqdXN0IHRoZSBiYWNrZ3JvdW5kcyBwZXJ0aW5lbnQgdG8gdGhpcyBzbGlkZQogIC8vIHdoZW4gc2xpZGUgYmFja2dyb3VuZC1jb2xvciBpcyB0cmFuc3BhcmVudAogIC8vIHRoaXMgc2hvdWxkIG5vdyB3b3JrIHdpdGggcmdiYSBjb2xvciB2YWx1ZXMKICBzeW5jX2JhY2tncm91bmQ6IGZ1bmN0aW9uIChzbGlkZSkgewogICAgdmFyIGJhY2tncm91bmQ7CiAgICB2YXIgYmdDb2xvcjsKCiAgICBpZiAoc2xpZGUuY3VycmVudFN0eWxlKQogICAgICBiZ0NvbG9yID0gc2xpZGUuY3VycmVudFN0eWxlWyJiYWNrZ3JvdW5kQ29sb3IiXTsKICAgIGVsc2UgaWYgKGRvY3VtZW50LmRlZmF1bHRWaWV3KQogICAgewogICAgICB2YXIgc3R5bGVzID0gZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShzbGlkZSxudWxsKTsKCiAgICAgIGlmIChzdHlsZXMpCiAgICAgICAgYmdDb2xvciA9IHN0eWxlcy5nZXRQcm9wZXJ0eVZhbHVlKCJiYWNrZ3JvdW5kLWNvbG9yIik7CiAgICAgIGVsc2UgLy8gYnJva2VuIGltcGxlbWVudGF0aW9uIHByb2JhYmx5IGR1ZSBTYWZhcmkgb3IgS29ucXVlcm9yCiAgICAgIHsKICAgICAgICAvL2FsZXJ0KCJkZWZlY3RpdmUgaW1wbGVtZW50YXRpb24gb2YgZ2V0Q29tcHV0ZWRTdHlsZSgpIik7CiAgICAgICAgYmdDb2xvciA9ICJ0cmFuc3BhcmVudCI7CiAgICAgIH0KICAgIH0KICAgIGVsc2UKICAgICAgYmdDb2xvciA9PSAidHJhbnNwYXJlbnQiOwoKICAgIGlmIChiZ0NvbG9yID09ICJ0cmFuc3BhcmVudCIgfHwKICAgICAgICBiZ0NvbG9yLmluZGV4T2YoInJnYmEiKSA+PSAwIHx8CiAgICAgICAgYmdDb2xvci5pbmRleE9mKCJvcGFjaXR5IikgPj0gMCkKICAgIHsKICAgICAgdmFyIHNsaWRlQ2xhc3MgPSB0aGlzLmdldF9jbGFzc19saXN0KHNsaWRlKTsKCiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5iYWNrZ3JvdW5kcy5sZW5ndGg7IGkrKykKICAgICAgewogICAgICAgIGJhY2tncm91bmQgPSB0aGlzLmJhY2tncm91bmRzW2ldOwoKICAgICAgICB2YXIgYmdDbGFzcyA9IHRoaXMuZ2V0X2NsYXNzX2xpc3QoYmFja2dyb3VuZCk7CgogICAgICAgIGlmICh0aGlzLm1hdGNoaW5nX2JhY2tncm91bmQoc2xpZGVDbGFzcywgYmdDbGFzcykpCiAgICAgICAgICB0aGlzLnJlbW92ZV9jbGFzcyhiYWNrZ3JvdW5kLCAiaGlkZGVuIik7CiAgICAgICAgZWxzZQogICAgICAgICAgdGhpcy5hZGRfY2xhc3MoYmFja2dyb3VuZCwgImhpZGRlbiIpOwogICAgICB9CiAgICB9CiAgICBlbHNlIC8vIGZvcmNpYmx5IGhpZGUgYWxsIGJhY2tncm91bmRzCiAgICAgIHRoaXMuaGlkZV9iYWNrZ3JvdW5kcygpOwogIH0sCgogIGhpZGVfYmFja2dyb3VuZHM6IGZ1bmN0aW9uICgpIHsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5iYWNrZ3JvdW5kcy5sZW5ndGg7IGkrKykKICAgIHsKICAgICAgYmFja2dyb3VuZCA9IHRoaXMuYmFja2dyb3VuZHNbaV07CiAgICAgIHRoaXMuYWRkX2NsYXNzKGJhY2tncm91bmQsICJoaWRkZW4iKTsKICAgIH0KICB9LAoKICAvLyBjb21wYXJlIGNsYXNzZXMgZm9yIHNsaWRlIGFuZCBiYWNrZ3JvdW5kCiAgbWF0Y2hpbmdfYmFja2dyb3VuZDogZnVuY3Rpb24gKHNsaWRlQ2xhc3MsIGJnQ2xhc3MpIHsKICAgIHZhciBpLCBjb3VudCwgcGF0dGVybiwgcmVzdWx0OwoKICAgIC8vIGRlZmluZSBwYXR0ZXJuIGFzIHJlZ3VsYXIgZXhwcmVzc2lvbgogICAgcGF0dGVybiA9IC9cdysvZzsKCiAgICAvLyBjaGVjayBiYWNrZ3JvdW5kIGNsYXNzIG5hbWVzCiAgICByZXN1bHQgPSBiZ0NsYXNzLm1hdGNoKHBhdHRlcm4pOwoKICAgIGZvciAoaSA9IGNvdW50ID0gMDsgaSA8IHJlc3VsdC5sZW5ndGg7IGkrKykKICAgIHsKICAgICAgaWYgKHJlc3VsdFtpXSA9PSAiaGlkZGVuIikKICAgICAgICBjb250aW51ZTsKCiAgICAgIGlmIChyZXN1bHRbaV0gPT0gImJhY2tncm91bmQiKQoJY29udGludWU7CgogICAgICArK2NvdW50OwogICAgfQoKICAgIGlmIChjb3VudCA9PSAwKSAgLy8gZGVmYXVsdCBtYXRjaAogICAgICByZXR1cm4gdHJ1ZTsKCiAgICAvLyBjaGVjayBmb3IgbWF0Y2hlcyBhbmQgcGxhY2UgcmVzdWx0IGluIGFycmF5CiAgICByZXN1bHQgPSBzbGlkZUNsYXNzLm1hdGNoKHBhdHRlcm4pOwoKICAgIC8vIG5vdyBjaGVjayBpZiBkZXNpcmVkIG5hbWUgaXMgcHJlc2VudCBmb3IgYmFja2dyb3VuZAogICAgZm9yIChpID0gY291bnQgPSAwOyBpIDwgcmVzdWx0Lmxlbmd0aDsgaSsrKQogICAgewogICAgICBpZiAocmVzdWx0W2ldID09ICJoaWRkZW4iKQogICAgICAgIGNvbnRpbnVlOwoKICAgICAgaWYgKHRoaXMuaGFzX3Rva2VuKGJnQ2xhc3MsIHJlc3VsdFtpXSkpCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgcmV0dXJuIGZhbHNlOwogIH0sCgogIHJlc2l6ZWQ6IGZ1bmN0aW9uICgpIHsKICAgICB2YXIgd2lkdGggPSAwOwoKICAgICBpZiAoIHR5cGVvZiggd2luZG93LmlubmVyV2lkdGggKSA9PSAnbnVtYmVyJyApCiAgICAgICB3aWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoOyAgLy8gTm9uIElFIGJyb3dzZXIKICAgICBlbHNlIGlmIChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoKQogICAgICAgd2lkdGggPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGg7ICAvLyBJRTYKICAgICBlbHNlIGlmIChkb2N1bWVudC5ib2R5ICYmIGRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGgpCiAgICAgICB3aWR0aCA9IGRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGg7IC8vIElFNAoKICAgICB2YXIgaGVpZ2h0ID0gMDsKCiAgICAgaWYgKCB0eXBlb2YoIHdpbmRvdy5pbm5lckhlaWdodCApID09ICdudW1iZXInICkKICAgICAgIGhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodDsgIC8vIE5vbiBJRSBicm93c2VyCiAgICAgZWxzZSBpZiAoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50ICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQpCiAgICAgICBoZWlnaHQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0OyAgLy8gSUU2CiAgICAgZWxzZSBpZiAoZG9jdW1lbnQuYm9keSAmJiBkb2N1bWVudC5ib2R5LmNsaWVudEhlaWdodCkKICAgICAgIGhlaWdodCA9IGRvY3VtZW50LmJvZHkuY2xpZW50SGVpZ2h0OyAvLyBJRTQKCiAgICAgaWYgKGhlaWdodCAmJiAod2lkdGgvaGVpZ2h0ID4gMS4wNSoxMDI0Lzc2OCkpCiAgICAgewogICAgICAgd2lkdGggPSBoZWlnaHQgKiAxMDI0LjAvNzY4OwogICAgIH0KCiAgICAgLy8gSUUgZmlyZXMgb25yZXNpemUgZXZlbiB3aGVuIG9ubHkgZm9udCBzaXplIGlzIGNoYW5nZWQhCiAgICAgLy8gc28gd2UgZG8gYSBjaGVjayB0byBhdm9pZCBibG9ja2luZyA8IGFuZCA+IGFjdGlvbnMKICAgICBpZiAod2lkdGggIT0gdzNjX3NsaWR5Lmxhc3Rfd2lkdGggfHwgaGVpZ2h0ICE9IHczY19zbGlkeS5sYXN0X2hlaWdodCkKICAgICB7CiAgICAgICBpZiAod2lkdGggPj0gMTEwMCkKICAgICAgICAgdzNjX3NsaWR5LnNpemVfaW5kZXggPSA1OyAgICAvLyA0CiAgICAgICBlbHNlIGlmICh3aWR0aCA+PSAxMDAwKQogICAgICAgICB3M2Nfc2xpZHkuc2l6ZV9pbmRleCA9IDQ7ICAgIC8vIDMKICAgICAgIGVsc2UgaWYgKHdpZHRoID49IDgwMCkKICAgICAgICAgdzNjX3NsaWR5LnNpemVfaW5kZXggPSAzOyAgICAvLyAyCiAgICAgICBlbHNlIGlmICh3aWR0aCA+PSA2MDApCiAgICAgICAgIHczY19zbGlkeS5zaXplX2luZGV4ID0gMjsgICAgLy8gMQogICAgICAgZWxzZSBpZiAod2lkdGgpCiAgICAgICAgIHczY19zbGlkeS5zaXplX2luZGV4ID0gMDsKCiAgICAgICAvLyBhZGQgaW4gZm9udCBzaXplIGFkanVzdG1lbnQgZnJvbSBtZXRhIGVsZW1lbnQgZS5nLgogICAgICAgLy8gPG1ldGEgbmFtZT0iZm9udC1zaXplLWFkanVzdG1lbnQiIGNvbnRlbnQ9Ii0yIiAvPgogICAgICAgLy8gdXNlZnVsIHdoZW4gc2xpZGVzIGhhdmUgdG9vIG11Y2ggY29udGVudCA7LSkKCiAgICAgICBpZiAoMCA8PSB3M2Nfc2xpZHkuc2l6ZV9pbmRleCArIHczY19zbGlkeS5zaXplX2FkanVzdG1lbnQgJiYKICAgICAgICAgICAgIHczY19zbGlkeS5zaXplX2luZGV4ICsgdzNjX3NsaWR5LnNpemVfYWRqdXN0bWVudCA8IHczY19zbGlkeS5zaXplcy5sZW5ndGgpCiAgICAgICAgIHczY19zbGlkeS5zaXplX2luZGV4ID0gdzNjX3NsaWR5LnNpemVfaW5kZXggKyB3M2Nfc2xpZHkuc2l6ZV9hZGp1c3RtZW50OwoKICAgICAgIC8vIGVuYWJsZXMgY3Jvc3MgYnJvd3NlciB1c2Ugb2YgcmVsYXRpdmUgd2lkdGgvaGVpZ2h0CiAgICAgICAvLyBvbiBvYmplY3QgZWxlbWVudHMgZm9yIHVzZSB3aXRoIFNWRyBhbmQgRmxhc2ggbWVkaWEKICAgICAgIHczY19zbGlkeS5hZGp1c3Rfb2JqZWN0X2RpbWVuc2lvbnMod2lkdGgsIGhlaWdodCk7CgogICAgICAgaWYgKGRvY3VtZW50LmJvZHkuc3R5bGUuZm9udFNpemUgIT0gdzNjX3NsaWR5LnNpemVzW3czY19zbGlkeS5zaXplX2luZGV4XSkKICAgICAgIHsKICAgICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5mb250U2l6ZSA9IHczY19zbGlkeS5zaXplc1t3M2Nfc2xpZHkuc2l6ZV9pbmRleF07CiAgICAgICB9CgogICAgICAgdzNjX3NsaWR5Lmxhc3Rfd2lkdGggPSB3aWR0aDsKICAgICAgIHczY19zbGlkeS5sYXN0X2hlaWdodCA9IGhlaWdodDsKCiAgICAgICAvLyBmb3JjZSByZWZsb3cgdG8gd29yayBhcm91bmQgTW96aWxsYSBidWcKICAgICAgIGlmICh3M2Nfc2xpZHkubnNfcG9zKQogICAgICAgewogICAgICAgICB2YXIgc2xpZGUgPSB3M2Nfc2xpZHkuc2xpZGVzW3czY19zbGlkeS5zbGlkZV9udW1iZXJdOwogICAgICAgICB3M2Nfc2xpZHkuaGlkZV9zbGlkZShzbGlkZSk7CiAgICAgICAgIHczY19zbGlkeS5zaG93X3NsaWRlKHNsaWRlKTsKICAgICAgIH0KCiAgICAgICAvLyBmb3JjZSBjb3JyZWN0IHBvc2l0aW9uaW5nIG9mIHRvb2xiYXIKICAgICAgIHczY19zbGlkeS5yZWZyZXNoX3Rvb2xiYXIoMjAwKTsKICAgICB9CiAgfSwKCiAgc2Nyb2xsZWQ6IGZ1bmN0aW9uICgpIHsKICAgIGlmICh3M2Nfc2xpZHkudG9vbGJhciAmJiAhdzNjX3NsaWR5Lm5zX3BvcyAmJiAhdzNjX3NsaWR5LmllNykKICAgIHsKICAgICAgdzNjX3NsaWR5LmhhY2tfb2Zmc2V0ID0gdzNjX3NsaWR5LnNjcm9sbF94X29mZnNldCgpOwogICAgICAvLyBoaWRlIHRvb2xiYXIKICAgICAgdzNjX3NsaWR5LnRvb2xiYXIuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKCiAgICAgIC8vIG1ha2UgaXQgcmVhcHBlYXIgbGF0ZXIKICAgICAgaWYgKHczY19zbGlkeS5zY3JvbGxoYWNrID09IDAgJiYgIXczY19zbGlkeS52aWV3X2FsbCkKICAgICAgewogICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge3czY19zbGlkeS5zaG93X3Rvb2xiYXIoKTsgfSwgMTAwMCk7CiAgICAgICAgdzNjX3NsaWR5LnNjcm9sbGhhY2sgPSAxOwogICAgICB9CiAgICB9CiAgfSwKCiAgaGlkZV90b29sYmFyOiBmdW5jdGlvbiAoKSB7CiAgICB3M2Nfc2xpZHkuYWRkX2NsYXNzKHczY19zbGlkeS50b29sYmFyLCAiaGlkZGVuIik7CiAgICB3aW5kb3cuZm9jdXMoKTsKICB9LAoKICAvLyB1c2VkIHRvIGVuc3VyZSBJRSByZWZyZXNoZXMgdG9vbGJhciBpbiBjb3JyZWN0IHBvc2l0aW9uCiAgcmVmcmVzaF90b29sYmFyOiBmdW5jdGlvbiAoaW50ZXJ2YWwpIHsKICAgIGlmICghdzNjX3NsaWR5Lm5zX3BvcyAmJiAhdzNjX3NsaWR5LmllNykKICAgIHsKICAgICAgdzNjX3NsaWR5LmhpZGVfdG9vbGJhcigpOwogICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHt3M2Nfc2xpZHkuc2hvd190b29sYmFyKCk7fSwgaW50ZXJ2YWwpOwogICAgfQogIH0sCgogIC8vIHJlc3RvcmVzIHRvb2xiYXIgYWZ0ZXIgc2hvcnQgZGVsYXkKICBzaG93X3Rvb2xiYXI6IGZ1bmN0aW9uICgpIHsKICAgIGlmICh3M2Nfc2xpZHkud2FudF90b29sYmFyKQogICAgewogICAgICB3M2Nfc2xpZHkudG9vbGJhci5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIjsKCiAgICAgIGlmICghdzNjX3NsaWR5Lm5zX3BvcykKICAgICAgewogICAgICAgIC8vIGFkanVzdCBwb3NpdGlvbiB0byBhbGxvdyBmb3Igc2Nyb2xsaW5nCiAgICAgICAgdmFyIHhvZmZzZXQgPSB3M2Nfc2xpZHkuc2Nyb2xsX3hfb2Zmc2V0KCk7CiAgICAgICAgdzNjX3NsaWR5LnRvb2xiYXIuc3R5bGUubGVmdCA9IHhvZmZzZXQ7CiAgICAgICAgdzNjX3NsaWR5LnRvb2xiYXIuc3R5bGUucmlnaHQgPSB4b2Zmc2V0OwoKICAgICAgICAvLyBkZXRlcm1pbmUgdmVydGljYWwgc2Nyb2xsIG9mZnNldAogICAgICAgIC8vdmFyIHlvZmZzZXQgPSBzY3JvbGxZT2Zmc2V0KCk7CgogICAgICAgIC8vIGJvdHRvbSBpcyBkb2MgaGVpZ2h0IC0gd2luZG93IGhlaWdodCAtIHNjcm9sbCBvZmZzZXQKICAgICAgICAvL3ZhciBib3R0b20gPSBkb2N1bWVudEhlaWdodCgpIC0gbGFzdEhlaWdodCAtIHlvZmZzZXQKCiAgICAgICAgLy9pZiAoeW9mZnNldCA+IDAgfHwgZG9jdW1lbnRIZWlnaHQoKSA+IGxhc3RIZWlnaHQpCiAgICAgICAgLy8gICBib3R0b20gKz0gMTY7ICAvLyBhbGxvdyBmb3IgaGVpZ2h0IG9mIHNjcm9sbGJhcgoKICAgICAgICB3M2Nfc2xpZHkudG9vbGJhci5zdHlsZS5ib3R0b20gPSAwOyAvL2JvdHRvbTsKICAgICAgfQoKICAgICAgdzNjX3NsaWR5LnJlbW92ZV9jbGFzcyh3M2Nfc2xpZHkudG9vbGJhciwgImhpZGRlbiIpOwogICAgfQoKICAgIHczY19zbGlkeS5zY3JvbGxoYWNrID0gMDsKCgogICAgLy8gc2V0IHRoZSBrZXlib2FyZCBmb2N1cyB0byB0aGUgaGVscCBsaW5rIG9uIHRoZQogICAgLy8gdG9vbGJhciB0byBlbnN1cmUgdGhhdCBkb2N1bWVudCBoYXMgdGhlIGZvY3VzCiAgICAvLyBJRSBkb2Vzbid0IGFsd2F5cyB3b3JrIHdpdGggd2luZG93LmZvY3VzKCkKICAgIC8vIGFuZCB0aGlzIGhhY2sgaGFzIGJlbmVmaXQgb2YgRW50ZXIgZm9yIGhlbHAKCiAgICB0cnkKICAgIHsKICAgICAgaWYgKCF3M2Nfc2xpZHkub3BlcmEpCiAgICAgICAgdzNjX3NsaWR5LnNldF9mb2N1cygpOwogICAgfQogICAgY2F0Y2ggKGUpCiAgICB7CiAgICB9CiAgfSwKCi8vIGludm9rZWQgdmlhIEYga2V5CiAgdG9nZ2xlX3Rvb2xiYXI6IGZ1bmN0aW9uICgpIHsKICAgIGlmICghdzNjX3NsaWR5LnZpZXdfYWxsKQogICAgewogICAgICBpZiAodzNjX3NsaWR5Lmhhc19jbGFzcyh3M2Nfc2xpZHkudG9vbGJhciwgImhpZGRlbiIpKQogICAgICB7CiAgICAgICAgdzNjX3NsaWR5LnJlbW92ZV9jbGFzcyh3M2Nfc2xpZHkudG9vbGJhciwgImhpZGRlbiIpCiAgICAgICAgdzNjX3NsaWR5LndhbnRfdG9vbGJhciA9IDE7CiAgICAgIH0KICAgICAgZWxzZQogICAgICB7CiAgICAgICAgdzNjX3NsaWR5LmFkZF9jbGFzcyh3M2Nfc2xpZHkudG9vbGJhciwgImhpZGRlbiIpCiAgICAgICAgdzNjX3NsaWR5LndhbnRfdG9vbGJhciA9IDA7CiAgICAgIH0KICAgIH0KICB9LAoKICBzY3JvbGxfeF9vZmZzZXQ6IGZ1bmN0aW9uICgpIHsKICAgIGlmICh3aW5kb3cucGFnZVhPZmZzZXQpCiAgICAgIHJldHVybiBzZWxmLnBhZ2VYT2Zmc2V0OwoKICAgIGlmIChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgJiYgCiAgICAgICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdCkKICAgICAgcmV0dXJuIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0OwoKICAgIGlmIChkb2N1bWVudC5ib2R5KQogICAgICByZXR1cm4gZG9jdW1lbnQuYm9keS5zY3JvbGxMZWZ0OwoKICAgIHJldHVybiAwOwogIH0sCgogIHNjcm9sbF95X29mZnNldDogZnVuY3Rpb24gKCkgewogICAgaWYgKHdpbmRvdy5wYWdlWU9mZnNldCkKICAgICAgcmV0dXJuIHNlbGYucGFnZVlPZmZzZXQ7CgogICAgaWYgKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCAmJiAKICAgICAgICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3ApCiAgICAgIHJldHVybiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wOwoKICAgIGlmIChkb2N1bWVudC5ib2R5KQogICAgICByZXR1cm4gZG9jdW1lbnQuYm9keS5zY3JvbGxUb3A7CgogICAgcmV0dXJuIDA7CiAgfSwKCiAgLy8gbG9va2luZyBmb3IgYSB3YXkgdG8gZGV0ZXJtaW5lIGhlaWdodCBvZiBzbGlkZSBjb250ZW50CiAgLy8gdGhlIHNsaWRlIGl0c2VsZiBpcyBzZXQgdG8gdGhlIGhlaWdodCBvZiB0aGUgd2luZG93CiAgb3B0aW1pemVfZm9udF9zaXplOiBmdW5jdGlvbiAoKSB7CiAgICB2YXIgc2xpZGUgPSB3M2Nfc2xpZHkuc2xpZGVzW3czY19zbGlkeS5zbGlkZV9udW1iZXJdOwoKICAgIC8vdmFyIGRoID0gZG9jdW1lbnRIZWlnaHQoKTsgLy9nZXREb2NIZWlnaHQoZG9jdW1lbnQpOwogICAgdmFyIGRoID0gc2xpZGUuc2Nyb2xsSGVpZ2h0OwogICAgdmFyIHdoID0gZ2V0V2luZG93SGVpZ2h0KCk7CiAgICB2YXIgdSA9IDEwMCAqIGRoIC8gd2g7CgogICAgYWxlcnQoIndpbmRvdyB1dGlsaXphdGlvbiA9ICIgKyB1ICsgIiUgKGRvYyAiCiAgICAgICsgZGggKyAiIHdpbiAiICsgd2ggKyAiKSIpOwogIH0sCgogIC8vIGZyb20gZG9jdW1lbnQgb2JqZWN0CiAgZ2V0X2RvY19oZWlnaHQ6IGZ1bmN0aW9uIChkb2MpIHsKICAgIGlmICghZG9jKQogICAgICBkb2MgPSBkb2N1bWVudDsKCiAgICBpZiAoZG9jICYmIGRvYy5ib2R5ICYmIGRvYy5ib2R5Lm9mZnNldEhlaWdodCkKICAgICAgcmV0dXJuIGRvYy5ib2R5Lm9mZnNldEhlaWdodDsgIC8vIG5zL2dlY2tvIHN5bnRheAoKICAgIGlmIChkb2MgJiYgZG9jLmJvZHkgJiYgZG9jLmJvZHkuc2Nyb2xsSGVpZ2h0KQogICAgICByZXR1cm4gZG9jLmJvZHkuc2Nyb2xsSGVpZ2h0OwoKICAgIGFsZXJ0KCJjb3VsZG4ndCBkZXRlcm1pbmUgZG9jdW1lbnQgaGVpZ2h0Iik7CiAgfSwKCiAgZ2V0X3dpbmRvd19oZWlnaHQ6IGZ1bmN0aW9uICgpIHsKICAgIGlmICggdHlwZW9mKCB3aW5kb3cuaW5uZXJIZWlnaHQgKSA9PSAnbnVtYmVyJyApCiAgICAgIHJldHVybiB3aW5kb3cuaW5uZXJIZWlnaHQ7ICAvLyBOb24gSUUgYnJvd3NlcgoKICAgIGlmIChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCkKICAgICAgcmV0dXJuIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQ7ICAvLyBJRTYKCiAgICBpZiAoZG9jdW1lbnQuYm9keSAmJiBkb2N1bWVudC5ib2R5LmNsaWVudEhlaWdodCkKICAgICAgcmV0dXJuIGRvY3VtZW50LmJvZHkuY2xpZW50SGVpZ2h0OyAvLyBJRTQKICB9LAoKICBkb2N1bWVudF9oZWlnaHQ6IGZ1bmN0aW9uICgpIHsKICAgIHZhciBzaCwgb2g7CgogICAgc2ggPSBkb2N1bWVudC5ib2R5LnNjcm9sbEhlaWdodDsKICAgIG9oID0gZG9jdW1lbnQuYm9keS5vZmZzZXRIZWlnaHQ7CgogICAgaWYgKHNoICYmIG9oKQogICAgewogICAgICByZXR1cm4gKHNoID4gb2ggPyBzaCA6IG9oKTsKICAgIH0KCiAgICAvLyBubyBpZGVhIQogICAgcmV0dXJuIDA7CiAgfSwKCiAgc21hbGxlcjogZnVuY3Rpb24gKCkgewogICAgaWYgKHczY19zbGlkeS5zaXplX2luZGV4ID4gMCkKICAgIHsKICAgICAgLS13M2Nfc2xpZHkuc2l6ZV9pbmRleDsKICAgIH0KCiAgICB3M2Nfc2xpZHkudG9vbGJhci5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwogICAgZG9jdW1lbnQuYm9keS5zdHlsZS5mb250U2l6ZSA9IHczY19zbGlkeS5zaXplc1t3M2Nfc2xpZHkuc2l6ZV9pbmRleF07CiAgICB2YXIgc2xpZGUgPSB3M2Nfc2xpZHkuc2xpZGVzW3czY19zbGlkeS5zbGlkZV9udW1iZXJdOwogICAgdzNjX3NsaWR5LmhpZGVfc2xpZGUoc2xpZGUpOwogICAgdzNjX3NsaWR5LnNob3dfc2xpZGUoc2xpZGUpOwogICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7dzNjX3NsaWR5LnNob3dfdG9vbGJhcigpOyB9LCA1MCk7CiAgfSwKCiAgYmlnZ2VyOiBmdW5jdGlvbiAoKSB7CiAgICBpZiAodzNjX3NsaWR5LnNpemVfaW5kZXggPCB3M2Nfc2xpZHkuc2l6ZXMubGVuZ3RoIC0gMSkKICAgIHsKICAgICAgKyt3M2Nfc2xpZHkuc2l6ZV9pbmRleDsKICAgIH0KCiAgICB3M2Nfc2xpZHkudG9vbGJhci5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwogICAgZG9jdW1lbnQuYm9keS5zdHlsZS5mb250U2l6ZSA9IHczY19zbGlkeS5zaXplc1t3M2Nfc2xpZHkuc2l6ZV9pbmRleF07CiAgICB2YXIgc2xpZGUgPSB3M2Nfc2xpZHkuc2xpZGVzW3czY19zbGlkeS5zbGlkZV9udW1iZXJdOwogICAgdzNjX3NsaWR5LmhpZGVfc2xpZGUoc2xpZGUpOwogICAgdzNjX3NsaWR5LnNob3dfc2xpZGUoc2xpZGUpOwogICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7dzNjX3NsaWR5LnNob3dfdG9vbGJhcigpOyB9LCA1MCk7CiAgfSwKCiAgLy8gZW5hYmxlcyBjcm9zcyBicm93c2VyIHVzZSBvZiByZWxhdGl2ZSB3aWR0aC9oZWlnaHQKICAvLyBvbiBvYmplY3QgZWxlbWVudHMgZm9yIHVzZSB3aXRoIFNWRyBhbmQgRmxhc2ggbWVkaWEKICAvLyB3aXRoIHRoYW5rcyB0byBJdmFuIEhlcm1hbiBmb3IgdGhlIHN1Z2dlc3Rpb24KICBhZGp1c3Rfb2JqZWN0X2RpbWVuc2lvbnM6IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KSB7CiAgICBmb3IoIHZhciBpID0gMDsgaSA8IHczY19zbGlkeS5vYmplY3RzLmxlbmd0aDsgaSsrICkKICAgIHsKICAgICAgdmFyIG9iaiA9IHRoaXMub2JqZWN0c1tpXTsKICAgICAgdmFyIG1pbWVUeXBlID0gb2JqLmdldEF0dHJpYnV0ZSgidHlwZSIpOwoKICAgICAgaWYgKG1pbWVUeXBlID09ICJpbWFnZS9zdmcreG1sIiB8fCBtaW1lVHlwZSA9PSAiYXBwbGljYXRpb24veC1zaG9ja3dhdmUtZmxhc2giKQogICAgICB7CiAgICAgICAgaWYgKCAhb2JqLmluaXRpYWxXaWR0aCApIAogICAgICAgICAgb2JqLmluaXRpYWxXaWR0aCA9IG9iai5nZXRBdHRyaWJ1dGUoIndpZHRoIik7CgogICAgICAgIGlmICggIW9iai5pbml0aWFsSGVpZ2h0ICkgCiAgICAgICAgICBvYmouaW5pdGlhbEhlaWdodCA9IG9iai5nZXRBdHRyaWJ1dGUoImhlaWdodCIpOwoKICAgICAgICBpZiAoIG9iai5pbml0aWFsV2lkdGggJiYgb2JqLmluaXRpYWxXaWR0aC5jaGFyQXQob2JqLmluaXRpYWxXaWR0aC5sZW5ndGgtMSkgPT0gIiUiICkKICAgICAgICB7CiAgICAgICAgICB2YXIgdyA9IHBhcnNlSW50KG9iai5pbml0aWFsV2lkdGguc2xpY2UoMCwgb2JqLmluaXRpYWxXaWR0aC5sZW5ndGgtMSkpOwogICAgICAgICAgdmFyIG5ld1cgPSB3aWR0aCAqICh3LzEwMC4wKTsKICAgICAgICAgIG9iai5zZXRBdHRyaWJ1dGUoIndpZHRoIixuZXdXKTsKICAgICAgICB9CgogICAgICAgIGlmICggb2JqLmluaXRpYWxIZWlnaHQgJiYKICAgICAgICAgICAgIG9iai5pbml0aWFsSGVpZ2h0LmNoYXJBdChvYmouaW5pdGlhbEhlaWdodC5sZW5ndGgtMSkgPT0gIiUiICkKICAgICAgICB7CiAgICAgICAgICB2YXIgaCA9IHBhcnNlSW50KG9iai5pbml0aWFsSGVpZ2h0LnNsaWNlKDAsIG9iai5pbml0aWFsSGVpZ2h0Lmxlbmd0aC0xKSk7CiAgICAgICAgICB2YXIgbmV3SCA9IGhlaWdodCAqIChoLzEwMC4wKTsKICAgICAgICAgIG9iai5zZXRBdHRyaWJ1dGUoImhlaWdodCIsIG5ld0gpOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0sCgogIC8vIG5lZWRlZCBmb3IgT3BlcmEgdG8gaW5oaWJpdCBkZWZhdWx0IGJlaGF2aW9yCiAgLy8gc2luY2UgT3BlcmEgZGVsaXZlcnMga2V5UHJlc3MgZXZlbiBpZiBrZXlEb3duCiAgLy8gd2FzIGNhbmNlbGxlZAogIGtleV9wcmVzczogZnVuY3Rpb24gKGV2ZW50KSB7CiAgICBpZiAoIWV2ZW50KQogICAgICBldmVudCA9IHdpbmRvdy5ldmVudDsKCiAgICBpZiAoIXczY19zbGlkeS5rZXlfd2FudGVkKQogICAgICByZXR1cm4gdzNjX3NsaWR5LmNhbmNlbChldmVudCk7CgogICAgcmV0dXJuIHRydWU7CiAgfSwKCiAgLy8gIFNlZSBlLmcuIGh0dHA6Ly93d3cucXVpcmtzbW9kZS5vcmcvanMvZXZlbnRzL2tleXMuaHRtbCBmb3Iga2V5Y29kZXMKICBrZXlfZG93bjogZnVuY3Rpb24gKGV2ZW50KSB7CiAgICB2YXIga2V5LCB0YXJnZXQsIHRhZzsKCiAgICB3M2Nfc2xpZHkua2V5X3dhbnRlZCA9IHRydWU7CgogICAgaWYgKCFldmVudCkKICAgICAgZXZlbnQgPSB3aW5kb3cuZXZlbnQ7CgogICAgLy8ga2x1ZGdlIGFyb3VuZCBOUy9JRSBkaWZmZXJlbmNlcyAKICAgIGlmICh3aW5kb3cuZXZlbnQpCiAgICB7CiAgICAgIGtleSA9IHdpbmRvdy5ldmVudC5rZXlDb2RlOwogICAgICB0YXJnZXQgPSB3aW5kb3cuZXZlbnQuc3JjRWxlbWVudDsKICAgIH0KICAgIGVsc2UgaWYgKGV2ZW50LndoaWNoKQogICAgewogICAgICBrZXkgPSBldmVudC53aGljaDsKICAgICAgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0OwogICAgfQogICAgZWxzZQogICAgICByZXR1cm4gdHJ1ZTsgLy8gWWlrZXMhIHVua25vd24gYnJvd3NlcgoKICAgIC8vIGlnbm9yZSBldmVudCBpZiBrZXkgdmFsdWUgaXMgemVybwogICAgLy8gYXMgZm9yIGFsdCBvbiBPcGVyYSBhbmQgS29ucXVlcm9yCiAgICBpZiAoIWtleSkKICAgICAgIHJldHVybiB0cnVlOwoKICAgIC8vIGF2b2lkIGludGVyZmVyaW5nIHdpdGgga2V5c3Ryb2tlCiAgICAvLyBiZWhhdmlvciBmb3Igbm9uLXNsaWR5IGNocm9tZSBlbGVtZW50cwogICAgaWYgKCF3M2Nfc2xpZHkuc2xpZHlfY2hyb21lKHRhcmdldCkgJiYKICAgICAgICB3M2Nfc2xpZHkuc3BlY2lhbF9lbGVtZW50KHRhcmdldCkpCiAgICAgIHJldHVybiB0cnVlOwoKICAgIC8vIGNoZWNrIGZvciBjb25jdXJyZW50IGNvbnRyb2wvY29tbWFuZC9hbHQga2V5CiAgICAvLyBidXQgYXJlIHRoZXNlIG9ubHkgcHJlc2VudCBvbiBtb3VzZSBldmVudHM/CgogICAgaWYgKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQuYWx0S2V5IHx8IGV2ZW50Lm1ldGFLZXkpCiAgICAgICByZXR1cm4gdHJ1ZTsKCiAgICAvLyBkaXNtaXNzIHRhYmxlIG9mIGNvbnRlbnRzIGlmIHZpc2libGUKICAgIGlmICh3M2Nfc2xpZHkuaXNfc2hvd25fdG9jKCkgJiYga2V5ICE9IDkgJiYga2V5ICE9IDE2ICYmIGtleSAhPSAzOCAmJiBrZXkgIT0gNDApCiAgICB7CiAgICAgIHczY19zbGlkeS5oaWRlX3RhYmxlX29mX2NvbnRlbnRzKHRydWUpOwoKICAgICAgaWYgKGtleSA9PSAyNyB8fCBrZXkgPT0gODQgfHwga2V5ID09IDY3KQogICAgICAgIHJldHVybiB3M2Nfc2xpZHkuY2FuY2VsKGV2ZW50KTsKICAgIH0KCiAgICBpZiAoa2V5ID09IDM0KSAvLyBQYWdlIERvd24KICAgIHsKICAgICAgaWYgKHczY19zbGlkeS52aWV3X2FsbCkKICAgICAgICByZXR1cm4gdHJ1ZTsKCiAgICAgIHczY19zbGlkeS5uZXh0X3NsaWRlKGZhbHNlKTsKICAgICAgcmV0dXJuIHczY19zbGlkeS5jYW5jZWwoZXZlbnQpOwogICAgfQogICAgZWxzZSBpZiAoa2V5ID09IDMzKSAvLyBQYWdlIFVwCiAgICB7CiAgICAgIGlmICh3M2Nfc2xpZHkudmlld19hbGwpCiAgICAgICAgcmV0dXJuIHRydWU7CgogICAgICB3M2Nfc2xpZHkucHJldmlvdXNfc2xpZGUoZmFsc2UpOwogICAgICByZXR1cm4gdzNjX3NsaWR5LmNhbmNlbChldmVudCk7CiAgICB9CiAgICBlbHNlIGlmIChrZXkgPT0gMzIpIC8vIHNwYWNlIGJhcgogICAgewogICAgICB3M2Nfc2xpZHkubmV4dF9zbGlkZSh0cnVlKTsKICAgICAgcmV0dXJuIHczY19zbGlkeS5jYW5jZWwoZXZlbnQpOwogICAgfQogICAgZWxzZSBpZiAoa2V5ID09IDM3KSAvLyBMZWZ0IGFycm93CiAgICB7CiAgICAgIHczY19zbGlkeS5wcmV2aW91c19zbGlkZSghZXZlbnQuc2hpZnRLZXkpOwogICAgICByZXR1cm4gdzNjX3NsaWR5LmNhbmNlbChldmVudCk7CiAgICB9CiAgICBlbHNlIGlmIChrZXkgPT0gMzYpIC8vIEhvbWUKICAgIHsKICAgICAgdzNjX3NsaWR5LmZpcnN0X3NsaWRlKCk7CiAgICAgIHJldHVybiB3M2Nfc2xpZHkuY2FuY2VsKGV2ZW50KTsKICAgIH0KICAgIGVsc2UgaWYgKGtleSA9PSAzNSkgLy8gRW5kCiAgICB7CiAgICAgIHczY19zbGlkeS5sYXN0X3NsaWRlKCk7CiAgICAgIHJldHVybiB3M2Nfc2xpZHkuY2FuY2VsKGV2ZW50KTsKICAgIH0KICAgIGVsc2UgaWYgKGtleSA9PSAzOSkgLy8gUmlnaHQgYXJyb3cKICAgIHsKICAgICAgdzNjX3NsaWR5Lm5leHRfc2xpZGUoIWV2ZW50LnNoaWZ0S2V5KTsKICAgICAgcmV0dXJuIHczY19zbGlkeS5jYW5jZWwoZXZlbnQpOwogICAgfQogICAgZWxzZSBpZiAoa2V5ID09IDEzKSAvLyBFbnRlcgogICAgewogICAgICBpZiAodzNjX3NsaWR5Lm91dGxpbmUpCiAgICAgIHsKICAgICAgICBpZiAodzNjX3NsaWR5Lm91dGxpbmUudmlzaWJsZSkKICAgICAgICAgIHczY19zbGlkeS5mb2xkKHczY19zbGlkeS5vdXRsaW5lKTsKICAgICAgICBlbHNlCiAgICAgICAgICB3M2Nfc2xpZHkudW5mb2xkKHczY19zbGlkeS5vdXRsaW5lKTsKICAgICAgICAgIAogICAgICAgcmV0dXJuIHczY19zbGlkeS5jYW5jZWwoZXZlbnQpOwogICAgICB9CiAgICB9CiAgICBlbHNlIGlmIChrZXkgPT0gMTg4KSAgLy8gPCBmb3Igc21hbGxlciBmb250cwogICAgewogICAgICB3M2Nfc2xpZHkuc21hbGxlcigpOwogICAgICByZXR1cm4gdzNjX3NsaWR5LmNhbmNlbChldmVudCk7CiAgICB9CiAgICBlbHNlIGlmIChrZXkgPT0gMTkwKSAgLy8gPiBmb3IgbGFyZ2VyIGZvbnRzCiAgICB7CiAgICAgIHczY19zbGlkeS5iaWdnZXIoKTsKICAgICAgcmV0dXJuIHczY19zbGlkeS5jYW5jZWwoZXZlbnQpOwogICAgfQogICAgZWxzZSBpZiAoa2V5ID09IDE4OSB8fCBrZXkgPT0gMTA5KSAgLy8gLSBmb3Igc21hbGxlciBmb250cwogICAgewogICAgICB3M2Nfc2xpZHkuc21hbGxlcigpOwogICAgICByZXR1cm4gdzNjX3NsaWR5LmNhbmNlbChldmVudCk7CiAgICB9CiAgICBlbHNlIGlmIChrZXkgPT0gMTg3IHx8IGtleSA9PSAxOTEgfHwga2V5ID09IDEwNykgIC8vID0gKyAgZm9yIGxhcmdlciBmb250cwogICAgewogICAgICB3M2Nfc2xpZHkuYmlnZ2VyKCk7CiAgICAgIHJldHVybiB3M2Nfc2xpZHkuY2FuY2VsKGV2ZW50KTsKICAgIH0KICAgIGVsc2UgaWYgKGtleSA9PSA4MykgIC8vIFMgZm9yIHNtYWxsZXIgZm9udHMKICAgIHsKICAgICAgdzNjX3NsaWR5LnNtYWxsZXIoKTsKICAgICAgcmV0dXJuIHczY19zbGlkeS5jYW5jZWwoZXZlbnQpOwogICAgfQogICAgZWxzZSBpZiAoa2V5ID09IDY2KSAgLy8gQiBmb3IgbGFyZ2VyIGZvbnRzCiAgICB7CiAgICAgIHczY19zbGlkeS5iaWdnZXIoKTsKICAgICAgcmV0dXJuIHczY19zbGlkeS5jYW5jZWwoZXZlbnQpOwogICAgfQogICAgZWxzZSBpZiAoa2V5ID09IDkwKSAgLy8gWiBmb3IgbGFzdCBzbGlkZQogICAgewogICAgICB3M2Nfc2xpZHkubGFzdF9zbGlkZSgpOwogICAgICByZXR1cm4gdzNjX3NsaWR5LmNhbmNlbChldmVudCk7CiAgICB9CiAgICBlbHNlIGlmIChrZXkgPT0gNzApICAvLyBGIGZvciB0b2dnbGUgdG9vbGJhcgogICAgewogICAgICB3M2Nfc2xpZHkudG9nZ2xlX3Rvb2xiYXIoKTsKICAgICAgcmV0dXJuIHczY19zbGlkeS5jYW5jZWwoZXZlbnQpOwogICAgfQogICAgZWxzZSBpZiAoa2V5ID09IDY1KSAgLy8gQSBmb3IgdG9nZ2xlIHZpZXcgc2luZ2xlL2FsbCBzbGlkZXMKICAgIHsKICAgICAgdzNjX3NsaWR5LnRvZ2dsZV92aWV3KCk7CiAgICAgIHJldHVybiB3M2Nfc2xpZHkuY2FuY2VsKGV2ZW50KTsKICAgIH0KICAgIGVsc2UgaWYgKGtleSA9PSA3NSkgIC8vIHRvZ2dsZSBhY3Rpb24gb2YgbGVmdCBjbGljayBmb3IgbmV4dCBwYWdlCiAgICB7CiAgICAgIHczY19zbGlkeS5tb3VzZV9jbGlja19lbmFibGVkID0gIXczY19zbGlkeS5tb3VzZV9jbGlja19lbmFibGVkOwogICAgICB2YXIgYWxlcnRfbXNnID0gKHczY19zbGlkeS5tb3VzZV9jbGlja19lbmFibGVkID8KICAgICAgICAgICAgICAgICJlbmFibGVkIiA6ICJkaXNhYmxlZCIpICsgICIgbW91c2UgY2xpY2sgYWR2YW5jZSI7CgogICAgICBhbGVydCh3M2Nfc2xpZHkubG9jYWxpemUoYWxlcnRfbXNnKSk7CiAgICAgIHJldHVybiB3M2Nfc2xpZHkuY2FuY2VsKGV2ZW50KTsKICAgIH0KICAgIGVsc2UgaWYgKGtleSA9PSA4NCB8fCBrZXkgPT0gNjcpICAvLyBUIG9yIEMgZm9yIHRhYmxlIG9mIGNvbnRlbnRzCiAgICB7CiAgICAgIGlmICh3M2Nfc2xpZHkudG9jKQogICAgICAgIHczY19zbGlkeS50b2dnbGVfdGFibGVfb2ZfY29udGVudHMoKTsKCiAgICAgIHJldHVybiB3M2Nfc2xpZHkuY2FuY2VsKGV2ZW50KTsKICAgIH0KICAgIGVsc2UgaWYgKGtleSA9PSA3MikgLy8gSCBmb3IgaGVscAogICAgewogICAgICB3aW5kb3cubG9jYXRpb24gPSB3M2Nfc2xpZHkuaGVscF9wYWdlOwogICAgICByZXR1cm4gdzNjX3NsaWR5LmNhbmNlbChldmVudCk7CiAgICB9CiAgICAvL2Vsc2UgYWxlcnQoImtleSBjb2RlIGlzICIrIGtleSk7CgogICAgcmV0dXJuIHRydWU7CiAgfSwKCiAgLy8gc2FmZSBmb3IgYm90aCB0ZXh0L2h0bWwgYW5kIGFwcGxpY2F0aW9uL3hodG1sK3htbAogIGNyZWF0ZV9lbGVtZW50OiBmdW5jdGlvbiAobmFtZSkgewogICAgaWYgKHRoaXMueGh0bWwgJiYgKHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMgIT0gJ3VuZGVmaW5lZCcpKQogICAgICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwgbmFtZSkKCiAgICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChuYW1lKTsKICB9LAoKICBnZXRfZWxlbWVudF9zdHlsZTogZnVuY3Rpb24gKGVsZW0sIElFU3R5bGVQcm9wLCBDU1NTdHlsZVByb3ApIHsKICAgIGlmIChlbGVtLmN1cnJlbnRTdHlsZSkKICAgIHsKICAgICAgcmV0dXJuIGVsZW0uY3VycmVudFN0eWxlW0lFU3R5bGVQcm9wXTsKICAgIH0KICAgIGVsc2UgaWYgKHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKQogICAgewogICAgICB2YXIgY29tcFN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWxlbSwgIiIpOwogICAgICByZXR1cm4gY29tcFN0eWxlLmdldFByb3BlcnR5VmFsdWUoQ1NTU3R5bGVQcm9wKTsKICAgIH0KICAgIHJldHVybiAiIjsKICB9LAoKICAvLyB0aGUgc3RyaW5nIHN0ciBpcyBhIHdoaXRlc3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2YgdG9rZW5zCiAgLy8gdGVzdCBpZiBzdHIgY29udGFpbnMgYSBwYXJ0aWN1bGFyIHRva2VuLCBlLmcuICJzbGlkZSIKICBoYXNfdG9rZW46IGZ1bmN0aW9uIChzdHIsIHRva2VuKSB7CiAgICBpZiAoc3RyKQogICAgewogICAgICAvLyBkZWZpbmUgcGF0dGVybiBhcyByZWd1bGFyIGV4cHJlc3Npb24KICAgICAgdmFyIHBhdHRlcm4gPSAvXHcrL2c7CgogICAgICAvLyBjaGVjayBmb3IgbWF0Y2hlcwogICAgICAvLyBwbGFjZSByZXN1bHQgaW4gYXJyYXkKICAgICAgdmFyIHJlc3VsdCA9IHN0ci5tYXRjaChwYXR0ZXJuKTsKCiAgICAgIC8vIG5vdyBjaGVjayBpZiBkZXNpcmVkIHRva2VuIGlzIHByZXNlbnQKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXN1bHQubGVuZ3RoOyBpKyspCiAgICAgIHsKICAgICAgICBpZiAocmVzdWx0W2ldID09IHRva2VuKQogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gZmFsc2U7CiAgfSwKCiAgZ2V0X2NsYXNzX2xpc3Q6IGZ1bmN0aW9uIChlbGVtZW50KSB7CiAgICBpZiAodHlwZW9mIGVsZW1lbnQuY2xhc3NOYW1lICE9ICd1bmRlZmluZWQnKQogICAgICByZXR1cm4gZWxlbWVudC5jbGFzc05hbWU7CgogICAgcmV0dXJuIGVsZW1lbnQuZ2V0QXR0cmlidXRlKCJjbGFzcyIpOwogIH0sCgogIGhhc19jbGFzczogZnVuY3Rpb24gKGVsZW1lbnQsIG5hbWUpIHsKICAgIGlmIChlbGVtZW50Lm5vZGVUeXBlICE9IDEpCiAgICAgIHJldHVybiBmYWxzZTsKCiAgICB2YXIgcmVnZXhwID0gbmV3IFJlZ0V4cCgiKF58ICkiICsgbmFtZSArICJcVyoiKTsKCiAgICBpZiAodHlwZW9mIGVsZW1lbnQuY2xhc3NOYW1lICE9ICd1bmRlZmluZWQnKQogICAgICByZXR1cm4gcmVnZXhwLnRlc3QoZWxlbWVudC5jbGFzc05hbWUpOwoKICAgIHJldHVybiByZWdleHAudGVzdChlbGVtZW50LmdldEF0dHJpYnV0ZSgiY2xhc3MiKSk7CiAgfSwKCiAgcmVtb3ZlX2NsYXNzOiBmdW5jdGlvbiAoZWxlbWVudCwgbmFtZSkgewogICAgdmFyIHJlZ2V4cCA9IG5ldyBSZWdFeHAoIihefCApIiArIG5hbWUgKyAiXFcqIik7CiAgICB2YXIgY2xzdmFsID0gIiI7CgogICAgaWYgKHR5cGVvZiBlbGVtZW50LmNsYXNzTmFtZSAhPSAndW5kZWZpbmVkJykKICAgIHsKICAgICAgY2xzdmFsID0gZWxlbWVudC5jbGFzc05hbWU7CgogICAgICBpZiAoY2xzdmFsKQogICAgICB7CiAgICAgICAgY2xzdmFsID0gY2xzdmFsLnJlcGxhY2UocmVnZXhwLCAiIik7CiAgICAgICAgZWxlbWVudC5jbGFzc05hbWUgPSBjbHN2YWw7CiAgICAgIH0KICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAgY2xzdmFsID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoImNsYXNzIik7CgogICAgICBpZiAoY2xzdmFsKQogICAgICB7CiAgICAgICAgY2xzdmFsID0gY2xzdmFsLnJlcGxhY2UocmVnZXhwLCAiIik7CiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoImNsYXNzIiwgY2xzdmFsKTsKICAgICAgfQogICAgfQogIH0sCgogIGFkZF9jbGFzczogZnVuY3Rpb24gKGVsZW1lbnQsIG5hbWUpIHsKICAgIGlmICghdGhpcy5oYXNfY2xhc3MoZWxlbWVudCwgbmFtZSkpCiAgICB7CiAgICAgIGlmICh0eXBlb2YgZWxlbWVudC5jbGFzc05hbWUgIT0gJ3VuZGVmaW5lZCcpCiAgICAgICAgZWxlbWVudC5jbGFzc05hbWUgKz0gIiAiICsgbmFtZTsKICAgICAgZWxzZQogICAgICB7CiAgICAgICAgdmFyIGNsc3ZhbCA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCJjbGFzcyIpOwogICAgICAgIGNsc3ZhbCA9IGNsc3ZhbCA/IGNsc3ZhbCArICIgIiArIG5hbWUgOiBuYW1lOwogICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCJjbGFzcyIsIGNsc3ZhbCk7CiAgICAgIH0KICAgIH0KICB9LAoKICAvLyBIVE1MIGVsZW1lbnRzIHRoYXQgY2FuIGJlIHVzZWQgd2l0aCBjbGFzcz0iaW5jcmVtZW50YWwiCiAgLy8gbm90ZSB0aGF0IHlvdSBjYW4gYWxzbyBwdXQgdGhlIGNsYXNzIG9uIGNvbnRhaW5lcnMgbGlrZQogIC8vIHVwLCBvbCwgZGwsIGFuZCBkaXYgdG8gbWFrZSB0aGVpciBjb250ZW50cyBhcHBlYXIKICAvLyBpbmNyZW1lbnRhbGx5LiBVcHBlciBjYXNlIGlzIHVzZWQgc2luY2UgdGhpcyBpcyB3aGF0CiAgLy8gYnJvd3NlcnMgcmVwb3J0IGZvciBIVE1MIG5vZGUgbmFtZXMgKHRleHQvaHRtbCkuCiAgaW5jcmVtZW50YWxfZWxlbWVudHM6IG51bGwsCiAgb2theV9mb3JfaW5jcmVtZW50YWw6IGZ1bmN0aW9uIChuYW1lKSB7CiAgICBpZiAoIXRoaXMuaW5jcmVtZW50YWxfZWxlbWVudHMpCiAgICB7CiAgICAgIHZhciBpbmNsaXN0ID0gbmV3IEFycmF5KCk7CiAgICAgIGluY2xpc3RbInAiXSA9IHRydWU7CiAgICAgIGluY2xpc3RbInByZSJdID0gdHJ1ZTsKICAgICAgaW5jbGlzdFsibGkiXSA9IHRydWU7CiAgICAgIGluY2xpc3RbImJsb2NrcXVvdGUiXSA9IHRydWU7CiAgICAgIGluY2xpc3RbImR0Il0gPSB0cnVlOwogICAgICBpbmNsaXN0WyJkZCJdID0gdHJ1ZTsKICAgICAgaW5jbGlzdFsiaDIiXSA9IHRydWU7CiAgICAgIGluY2xpc3RbImgzIl0gPSB0cnVlOwogICAgICBpbmNsaXN0WyJoNCJdID0gdHJ1ZTsKICAgICAgaW5jbGlzdFsiaDUiXSA9IHRydWU7CiAgICAgIGluY2xpc3RbImg2Il0gPSB0cnVlOwogICAgICBpbmNsaXN0WyJzcGFuIl0gPSB0cnVlOwogICAgICBpbmNsaXN0WyJhZGRyZXNzIl0gPSB0cnVlOwogICAgICBpbmNsaXN0WyJ0YWJsZSJdID0gdHJ1ZTsKICAgICAgaW5jbGlzdFsidHIiXSA9IHRydWU7CiAgICAgIGluY2xpc3RbInRoIl0gPSB0cnVlOwogICAgICBpbmNsaXN0WyJ0ZCJdID0gdHJ1ZTsKICAgICAgaW5jbGlzdFsiaW1nIl0gPSB0cnVlOwogICAgICBpbmNsaXN0WyJvYmplY3QiXSA9IHRydWU7CiAgICAgIHRoaXMuaW5jcmVtZW50YWxfZWxlbWVudHMgPSBpbmNsaXN0OwogICAgfQogICAgcmV0dXJuIHRoaXMuaW5jcmVtZW50YWxfZWxlbWVudHNbbmFtZS50b0xvd2VyQ2FzZSgpXTsKICB9LAoKICBuZXh0X2luY3JlbWVudGFsX2l0ZW06IGZ1bmN0aW9uIChub2RlKSB7CiAgICB2YXIgYnIgPSB0aGlzLmlzX3hodG1sID8gImJyIiA6ICJCUiI7CiAgICB2YXIgc2xpZGUgPSB3M2Nfc2xpZHkuc2xpZGVzW3czY19zbGlkeS5zbGlkZV9udW1iZXJdOwoKICAgIGZvciAoOzspCiAgICB7CiAgICAgIG5vZGUgPSB3M2Nfc2xpZHkubmV4dF9ub2RlKHNsaWRlLCBub2RlKTsKCiAgICAgIGlmIChub2RlID09IG51bGwgfHwgbm9kZS5wYXJlbnROb2RlID09IG51bGwpCiAgICAgICAgYnJlYWs7CgogICAgICBpZiAobm9kZS5ub2RlVHlwZSA9PSAxKSAgLy8gRUxFTUVOVAogICAgICB7CiAgICAgICAgaWYgKG5vZGUubm9kZU5hbWUgPT0gYnIpCiAgICAgICAgICBjb250aW51ZTsKCiAgICAgICAgaWYgKHczY19zbGlkeS5oYXNfY2xhc3Mobm9kZSwgImluY3JlbWVudGFsIikKICAgICAgICAgICAgICYmIHczY19zbGlkeS5va2F5X2Zvcl9pbmNyZW1lbnRhbChub2RlLm5vZGVOYW1lKSkKICAgICAgICAgIHJldHVybiBub2RlOwoKICAgICAgICBpZiAodzNjX3NsaWR5Lmhhc19jbGFzcyhub2RlLnBhcmVudE5vZGUsICJpbmNyZW1lbnRhbCIpCiAgICAgICAgICAgICAmJiAhdzNjX3NsaWR5Lmhhc19jbGFzcyhub2RlLCAibm9uLWluY3JlbWVudGFsIikpCiAgICAgICAgICByZXR1cm4gbm9kZTsKICAgICAgfQogICAgfQoKICAgIHJldHVybiBub2RlOwogIH0sCgogIHByZXZpb3VzX2luY3JlbWVudGFsX2l0ZW06IGZ1bmN0aW9uIChub2RlKSB7CiAgICB2YXIgYnIgPSB0aGlzLmlzX3hodG1sID8gImJyIiA6ICJCUiI7CiAgICB2YXIgc2xpZGUgPSB3M2Nfc2xpZHkuc2xpZGVzW3czY19zbGlkeS5zbGlkZV9udW1iZXJdOwoKICAgIGZvciAoOzspCiAgICB7CiAgICAgIG5vZGUgPSB3M2Nfc2xpZHkucHJldmlvdXNfbm9kZShzbGlkZSwgbm9kZSk7CgogICAgICBpZiAobm9kZSA9PSBudWxsIHx8IG5vZGUucGFyZW50Tm9kZSA9PSBudWxsKQogICAgICAgIGJyZWFrOwoKICAgICAgaWYgKG5vZGUubm9kZVR5cGUgPT0gMSkKICAgICAgewogICAgICAgIGlmIChub2RlLm5vZGVOYW1lID09IGJyKQogICAgICAgICAgY29udGludWU7CgogICAgICAgIGlmICh3M2Nfc2xpZHkuaGFzX2NsYXNzKG5vZGUsICJpbmNyZW1lbnRhbCIpCiAgICAgICAgICAgICAmJiB3M2Nfc2xpZHkub2theV9mb3JfaW5jcmVtZW50YWwobm9kZS5ub2RlTmFtZSkpCiAgICAgICAgICByZXR1cm4gbm9kZTsKCiAgICAgICAgaWYgKHczY19zbGlkeS5oYXNfY2xhc3Mobm9kZS5wYXJlbnROb2RlLCAiaW5jcmVtZW50YWwiKQogICAgICAgICAgICAgJiYgIXczY19zbGlkeS5oYXNfY2xhc3Mobm9kZSwgIm5vbi1pbmNyZW1lbnRhbCIpKQogICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gbm9kZTsKICB9LAoKICAvLyBzZXQgdmlzaWJpbGl0eSBmb3IgYWxsIGVsZW1lbnRzIG9uIGN1cnJlbnQgc2xpZGUgd2l0aAogIC8vIGEgcGFyZW50IGVsZW1lbnQgd2l0aCBhdHRyaWJ1dGUgY2xhc3M9ImluY3JlbWVudGFsIgogIHNldF92aXNpYmlsaXR5X2FsbF9pbmNyZW1lbnRhbDogZnVuY3Rpb24gKHZhbHVlKSB7CiAgICB2YXIgbm9kZSA9IHRoaXMubmV4dF9pbmNyZW1lbnRhbF9pdGVtKG51bGwpOwoKICAgIGlmICh2YWx1ZSA9PSAiaGlkZGVuIikKICAgIHsKICAgICAgd2hpbGUgKG5vZGUpCiAgICAgIHsKICAgICAgICB3M2Nfc2xpZHkuYWRkX2NsYXNzKG5vZGUsICJpbnZpc2libGUiKTsKICAgICAgICBub2RlID0gdzNjX3NsaWR5Lm5leHRfaW5jcmVtZW50YWxfaXRlbShub2RlKTsKICAgICAgfQogICAgfQogICAgZWxzZSAvLyB2YWx1ZSA9PSAidmlzaWJsZSIKICAgIHsKICAgICAgd2hpbGUgKG5vZGUpCiAgICAgIHsKICAgICAgICB3M2Nfc2xpZHkucmVtb3ZlX2NsYXNzKG5vZGUsICJpbnZpc2libGUiKTsKICAgICAgICBub2RlID0gdzNjX3NsaWR5Lm5leHRfaW5jcmVtZW50YWxfaXRlbShub2RlKTsKICAgICAgfQogICAgfQogIH0sCgogIC8vIHJldmVhbCB0aGUgbmV4dCBoaWRkZW4gaXRlbSBvbiB0aGUgc2xpZGUKICAvLyBub2RlIGlzIG51bGwgb3IgdGhlIG5vZGUgdGhhdCB3YXMgbGFzdCByZXZlYWxlZAogIHJldmVhbF9uZXh0X2l0ZW06IGZ1bmN0aW9uIChub2RlKSB7CiAgICBub2RlID0gdzNjX3NsaWR5Lm5leHRfaW5jcmVtZW50YWxfaXRlbShub2RlKTsKCiAgICBpZiAobm9kZSAmJiBub2RlLm5vZGVUeXBlID09IDEpICAvLyBhbiBlbGVtZW50CiAgICAgIHczY19zbGlkeS5yZW1vdmVfY2xhc3Mobm9kZSwgImludmlzaWJsZSIpOwoKICAgIHJldHVybiBub2RlOwogIH0sCgogIC8vIGV4YWN0IGludmVyc2Ugb2YgcmV2ZWFsTmV4dEl0ZW0obm9kZSkKICBoaWRlX3ByZXZpb3VzX2l0ZW06IGZ1bmN0aW9uIChub2RlKSB7CiAgICBpZiAobm9kZSAmJiBub2RlLm5vZGVUeXBlID09IDEpICAvLyBhbiBlbGVtZW50CiAgICAgIHczY19zbGlkeS5hZGRfY2xhc3Mobm9kZSwgImludmlzaWJsZSIpOwoKICAgIHJldHVybiB0aGlzLnByZXZpb3VzX2luY3JlbWVudGFsX2l0ZW0obm9kZSk7CiAgfSwKCiAgLy8gbGVmdCB0byByaWdodCB0cmF2ZXJzYWwgb2Ygcm9vdCdzIGNvbnRlbnQKICBuZXh0X25vZGU6IGZ1bmN0aW9uIChyb290LCBub2RlKSB7CiAgICBpZiAobm9kZSA9PSBudWxsKQogICAgICByZXR1cm4gcm9vdC5maXJzdENoaWxkOwoKICAgIGlmIChub2RlLmZpcnN0Q2hpbGQpCiAgICAgIHJldHVybiBub2RlLmZpcnN0Q2hpbGQ7CgogICAgaWYgKG5vZGUubmV4dFNpYmxpbmcpCiAgICAgIHJldHVybiBub2RlLm5leHRTaWJsaW5nOwoKICAgIGZvciAoOzspCiAgICB7CiAgICAgIG5vZGUgPSBub2RlLnBhcmVudE5vZGU7CgogICAgICBpZiAoIW5vZGUgfHwgbm9kZSA9PSByb290KQogICAgICAgIGJyZWFrOwoKICAgICAgaWYgKG5vZGUgJiYgbm9kZS5uZXh0U2libGluZykKICAgICAgICByZXR1cm4gbm9kZS5uZXh0U2libGluZzsKICAgIH0KCiAgICByZXR1cm4gbnVsbDsKICB9LAoKICAvLyByaWdodCB0byBsZWZ0IHRyYXZlcnNhbCBvZiByb290J3MgY29udGVudAogIHByZXZpb3VzX25vZGU6IGZ1bmN0aW9uIChyb290LCBub2RlKSB7CiAgICBpZiAobm9kZSA9PSBudWxsKQogICAgewogICAgICBub2RlID0gcm9vdC5sYXN0Q2hpbGQ7CgogICAgICBpZiAobm9kZSkKICAgICAgewogICAgICAgIHdoaWxlIChub2RlLmxhc3RDaGlsZCkKICAgICAgICAgIG5vZGUgPSBub2RlLmxhc3RDaGlsZDsKICAgICAgfQoKICAgICAgcmV0dXJuIG5vZGU7CiAgICB9CgogICAgaWYgKG5vZGUucHJldmlvdXNTaWJsaW5nKQogICAgewogICAgICBub2RlID0gbm9kZS5wcmV2aW91c1NpYmxpbmc7CgogICAgICB3aGlsZSAobm9kZS5sYXN0Q2hpbGQpCiAgICAgICAgbm9kZSA9IG5vZGUubGFzdENoaWxkOwoKICAgICAgcmV0dXJuIG5vZGU7CiAgICB9CgogICAgaWYgKG5vZGUucGFyZW50Tm9kZSAhPSByb290KQogICAgICByZXR1cm4gbm9kZS5wYXJlbnROb2RlOwoKICAgIHJldHVybiBudWxsOwogIH0sCgogIHByZXZpb3VzX3NpYmxpbmdfZWxlbWVudDogZnVuY3Rpb24gKGVsKSB7CiAgICBlbCA9IGVsLnByZXZpb3VzU2libGluZzsKCiAgICB3aGlsZSAoZWwgJiYgZWwubm9kZVR5cGUgIT0gMSkKICAgICAgZWwgPSBlbC5wcmV2aW91c1NpYmxpbmc7CgogICAgcmV0dXJuIGVsOwogIH0sCgogIG5leHRfc2libGluZ19lbGVtZW50OiBmdW5jdGlvbiAoZWwpIHsKICAgIGVsID0gZWwubmV4dFNpYmxpbmc7CgogICAgd2hpbGUgKGVsICYmIGVsLm5vZGVUeXBlICE9IDEpCiAgICAgIGVsID0gZWwubmV4dFNpYmxpbmc7CgogICAgcmV0dXJuIGVsOwogIH0sCgogIGZpcnN0X2NoaWxkX2VsZW1lbnQ6IGZ1bmN0aW9uIChlbCkgewogICAgdmFyIG5vZGU7CgogICAgZm9yIChub2RlID0gZWwuZmlyc3RDaGlsZDsgbm9kZTsgbm9kZSA9IG5vZGUubmV4dFNpYmxpbmcpCiAgICB7CiAgICAgIGlmIChub2RlLm5vZGVUeXBlID09IDEpCiAgICAgICAgYnJlYWs7CiAgICB9CgogICAgcmV0dXJuIG5vZGU7CiAgfSwKCiAgZmlyc3RfdGFnOiBmdW5jdGlvbiAoZWxlbWVudCwgdGFnKSB7CiAgICB2YXIgbm9kZTsKCiAgICBpZiAoIXRoaXMuaXNfeGh0bWwpCiAgICAgIHRhZyA9IHRhZy50b1VwcGVyQ2FzZSgpOwoKICAgIGZvciAobm9kZSA9IGVsZW1lbnQuZmlyc3RDaGlsZDsgbm9kZTsgbm9kZSA9IG5vZGUubmV4dFNpYmxpbmcpCiAgICB7CiAgICAgIGlmIChub2RlLm5vZGVUeXBlID09IDEgJiYgbm9kZS5ub2RlTmFtZSA9PSB0YWcpCiAgICAgICAgYnJlYWs7CiAgICB9CgogICAgcmV0dXJuIG5vZGU7CiAgfSwKCiAgaGlkZV9zZWxlY3Rpb246IGZ1bmN0aW9uICgpIHsKICAgIGlmICh3aW5kb3cuZ2V0U2VsZWN0aW9uKSAvLyBGaXJlZm94LCBDaHJvbWl1bSwgU2FmYXJpLCBPcGVyYQogICAgewogICAgICB2YXIgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpOwoKICAgICAgaWYgKHNlbGVjdGlvbi5yYW5nZUNvdW50ID4gMCkKICAgICAgewogICAgICAgIHZhciByYW5nZSA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApOwogICAgICAgIHJhbmdlLmNvbGxhcHNlIChmYWxzZSk7CiAgICAgIH0KICAgIH0KICAgIGVsc2UgLy8gSW50ZXJuZXQgRXhwbG9yZXIKICAgIHsKICAgICAgdmFyIHRleHRSYW5nZSA9IGRvY3VtZW50LnNlbGVjdGlvbi5jcmVhdGVSYW5nZSAoKTsKICAgICAgdGV4dFJhbmdlLmNvbGxhcHNlIChmYWxzZSk7CiAgICB9CiAgfSwKCiAgZ2V0X3NlbGVjdGVkX3RleHQ6IGZ1bmN0aW9uICgpIHsKICAgIHRyeQogICAgewogICAgICBpZiAod2luZG93LmdldFNlbGVjdGlvbikKICAgICAgICByZXR1cm4gd2luZG93LmdldFNlbGVjdGlvbigpLnRvU3RyaW5nKCk7CgogICAgICBpZiAoZG9jdW1lbnQuZ2V0U2VsZWN0aW9uKQogICAgICAgIHJldHVybiBkb2N1bWVudC5nZXRTZWxlY3Rpb24oKS50b1N0cmluZygpOwoKICAgICAgaWYgKGRvY3VtZW50LnNlbGVjdGlvbikKICAgICAgICByZXR1cm4gZG9jdW1lbnQuc2VsZWN0aW9uLmNyZWF0ZVJhbmdlKCkudGV4dDsKICAgIH0KICAgIGNhdGNoIChlKQogICAgewogICAgfQoKICAgIHJldHVybiAiIjsKICB9LAoKICAvLyBtYWtlIG5vdGUgb2YgbGVuZ3RoIG9mIHNlbGVjdGVkIHRleHQKICAvLyBhcyB0aGlzIGV2YWx1YXRlcyB0byB6ZXJvIGluIGNsaWNrIGV2ZW50CiAgbW91c2VfYnV0dG9uX3VwOiBmdW5jdGlvbiAoZSkgewogICAgdzNjX3NsaWR5LnNlbGVjdGVkX3RleHRfbGVuID0gdzNjX3NsaWR5LmdldF9zZWxlY3RlZF90ZXh0KCkubGVuZ3RoOwogIH0sCgogIG1vdXNlX2J1dHRvbl9kb3duOiBmdW5jdGlvbiAoZSkgewogICAgdzNjX3NsaWR5LnNlbGVjdGVkX3RleHRfbGVuID0gdzNjX3NsaWR5LmdldF9zZWxlY3RlZF90ZXh0KCkubGVuZ3RoOwogICAgdzNjX3NsaWR5Lm1vdXNlX3ggPSBlLmNsaWVudFg7CiAgICB3M2Nfc2xpZHkubW91c2VfeSA9IGUuY2xpZW50WTsKICB9LAoKICAvLyByaWdodCBtb3VzZSBidXR0b24gY2xpY2sgaXMgcmVzZXJ2ZWQgZm9yIGNvbnRleHQgbWVudXMKICAvLyBpdCBpcyBtb3JlIHJlbGlhYmxlIHRvIGRldGVjdCByaWdodGNsaWNrIHRoYW4gbGVmdGNsaWNrCiAgbW91c2VfYnV0dG9uX2NsaWNrOiBmdW5jdGlvbiAoZSkgewogICAgaWYgKCFlKQogICAgICB2YXIgZSA9IHdpbmRvdy5ldmVudDsKCiAgICBpZiAoTWF0aC5hYnMoZS5jbGllbnRYIC13M2Nfc2xpZHkubW91c2VfeCkgKwogICAgICAgIE1hdGguYWJzKGUuY2xpZW50WSAtdzNjX3NsaWR5Lm1vdXNlX3kpID4gMTApCiAgICAgIHJldHVybiB0cnVlOwoKICAgIGlmICh3M2Nfc2xpZHkuc2VsZWN0ZWRfdGV4dF9sZW4gPiAwKQogICAgICByZXR1cm4gdHJ1ZTsKCiAgICB2YXIgcmlnaHRjbGljayA9IGZhbHNlOwogICAgdmFyIGxlZnRjbGljayA9IGZhbHNlOwogICAgdmFyIG1pZGRsZWNsaWNrID0gZmFsc2U7CiAgICB2YXIgdGFyZ2V0OwoKICAgIGlmICghZSkKICAgICAgdmFyIGUgPSB3aW5kb3cuZXZlbnQ7CgogICAgaWYgKGUudGFyZ2V0KQogICAgICB0YXJnZXQgPSBlLnRhcmdldDsKICAgIGVsc2UgaWYgKGUuc3JjRWxlbWVudCkKICAgICAgdGFyZ2V0ID0gZS5zcmNFbGVtZW50OwoKICAgIC8vIHdvcmsgYXJvdW5kIFNhZmFyaSBidWcKICAgIGlmICh0YXJnZXQubm9kZVR5cGUgPT0gMykKICAgICAgdGFyZ2V0ID0gdGFyZ2V0LnBhcmVudE5vZGU7CgogICAgaWYgKGUud2hpY2gpIC8vIGFsbCBicm93c2VycyBleGNlcHQgSUUKICAgIHsKICAgICAgbGVmdGNsaWNrID0gKGUud2hpY2ggPT0gMSk7CiAgICAgIG1pZGRsZWNsaWNrID0gKGUud2hpY2ggPT0gMik7CiAgICAgIHJpZ2h0Y2xpY2sgPSAoZS53aGljaCA9PSAzKTsKICAgIH0KICAgIGVsc2UgaWYgKGUuYnV0dG9uKQogICAgewogICAgICAvLyBLb25xdWVyb3IgZ2l2ZXMgMSBmb3IgbGVmdCwgNCBmb3IgbWlkZGxlCiAgICAgIC8vIElFNiBnaXZlcyAwIGZvciBsZWZ0IGFuZCBub3QgMSBhcyBJIGV4cGVjdGVkCgogICAgICBpZiAoZS5idXR0b24gPT0gNCkKICAgICAgICBtaWRkbGVjbGljayA9IHRydWU7CgogICAgICAvLyBhbGwgYnJvd3NlcnMgYWdyZWUgb24gMiBmb3IgcmlnaHQgYnV0dG9uCiAgICAgIHJpZ2h0Y2xpY2sgPSAoZS5idXR0b24gPT0gMik7CiAgICB9CiAgICBlbHNlCiAgICAgIGxlZnRjbGljayA9IHRydWU7CgogICAgaWYgKHczY19zbGlkeS5zZWxlY3RlZF90ZXh0X2xlbiA+IDApCiAgICB7CiAgICAgIHczY19zbGlkeS5zdG9wX3Byb3BhZ2F0aW9uKGUpOwogICAgICBlLmNhbmNlbCA9IHRydWU7CiAgICAgIGUucmV0dXJuVmFsdWUgPSBmYWxzZTsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIC8vIGRpc21pc3MgdGFibGUgb2YgY29udGVudHMKICAgIHczY19zbGlkeS5oaWRlX3RhYmxlX29mX2NvbnRlbnRzKGZhbHNlKTsKCiAgICAvLyBjaGVjayBpZiB0YXJnZXQgaXMgc29tZXRoaW5nIHRoYXQgcHJvYmFibHkgd2FudCdzIGNsaWNrcwogICAgLy8gZS5nLiBhLCBlbWJlZCwgb2JqZWN0LCBpbnB1dCwgdGV4dGFyZWEsIHNlbGVjdCwgb3B0aW9uCiAgICB2YXIgdGFnID0gdGFyZ2V0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7CgogICAgaWYgKHczY19zbGlkeS5tb3VzZV9jbGlja19lbmFibGVkICYmIGxlZnRjbGljayAmJgogICAgICAgICF3M2Nfc2xpZHkuc3BlY2lhbF9lbGVtZW50KHRhcmdldCkgJiYKICAgICAgICAhdGFyZ2V0Lm9uY2xpY2spCiAgICB7CiAgICAgIHczY19zbGlkeS5uZXh0X3NsaWRlKHRydWUpOwogICAgICB3M2Nfc2xpZHkuc3RvcF9wcm9wYWdhdGlvbihlKTsKICAgICAgZS5jYW5jZWwgPSB0cnVlOwogICAgICBlLnJldHVyblZhbHVlID0gZmFsc2U7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICByZXR1cm4gdHJ1ZTsKICB9LAoKICBzcGVjaWFsX2VsZW1lbnQ6IGZ1bmN0aW9uIChlbGVtZW50KSB7CiAgICBpZiAodGhpcy5oYXNfY2xhc3MoZWxlbWVudCwgIm5vbi1pbnRlcmFjdGl2ZSIpKQogICAgICByZXR1cm4gZmFsc2U7CgogICAgdmFyIHRhZyA9IGVsZW1lbnQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTsKCiAgICByZXR1cm4gZWxlbWVudC5vbmtleWRvd24gfHwKICAgICAgZWxlbWVudC5vbmNsaWNrIHx8CiAgICAgIHRhZyA9PSAiYSIgfHwKICAgICAgdGFnID09ICJlbWJlZCIgfHwKICAgICAgdGFnID09ICJvYmplY3QiIHx8CiAgICAgIHRhZyA9PSAidmlkZW8iIHx8CiAgICAgIHRhZyA9PSAiYXVkaW8iIHx8CiAgICAgIHRhZyA9PSAic3ZnIiB8fAogICAgICB0YWcgPT0gImNhbnZhcyIgfHwKICAgICAgdGFnID09ICJpbnB1dCIgfHwKICAgICAgdGFnID09ICJ0ZXh0YXJlYSIgfHwKICAgICAgdGFnID09ICJzZWxlY3QiIHx8CiAgICAgIHRhZyA9PSAib3B0aW9uIjsKICB9LAoKICBzbGlkeV9jaHJvbWU6IGZ1bmN0aW9uIChlbCkgewogICAgd2hpbGUgKGVsKQogICAgewogICAgICBpZiAoZWwgPT0gdzNjX3NsaWR5LnRvYyB8fAogICAgICAgICAgZWwgPT0gdzNjX3NsaWR5LnRvb2xiYXIgfHwKICAgICAgICAgIHczY19zbGlkeS5oYXNfY2xhc3MoZWwsICJvdXRsaW5lIikpCiAgICAgICAgcmV0dXJuIHRydWU7CgogICAgICBlbCA9IGVsLnBhcmVudE5vZGU7CiAgICB9CgogICAgcmV0dXJuIGZhbHNlOwogIH0sCgogIGdldF9rZXk6IGZ1bmN0aW9uIChlKQogIHsKICAgIHZhciBrZXk7CgogICAgLy8ga2x1ZGdlIGFyb3VuZCBOUy9JRSBkaWZmZXJlbmNlcyAKICAgIGlmICh0eXBlb2Ygd2luZG93LmV2ZW50ICE9ICJ1bmRlZmluZWQiKQogICAgICBrZXkgPSB3aW5kb3cuZXZlbnQua2V5Q29kZTsKICAgIGVsc2UgaWYgKGUud2hpY2gpCiAgICAgIGtleSA9IGUud2hpY2g7CgogICAgcmV0dXJuIGtleTsKICB9LAoKICBnZXRfdGFyZ2V0OiBmdW5jdGlvbiAoZSkgewogICAgdmFyIHRhcmdldDsKCiAgICBpZiAoIWUpCiAgICAgIGUgPSB3aW5kb3cuZXZlbnQ7CgogICAgaWYgKGUudGFyZ2V0KQogICAgICB0YXJnZXQgPSBlLnRhcmdldDsKICAgIGVsc2UgaWYgKGUuc3JjRWxlbWVudCkKICAgICAgdGFyZ2V0ID0gZS5zcmNFbGVtZW50OwoKICAgIGlmICh0YXJnZXQubm9kZVR5cGUgIT0gMSkKICAgICAgdGFyZ2V0ID0gdGFyZ2V0LnBhcmVudE5vZGU7CgogICAgcmV0dXJuIHRhcmdldDsKICB9LAoKICAvLyBkb2VzIGRpc3BsYXkgcHJvcGVydHkgcHJvdmlkZSBjb3JyZWN0IGRlZmF1bHRzPwogIGlzX2Jsb2NrOiBmdW5jdGlvbiAoZWxlbSkgewogICAgdmFyIHRhZyA9IGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTsKCiAgICByZXR1cm4gdGFnID09ICJvbCIgfHwgdGFnID09ICJ1bCIgfHwgdGFnID09ICJwIiB8fCB0YWcgPT0gImRsIiB8fAogICAgICAgICAgIHRhZyA9PSAibGkiIHx8IHRhZyA9PSAidGFibGUiIHx8IHRhZyA9PSAicHJlIiB8fAogICAgICAgICAgIHRhZyA9PSAiaDEiIHx8IHRhZyA9PSAiaDIiIHx8IHRhZyA9PSAiaDMiIHx8CiAgICAgICAgICAgdGFnID09ICJoNCIgfHwgdGFnID09ICJoNSIgfHwgdGFnID09ICJoNiIgfHwKICAgICAgICAgICB0YWcgPT0gImJsb2NrcXVvdGUiIHx8IHRhZyA9PSAiYWRkcmVzcyI7IAogIH0sCgogIGFkZF9saXN0ZW5lcjogZnVuY3Rpb24gKGVsZW1lbnQsIGV2ZW50LCBoYW5kbGVyKSB7CiAgICBpZiAod2luZG93LmFkZEV2ZW50TGlzdGVuZXIpCiAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihldmVudCwgaGFuZGxlciwgZmFsc2UpOwogICAgZWxzZQogICAgICBlbGVtZW50LmF0dGFjaEV2ZW50KCJvbiIrZXZlbnQsIGhhbmRsZXIpOwogIH0sCgogIC8vIHVzZWQgdG8gcHJldmVudCBldmVudCBwcm9wYWdhdGlvbiBmcm9tIGZpZWxkIGNvbnRyb2xzCiAgc3RvcF9wcm9wYWdhdGlvbjogZnVuY3Rpb24gKGV2ZW50KSB7CiAgICBldmVudCA9IGV2ZW50ID8gZXZlbnQgOiB3aW5kb3cuZXZlbnQ7CiAgICBldmVudC5jYW5jZWxCdWJibGUgPSB0cnVlOyAgLy8gZm9yIElFCgogICAgaWYgKGV2ZW50LnN0b3BQcm9wYWdhdGlvbikKICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7CgogICAgcmV0dXJuIHRydWU7CiAgfSwKCiAgY2FuY2VsOiBmdW5jdGlvbiAoZXZlbnQpIHsKICAgIGlmIChldmVudCkKICAgIHsKICAgICAgIGV2ZW50LmNhbmNlbCA9IHRydWU7CiAgICAgICBldmVudC5yZXR1cm5WYWx1ZSA9IGZhbHNlOwoKICAgICAgaWYgKGV2ZW50LnByZXZlbnREZWZhdWx0KQogICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICB9CgogICAgdzNjX3NsaWR5LmtleV93YW50ZWQgPSBmYWxzZTsKICAgIHJldHVybiBmYWxzZTsKICB9LAoKLy8gZm9yIGVhY2ggbGFuZ3VhZ2UgZGVmaW5lIGFuIGFzc29jaWF0aXZlIGFycmF5Ci8vIGFuZCBhbHNvIHRoZSBoZWxwIHRleHQgd2hpY2ggaXMgbG9uZ2VyCgogIHN0cmluZ3NfZXM6IHsKICAgICJzbGlkZSI6InDDoWcuIiwKICAgICJoZWxwPyI6IkF5dWRhIiwKICAgICJjb250ZW50cz8iOiLDjW5kaWNlIiwKICAgICJ0YWJsZSBvZiBjb250ZW50cyI6InRhYmxhIGRlIGNvbnRlbmlkb3MiLAogICAgIlRhYmxlIG9mIENvbnRlbnRzIjoiVGFibGEgZGUgQ29udGVuaWRvcyIsCiAgICAicmVzdGFydCBwcmVzZW50YXRpb24iOiJSZWluaWNpYXIgcHJlc2VudGFjacOzbiIsCiAgICAicmVzdGFydD8iOiJJbmljaW8iCiAgfSwKICBoZWxwX2VzOgogICAgIlV0aWxpY2UgZWwgcmF0w7NuLCBiYXJyYSBlc3BhY2lhZG9yYSwgdGVjbGFzIEl6ZGEvRGNoYSwgIiArCiAgICAibyBSZSBww6FnIHkgQXYgcMOhZy4gVXNlIFMgeSBCIHBhcmEgY2FtYmlhciBlbCB0YW1hw7FvIGRlIGZ1ZW50ZS4iLAoKICBzdHJpbmdzX2NhOiB7CiAgICAic2xpZGUiOiJww6BnLi4iLAogICAgImhlbHA/IjoiQWp1ZGEiLAogICAgImNvbnRlbnRzPyI6IsONbmRleCIsCiAgICAidGFibGUgb2YgY29udGVudHMiOiJ0YXVsYSBkZSBjb250aW5ndXRzIiwKICAgICJUYWJsZSBvZiBDb250ZW50cyI6IlRhdWxhIGRlIENvbnRpbmd1dHMiLAogICAgInJlc3RhcnQgcHJlc2VudGF0aW9uIjoiUmVpbmljaWFyIHByZXNlbnRhY2nDsyIsCiAgICAicmVzdGFydD8iOiJJbmljaSIKICB9LAogIGhlbHBfY2E6CiAgICAiVXRpbGl0emkgZWwgcmF0b2zDrSwgYmFycmEgZXNwYWlhZG9yYSwgdGVjbGVzIEVzcS4vRHRhLiAiICsKICAgICJvIFJlIHDDoGcgeSBBdiBww6BnLiBVc2kgUyBpIEIgcGVyIGNhbnZpYXIgZ3JhbmTDoHJpYSBkZSBmb250LiIsCgogIHN0cmluZ3NfY3M6IHsKICAgICJzbGlkZSI6InNuw61tZWsiLAogICAgImhlbHA/IjoibsOhcG92xJtkYSIsCiAgICAiY29udGVudHM/Ijoib2JzYWgiLAogICAgInRhYmxlIG9mIGNvbnRlbnRzIjoib2JzYWggcHJlemVudGFjZSIsCiAgICAiVGFibGUgb2YgQ29udGVudHMiOiJPYnNhaCBwcmV6ZW50YWNlIiwKICAgICJyZXN0YXJ0IHByZXNlbnRhdGlvbiI6Inpub3Z1IHNwdXN0aXQgcHJlemVudGFjaSIsCiAgICAicmVzdGFydD8iOiJyZXN0YXJ0IgogIH0sCiAgaGVscF9jczoKICAgICJQcmV6ZW50YWNpIG3Fr8W+ZXRlIHByb2Now6F6ZXQgcG9tb2PDrSBrbGlrbnV0w60gbXnFoWksIG1lemVybsOta3UsICIgKwogICAgIsWhaXBlayB2bGV2byBhIHZwcmF2byBuZWJvIGtsw6F2ZXMgUGFnZVVwIGEgUGFnZURvd24uIFDDrXNtbyBzZSAiICsKICAgICJkw6EgenbEm3TFoWl0IGEgem1lbsWhaXQgcG9tb2PDrSBrbMOhdmVzIEIgYSBTLiIsCgogIHN0cmluZ3Nfbmw6IHsKICAgICJzbGlkZSI6InBhZ2luYSIsCiAgICAiaGVscD8iOiJIZWxwPyIsCiAgICAiY29udGVudHM/IjoiSW5ob3VkPyIsCiAgICAidGFibGUgb2YgY29udGVudHMiOiJpbmhvdWRzb3BnYXZlIiwKICAgICJUYWJsZSBvZiBDb250ZW50cyI6IkluaG91ZHNvcGdhdmUiLAogICAgInJlc3RhcnQgcHJlc2VudGF0aW9uIjoiaGVyc3RhcnQgcHJlc2VudGF0aWUiLAogICAgInJlc3RhcnQ/IjoiSGVyc3RhcnQ/IgogIH0sCiAgaGVscF9ubDoKICAgICAiTmF2aWdlZXIgZC5tLnYuIGhldCBtdWlzLCBzcGF0aWViYXIsIExpbmtzL1JlY2h0cyB0b2V0c2VuLCAiICsKICAgICAib2YgUGdVcCBlbiBQZ0RuLiBHZWJydWlrIFMgZW4gQiBvbSBkZSBrYXJha3Rlcmdyb290dGUgdGUgdmVyYW5kZXJlbi4iLAoKICBzdHJpbmdzX2RlOiB7CiAgICAic2xpZGUiOiJTZWl0ZSIsCiAgICAiaGVscD8iOiJIaWxmZSIsCiAgICAiY29udGVudHM/Ijoiw5xiZXJzaWNodCIsCiAgICAidGFibGUgb2YgY29udGVudHMiOiJJbmhhbHRzdmVyemVpY2huaXMiLAogICAgIlRhYmxlIG9mIENvbnRlbnRzIjoiSW5oYWx0c3ZlcnplaWNobmlzIiwKICAgICJyZXN0YXJ0IHByZXNlbnRhdGlvbiI6IlByw6RzZW50YXRpb24gbmV1IHN0YXJ0ZW4iLAogICAgInJlc3RhcnQ/IjoiTmV1c3RhcnQiCiAgfSwKICBoZWxwX2RlOgogICAgIkJlbnV0emVuIFNpZSBkaWUgTWF1cywgTGVlcnNjaGxhZywgZGllIEN1cnNvcnRhc3RlbiBsaW5rcy9yZWNodHMgb2RlciAiICsKICAgICJQYWdlIHVwL1BhZ2UgRG93biB6dW0gV2VjaHNlbG4gZGVyIFNlaXRlbiB1bmQgUyB1bmQgQiBmw7xyIGRpZSBTY2hyaWZ0Z3LDtnNzZS4iLAoKICBzdHJpbmdzX3BsOiB7CiAgICAic2xpZGUiOiJzbGFqZCIsCiAgICAiaGVscD8iOiJwb21vYz8iLAogICAgImNvbnRlbnRzPyI6InNwaXMgdHJlxZtjaT8iLAogICAgInRhYmxlIG9mIGNvbnRlbnRzIjoic3BpcyB0cmXFm2NpIiwKICAgICJUYWJsZSBvZiBDb250ZW50cyI6IlNwaXMgVHJlxZtjaSIsCiAgICAicmVzdGFydCBwcmVzZW50YXRpb24iOiJSZXN0YXJ0dWogcHJlemVudGFjasSZIiwKICAgICJyZXN0YXJ0PyI6InJlc3RhcnQ/IgogIH0sCiAgaGVscF9wbDoKICAgICJabWllbmlhaiBzbGFqZHkga2xpa2FqxIVjIG15c3rEhSwgbmFjaXNrYWrEhWMgc3BhY2rEmSwgc3RyemHFgmtpIGxld28vcHJhd28iICsKICAgICJsdWIgUGdVcCAvIFBnRG4uIFXFvHlqIGtsYXdpc3p5IFMgaSBCLCBhYnkgem1pZW5pxIcgcm96bWlhciBjemN6aW9ua2kuIiwKCiAgc3RyaW5nc19mcjogewogICAgInNsaWRlIjoicGFnZSIsCiAgICAiaGVscD8iOiJBaWRlIiwKICAgICJjb250ZW50cz8iOiJJbmRleCIsCiAgICAidGFibGUgb2YgY29udGVudHMiOiJ0YWJsZSBkZXMgbWF0acOocmVzIiwKICAgICJUYWJsZSBvZiBDb250ZW50cyI6IlRhYmxlIGRlcyBtYXRpw6hyZXMiLAogICAgInJlc3RhcnQgcHJlc2VudGF0aW9uIjoiUmVjb21tZW5jZXIgbCdleHBvc8OpIiwKICAgICJyZXN0YXJ0PyI6IkTDqWJ1dCIKICB9LAogIGhlbHBfZnI6CiAgICAiTmF2aWd1ZXogYXZlYyBsYSBzb3VyaXMsIGxhIGJhcnJlIGQnZXNwYWNlLCBsZXMgZmzDqGNoZXMgIiArCiAgICAiZ2F1Y2hlL2Ryb2l0ZSBvdSBsZXMgdG91Y2hlcyBQZyBVcCwgUGcgRG4uIFV0aWxpc2V6ICIgKwogICAgImxlcyB0b3VjaGVzIFMgZXQgQiBwb3VyIG1vZGlmaWVyIGxhIHRhaWxsZSBkZSBsYSBwb2xpY2UuIiwKCiAgc3RyaW5nc19odTogewogICAgInNsaWRlIjoib2xkYWwiLAogICAgImhlbHA/Ijoic2Vnw610c8OpZyIsCiAgICAiY29udGVudHM/IjoidGFydGFsb20iLAogICAgInRhYmxlIG9mIGNvbnRlbnRzIjoidGFydGFsb21qZWd5esOpayIsCiAgICAiVGFibGUgb2YgQ29udGVudHMiOiJUYXJ0YWxvbWplZ3l6w6lrIiwKICAgICJyZXN0YXJ0IHByZXNlbnRhdGlvbiI6ImJlbXV0YXTDsyDDumpyYWluZMOtdMOhc2EiLAogICAgInJlc3RhcnQ/Ijoiw7pqcmFpbmTDrXTDoXMiCiAgfSwKICBoZWxwX2h1OgogICAgIkF6IG9sZGFsYWsga8O2enRpIGzDqXBrZWTDqXNoZXoga2F0dGludHNvbiBheiBlZ8OpcnJlbCwgdmFneSAiICsKICAgICJoYXN6bsOhbGphIGEgc3rDs2vDtnosIGEgYmFsLCB2YWd5IGEgam9iYiBuecOtbCwgaWxsZXR2ZSBhIFBhZ2UgRG93biwgIiArCiAgICAiUGFnZSBVcCBiaWxsZW50ecWxa2V0LiBBeiBTIMOpcyBhIEIgYmlsbGVudHnFsWtrZWwgdsOhbHRvenRhdGhhdGphICIgKwogICAgImEgc3rDtnZlZyBtw6lyZXTDqXQuIiwKCiAgc3RyaW5nc19pdDogewogICAgInNsaWRlIjoicGFnLiIsCiAgICAiaGVscD8iOiJBaXV0byIsCiAgICAiY29udGVudHM/IjoiSW5kaWNlIiwKICAgICJ0YWJsZSBvZiBjb250ZW50cyI6ImluZGljZSIsCiAgICAiVGFibGUgb2YgQ29udGVudHMiOiJJbmRpY2UiLAogICAgInJlc3RhcnQgcHJlc2VudGF0aW9uIjoiUmljb21pbmNpYXJlIGxhIHByZXNlbnRhemlvbmUiLAogICAgInJlc3RhcnQ/IjoiSW5pemlvIgogIH0sCiAgaGVscF9pdDoKICAgICJOYXZpZ2FyZSBjb24gbW91c2UsIGJhcnJhIHNwYXppbywgZnJlY2NlIHNpbmlzdHJhL2Rlc3RyYSBvICIgKwogICAgIlBnVXAgZSBQZ0RuLiBVc2FyZSBTIGUgQiBwZXIgY2FtYmlhcmUgbGEgZGltZW5zaW9uZSBkZWkgY2FyYXR0ZXJpLiIsCgogIHN0cmluZ3NfZWw6IHsKICAgICJzbGlkZSI6Is+DzrXOu86vzrTOsSIsCiAgICAiaGVscD8iOiLOss6/zq7OuM61zrnOsTsiLAogICAgImNvbnRlbnRzPyI6Is+AzrXPgc65zrXPh8+MzrzOtc69zrE7IiwKICAgICJ0YWJsZSBvZiBjb250ZW50cyI6Is+Azq/Ovc6xzrrOsc+CIM+AzrXPgc65zrXPh86/zrzOrc69z4nOvSIsCiAgICAiVGFibGUgb2YgQ29udGVudHMiOiLOoM6vzr3Osc66zrHPgiDOoM61z4HOuc61z4fOv868zq3Ovc+Jzr0iLAogICAgInJlc3RhcnQgcHJlc2VudGF0aW9uIjoizrXPgM6xzr3Otc66zrrOr869zrfPg863IM+AzrHPgc6/z4XPg86vzrHPg863z4IiLAogICAgInJlc3RhcnQ/IjoizrXPgM6xzr3Otc66zrrOr869zrfPg863OyIKICB9LAogIGhlbHBfZWw6CiAgICAizqDOu86/zrfOs863zrjOtc6vz4TOtSDOvM61IM+Ezr8gzrrOu86vzrogz4TOv8+FIM+Azr/Ovc+EzrnOus65zr/PjSwgz4TOvyBzcGFjZSwgz4TOsSDOss6tzrvOtyDOsc+BzrnPg8+EzrXPgc6sL860zrXOvs65zqwsICIgKwogICAgIs6uIFBhZ2UgVXAgzrrOsc65IFBhZ2UgRG93bi4gzqfPgc63z4POuc68zr/PgM6/zrnOrs+Dz4TOtSDPhM6xIM+AzrvOrs66z4TPgc6xIFMgzrrOsc65IEIgzrPOuc6xIM69zrEgzrHOu867zqzOvs61z4TOtSAiICsKICAgICLPhM6/IM68zq3Os861zrjOv8+CIM+EzrfPgiDOs8+BzrHOvM68zrHPhM6/z4POtc65z4HOrM+CLiIsCgogIHN0cmluZ3NfamE6IHsKICAgICJzbGlkZSI6IuOCueODqeOCpOODiSIsCiAgICAiaGVscD8iOiLjg5jjg6vjg5ciLAogICAgImNvbnRlbnRzPyI6IuebruasoSIsCiAgICAidGFibGUgb2YgY29udGVudHMiOiLnm67mrKHjgpLooajnpLoiLAogICAgIlRhYmxlIG9mIENvbnRlbnRzIjoi55uu5qyhIiwKICAgICJyZXN0YXJ0IHByZXNlbnRhdGlvbiI6IuacgOWIneOBi+OCieWGjeeUnyIsCiAgICAicmVzdGFydD8iOiLmnIDliJ3jgYvjgokiCiAgfSwKICBoZWxwX2phOgogICAgICLjg57jgqbjgrnlt6bjgq/jg6rjg4Pjgq8g44O7IOOCueODmuODvOOCuSDjg7sg5bem5Y+z44Kt44O8ICIgKwogICAgICLjgb7jgZ/jga8gUGFnZSBVcCDjg7sgUGFnZSBEb3du44Gn5pON5L2c77yMIFMg44O7IELjgafjg5Xjgqnjg7Pjg4jjgrXjgqTjgrrlpInmm7QiLAoKICBzdHJpbmdzX3poOiB7CiAgICAic2xpZGUiOiLlubvnga/niYciLAogICAgImhlbHA/Ijoi5biu5YqpPyIsCiAgICAiY29udGVudHM/Ijoi5YaF5a65PyIsCiAgICAidGFibGUgb2YgY29udGVudHMiOiLnm67lvZUiLAogICAgIlRhYmxlIG9mIENvbnRlbnRzIjoi55uu5b2VIiwKICAgICJyZXN0YXJ0IHByZXNlbnRhdGlvbiI6IumHjeaWsOWQr+WKqOWxleekuiIsCiAgICAicmVzdGFydD8iOiLph43mlrDlkK/liqg/IgogIH0sCiAgaGVscF96aDoKICAgICLnlKjpvKDmoIfngrnlh7ssIOepuuagvOadoSwg5bem5Y+z566t5aS0LCBQZyBVcCDlkowgUGcgRG4g5a+86IiqLiAiICsKICAgICLnlKggUywgQiDmlLnlj5jlrZfkvZPlpKflsI8uIiwKCiAgc3RyaW5nc19ydTogewogICAgInNsaWRlIjoi0YHQu9Cw0LnQtCIsCiAgICAiaGVscD8iOiLQv9C+0LzQvtGJ0Yw/IiwKICAgICJjb250ZW50cz8iOiLRgdC+0LTQtdGA0LbQsNC90LjQtT8iLAogICAgInRhYmxlIG9mIGNvbnRlbnRzIjoi0L7Qs9C70LDQstC70LXQvdC40LUiLAogICAgIlRhYmxlIG9mIENvbnRlbnRzIjoi0J7Qs9C70LDQstC70LXQvdC40LUiLAogICAgInJlc3RhcnQgcHJlc2VudGF0aW9uIjoi0L/QtdGA0LXQt9Cw0L/Rg9GB0YLQuNGC0Ywg0L/RgNC10LfQtdC90YLQsNGG0LjRjiIsCiAgICAicmVzdGFydD8iOiLQv9C10YDQtdC30LDQv9GD0YHQuj8iCiAgfSwKICBoZWxwX3J1OgogICAgItCf0LXRgNC10LzQtdGJ0LDQudGC0LXRgdGMINC60LvQuNC60LDRjyDQvNGL0YjQutC+0LksINC40YHQv9C+0LvRjNC30YPRjyDQutC70LDQstC40YjRgyDQv9GA0L7QsdC10LssINGB0YLRgNC10LvQutC4IiArCiAgICAi0LLQu9C10LLQvi/QstC/0YDQsNCy0L4g0LjQu9C4IFBnIFVwINC4IFBnIERuLiDQmtC70LDQstC40YjQuCBTINC4IEIg0LzQtdC90Y/RjtGCINGA0LDQt9C80LXRgCDRiNGA0LjRhNGC0LAuIiwKCiAgc3RyaW5nc19zdjogewogICAgInNsaWRlIjoic2lkYSIsCiAgICAiaGVscD8iOiJoasOkbHAiLAogICAgImNvbnRlbnRzPyI6ImlubmVow6VsbCIsCiAgICAidGFibGUgb2YgY29udGVudHMiOiJpbm5laMOlbGxzZsO2cnRlY2tuaW5nIiwKICAgICJUYWJsZSBvZiBDb250ZW50cyI6IklubmVow6VsbHNmw7ZydGVja25pbmciLAogICAgInJlc3RhcnQgcHJlc2VudGF0aW9uIjoidmlzYSBwcmVzZW50YXRpb25lbiBmcsOlbiBiw7ZyamFuIiwKICAgICJyZXN0YXJ0PyI6ImLDtnJqYSBvbSIKICB9LAogIGhlbHBfc3Y6CiAgICAiQmzDpGRkcmEgbWVkIGV0dCBrbGljayBtZWQgdsOkbnN0cmEgbXVza25hcHBlbiwgbWVsbGFuc2xhZ3N0YW5nZW50ZW4sICIgKwogICAgInbDpG5zdGVyLSBvY2ggaMO2Z2VycGlsdGFuZ2VudGVybmEgZWxsZXIgdGFuZ2VudGVybmEgUGcgVXAsIFBnIERuLiAiICsKICAgICJBbnbDpG5kIHRhbmdlbnRlcm5hIFMgb2NoIEIgZsO2ciBhdHQgw6RuZHJhIHRleHRlbnMgc3Rvcmxlay4iLAoKICBzdHJpbmdzOiB7IH0sCgogIGxvY2FsaXplOiBmdW5jdGlvbiAoc3JjKSB7CiAgICBpZiAoc3JjID09ICIiKQogICAgICByZXR1cm4gc3JjOwoKICAgICAvLyB0cnkgZnVsbCBsYW5ndWFnZSBjb2RlLCBlLmcuIGVuLVVTCiAgICAgdmFyIHMsIGxvb2t1cCA9IHczY19zbGlkeS5zdHJpbmdzW3czY19zbGlkeS5sYW5nXTsKCiAgICAgaWYgKGxvb2t1cCkKICAgICB7CiAgICAgICBzID0gbG9va3VwW3NyY107CgogICAgICAgaWYgKHMpCiAgICAgICAgcmV0dXJuIHM7CiAgICAgfQoKICAgICAvLyBzdHJpcCBjb3VudHJ5IGNvZGUgc3VmZml4LCBlLmcuCiAgICAgLy8gdHJ5IGVuIGlmIHVuZGVmaW5lZCBmb3IgZW4tVVMKICAgICB2YXIgbGcgPSB3M2Nfc2xpZHkubGFuZy5zcGxpdCgiLSIpOwoKICAgICBpZiAobGcubGVuZ3RoID4gMSkKICAgICB7CiAgICAgICBsb29rdXAgPSB3M2Nfc2xpZHkuc3RyaW5nc1tsZ1swXV07CgogICAgICAgaWYgKGxvb2t1cCkKICAgICAgIHsKICAgICAgICAgcyA9IGxvb2t1cFtzcmNdOwoKICAgICAgICAgaWYgKHMpCiAgICAgICAgICByZXR1cm4gczsKICAgICAgIH0KICAgICB9CgogICAgIC8vIG90aGVyd2lzZSBzdHJpbmcgYXMgaXMKICAgICByZXR1cm4gc3JjOwogIH0sCgogIGluaXRfbG9jYWxpemF0aW9uOiBmdW5jdGlvbiAoKSB7CiAgICB2YXIgaTE4biA9IHczY19zbGlkeTsKICAgIHZhciBoZWxwX3RleHQgPSB3M2Nfc2xpZHkuaGVscF90ZXh0OwoKICAgIC8vIGVhY2ggc3VjaCBsYW5ndWFnZSBhcnJheSBpcyBkZWNsYXJlZCBpbiB0aGUgbG9jYWxpemUgYXJyYXkKICAgIC8vIHRoaXMgaXMgdXNlZCBhcyBpbiAgdzNjX3NsaWR5LmxvY2FsaXplKCJmb28iKTsKICAgIHRoaXMuc3RyaW5ncyA9IHsKICAgICAgImVzIjp0aGlzLnN0cmluZ3NfZXMsCiAgICAgICJjYSI6dGhpcy5zdHJpbmdzX2NhLAogICAgICAiY3MiOnRoaXMuc3RyaW5nc19jcywKICAgICAgIm5sIjp0aGlzLnN0cmluZ3NfbmwsCiAgICAgICJkZSI6dGhpcy5zdHJpbmdzX2RlLAogICAgICAicGwiOnRoaXMuc3RyaW5nc19wbCwKICAgICAgImZyIjp0aGlzLnN0cmluZ3NfZnIsCiAgICAgICJodSI6dGhpcy5zdHJpbmdzX2h1LAogICAgICAiaXQiOnRoaXMuc3RyaW5nc19pdCwKICAgICAgImVsIjp0aGlzLnN0cmluZ3NfZWwsCiAgICAgICJqcCI6dGhpcy5zdHJpbmdzX2phLAogICAgICAiemgiOnRoaXMuc3RyaW5nc196aCwKICAgICAgInJ1Ijp0aGlzLnN0cmluZ3NfcnUsCiAgICAgICJzdiI6dGhpcy5zdHJpbmdzX3N2CiAgICB9LAoKICAgIGkxOG4uc3RyaW5nc19lc1toZWxwX3RleHRdID0gaTE4bi5oZWxwX2VzOwogICAgaTE4bi5zdHJpbmdzX2NhW2hlbHBfdGV4dF0gPSBpMThuLmhlbHBfY2E7CiAgICBpMThuLnN0cmluZ3NfY3NbaGVscF90ZXh0XSA9IGkxOG4uaGVscF9jczsKICAgIGkxOG4uc3RyaW5nc19ubFtoZWxwX3RleHRdID0gaTE4bi5oZWxwX25sOwogICAgaTE4bi5zdHJpbmdzX2RlW2hlbHBfdGV4dF0gPSBpMThuLmhlbHBfZGU7CiAgICBpMThuLnN0cmluZ3NfcGxbaGVscF90ZXh0XSA9IGkxOG4uaGVscF9wbDsKICAgIGkxOG4uc3RyaW5nc19mcltoZWxwX3RleHRdID0gaTE4bi5oZWxwX2ZyOwogICAgaTE4bi5zdHJpbmdzX2h1W2hlbHBfdGV4dF0gPSBpMThuLmhlbHBfaHU7CiAgICBpMThuLnN0cmluZ3NfaXRbaGVscF90ZXh0XSA9IGkxOG4uaGVscF9pdDsKICAgIGkxOG4uc3RyaW5nc19lbFtoZWxwX3RleHRdID0gaTE4bi5oZWxwX2VsOwogICAgaTE4bi5zdHJpbmdzX2phW2hlbHBfdGV4dF0gPSBpMThuLmhlbHBfamE7CiAgICBpMThuLnN0cmluZ3NfemhbaGVscF90ZXh0XSA9IGkxOG4uaGVscF96aDsKICAgIGkxOG4uc3RyaW5nc19ydVtoZWxwX3RleHRdID0gaTE4bi5oZWxwX3J1OwogICAgaTE4bi5zdHJpbmdzX3N2W2hlbHBfdGV4dF0gPSBpMThuLmhlbHBfc3Y7CgogICAgdzNjX3NsaWR5LmxhbmcgPSBkb2N1bWVudC5ib2R5LnBhcmVudE5vZGUuZ2V0QXR0cmlidXRlKCJsYW5nIik7CgogICAgaWYgKCF3M2Nfc2xpZHkubGFuZykKICAgICAgdzNjX3NsaWR5LmxhbmcgPSBkb2N1bWVudC5ib2R5LnBhcmVudE5vZGUuZ2V0QXR0cmlidXRlKCJ4bWw6bGFuZyIpOwoKICAgIGlmICghdzNjX3NsaWR5LmxhbmcpCiAgICAgIHczY19zbGlkeS5sYW5nID0gImVuIjsKICB9Cn07CgovLyBoYWNrIGZvciBiYWNrIGJ1dHRvbiBiZWhhdmlvcgppZiAodzNjX3NsaWR5LmllNiB8fCB3M2Nfc2xpZHkuaWU3KQp7CiAgZG9jdW1lbnQud3JpdGUoIjxpZnJhbWUgaWQ9J2hpc3RvcnlGcmFtZScgIiArCiAgInNyYz0namF2YXNjcmlwdDpcIjxodG1sIisiPjwvIisiaHRtbD5cIicgIiArCiAgImhlaWdodD0nMScgd2lkdGg9JzEnICIgKwogICJzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7bGVmdDotODAwcHgnPjwvaWZyYW1lPiIpOwp9CgovLyBhdHRhY2ggZXZlbnQgbGlzdGVuZXJzIGZvciBpbml0aWFsaXphdGlvbgp3M2Nfc2xpZHkuc2V0X3VwKCk7CgovLyBoaWRlIHRoZSBzbGlkZXMgYXMgc29vbiBhcyBib2R5IGVsZW1lbnQgaXMgYXZhaWxhYmxlCi8vIHRvIHJlZHVjZSBhbm5veWluZyBzY3JlZW4gbWVzcyBiZWZvcmUgdGhlIG9ubG9hZCBldmVudApzZXRUaW1lb3V0KHczY19zbGlkeS5oaWRlX3NsaWRlcywgNTApOwoK"></script>
<script>(function() {
if (!window.w3c_slidy) return;
if (!window.Shiny) return;
if (!window.$) return;
// whenever a slide changes, tell shiny to recalculate what is displayed
window.w3c_slidy.add_observer(function (slide_num) {
// slide_num starts at position 1
$(w3c_slidy.slides[slide_num - 1]).trigger("shown");
});
})()
</script>
<link href="data:text/css;charset=utf-8,body%20%7B%0Abackground%2Dcolor%3A%20%23F7F2E0%3B%0Abackground%2Dimage%3A%20url%28data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAAKIAAABkCAIAAACKIXzlAAAACXBIWXMAACHVAAAh1QEEnLSdAAAAB3RJTUUH4AcTADkvj0kloAAAIABJREFUeNrtfXl8XFX1%2BDn3LbNlMjPZ02xtuqZ7upe2FGgBgQKyCIJfBRV%2FqKACAip%2B%2BYoiIIqogIgoi4Ig%2B1aWFmjpmu5tuiZNk2ZtlpnMZPblvXvP749p0yQz2ZMKn4%2F3M59P0zdv3r3v7Ofcc85Fzjl8kQdjKAQ8sefD5ojRx01RUkCAgek2JZip%2BAws9j%2FTL05RLV%2Fsd0TmiwZqOpo8ET9DlmVxFNvHGCRVEA3wCfIX9M0RABmWtUberQ%2FtdcfcsbkyEkPBAAiAADhJROBQ%2FNZ6%2FavjQWYwYJh8voYu%2BJqaTcc8TQqTJUQA2N%2FKAbE0e%2FLSgtmCxIDA9UXkZsbwvbrQXyr97qiQGQCBAATCFCVqwKgEGBKqXzcyJhgQF6BIcMuU1GuKLUJ8wVAd5doLB97XhQ6APb4SJMZYM6%2BcfO5AePoLhmbGsMIT%2B9mejuaQrjCMCSowy6sKTO3eslTmASQiBABE4iQ1RNIqQ3lN0VQZURM0IVV5YmGa3cDODK4ZQlgflgSRkL1ZucYT9gMAJ5FhshfZczTOqz2NIS3CEAXxeWOmLRwznfqb53ONZn8s5Ax3YBfAvVZvebU2ZJYwItjCDPnmKdbpDhUA%2F7737RjXkkFKW1J08VNV%2BjZn1CwhJ%2Fj9grRFWYbRZmsEqAnoN250JTDhIJ6Ro3pWph3gxDjx88bOn5Y5HojibL2mpuyYpwEBdeK3zLkakQ1UN8e1HQBENXHUrzeFuCcqYkQMIEXGNCPLM8kTrDIwBCASMNosgQANvpZPandKyABQJ3zfNScimElCBfWltr0PLr5UCBCCGPah2KT8FOmJxbY1jaFf7O1QGf5oe%2Ft9s20X5ZtHFdGagO%2BVtQ8Dx0AExaZWToyAJjgKp2WOFyKuhgkALhy%2FuG5Piy50JKjuaJrgKOgHzQwBEFtC%2BsaW6Ja2SLk75ooIo4wyosQgbtEIAk6kCdA45ZqlGQ51QYZhSY4h3ywB4uhxBiJKyGREj275qL2UAAiw2NS6xFbhj%2FFO0u4PYCAEXZhnmmpTv7nFRQA%2F3%2BONcvjy2NFS1YzhrWWukE7DwDIQgk0OAwARTUkvOoXj0y81Ia2gwlUjMak16JnoKKQ%2B%2BU5%2B9Xjo7bpQlU%2BTGSgMCcBhYD24SkKQEFUGIGOY005XdGtb5LcHoShFPjfX8OVCS0GK0nMdI8bT1BJ1fNoxA4EE4HLHkSKjUycJgCdDaK9XBEGeRXr3vKzrNroI%2BIMHvBLipUXmEcc0Y%2FjIAe9%2Bd0xhONxHgYh7DRJLlMmkMEaAJ0Vrv4%2Fa4Yo0hnSjjDLDAb4xAcgMzTI6I%2FyVmtDV69u%2BvclZ4dXYsF8sEcfNUcdaz0wEQoDLM3bmG9o5MeyFizHZp%2BswyvjqOZkOlRkY%2Frq8Y48zMrIrZghrm8Kv1wa74pgTMUREQAQ8%2FUc%2FfzMEv25EAIZY521hPbQvYk1HMwIIEg5TKvWnQuVvTrCua3ZaZDZUuQoqYpVP%2B9pG19x05c7p9il2ZURYBBGaIinrPDNkJmTkl2XuUlFPQOugtYBBwpfPzb7y0zYEfss29zsrs7NMMhAAkBi2Z30ixOMWQOeDYoJ%2BOy9tea5pCE%2BrcUdXH9smM6m8tWpyelGWJS0uMhlje5qP%2BKNBhqgJPsGR3394ZJpDnWBVmsPDsrcJIEXGSq%2F%2BjY3OFbnGe0sdJjYsG40AGoL8vnKhMGAoLsvYZeiJ46GMWm9zXccJAPhOEf%2FDsXyF4Q2bXD%2Bb3MSJCqzZ4x35NIxVC4BvbW6X8fQjOMHXii3Lc41D02hj7YUWdV9U1xjiq0c%2BmZE5viA1hxM%2F4qqt8zZLyAhoavpYk2zol0AZAH1lrEXvqeCBCIlQEMb%2FIMCBsKhBws1t0ZUftWxojTI2dHxEBXxtg1NCEICXZewyML0XYhjccIW9h1w1h1zHnYG6lWmHOWFAE08cNVa6qltDwzKMGcPvbW0PdofjdIfyw2m24ci2yyYu1wUHAAZ40FnzwbHNa6q3NfpaJWQAYJTVFeMWDEQIyYLgskLTYxU%2BISAqqMAsTbGrVtYeDNUbmCahIACN5IAuTciYc9TPq338REhXJZSwD78e7tzpXpVv%2Br%2FZ9qFpuG9tcgKATnBJxl4j00bWT4v%2Fm2dwT0tpPBTMb4imV4VzZg7P7HrysO9Qh9YVJjZV%2ButZ6cPUXxkm%2B3XTLnyvamMgFlKYTKc0tMb1vNTMSyeezXBAzCQDgEFmVxeZDQxXFZjzzRIwtrOpcceJdsTTq7az2LcnmVVZJUHNYf7JichbdaG6oG6Rk2PbJOHaE5H9Huffl2Y4FKTBgOyh8o76ICeCqws6TJoPQBoNG54Tm2utbonaOvSUMu%2Fki0XHkB%2B1tTXy%2FLGgQeomwJ9Zkjb8KDoBpZtsN85cVeVpOOZu8EaDDDHDbC9JH5dnzRpgQPskmoWgH01LJQIiEACMiBP2lGAInChOmzkm6evjLd%2BYmHLYHfvDYd9BT0xOZmNLCM4Iv%2BKT1n8syyxKkWhgrLalJfJ6bcgo4UUFpisKI%2B9X46gg%2BSSmpfPTyl9rWyKheLombUXRULY33BF%2B%2B3a3oQsjxzj9fmFalkkauc0SnOgonJw2No4UIiKigeM4rpsBAIQY3BsSgBA0xa78bWnms0szU5iXE%2Bvtzq9uaNvrjjHsX%2FX5dbprp9siY55Fune2PcxHPfosISy1VwjChqD%2B90r%2FYF1CQXDD5na1C46jnG6eYl2abRzxDTFBIj6SRrAZImMsqseCWkSQYIx1tV3k3vE4sLmFKHGoF6btatbyt3RMYdhzCQSgMLx1W%2FufFqbPz1D7UFWM4Z072mWGnODJRWl0pnaTiozOAmNWUzTtb5X%2BVfmmLNNAxQdjeEdZuzcmOglYEJw3xvStSSlneCsMEbc07q9or41xjYgkxtJN9iX5M3OtmSd9sH4slQFLvyKj69rsrXY5SJBUgOMPtrVX%2B3Tsfb4PGkL73DGN6PZpqRnGM7cRzokttx8GIIOEd%2BzwDDDIwxg8Wxkoc0Y7cYwAWSb2wBz78OOBDBERBfGoHhUk4v%2Ft7eZALPTXPW%2BWt1ZG9Vic0bkQbUH3K0c%2B2VC3mzEGI5dWQAAgobgkY89O3%2FhDwXwZe76ryvCGTa53VmQ6DEnYJSbogXKvUcIJqcrV4yxCDCQgPGIhLAK8csyJlxvyagLaKzWBa8dZ%2BuZGhrClNfpkpc90SlwjAAE8uzQDR4I1d7dUHHLWtId9nLiMUobZPiNz%2FKzsSYn6OMpjLx78EAEAUJAQRIokR%2FSYQVJUJh9oq5JQWlowa6TQjJ2cMS%2B1Ol3xb%2FSUyEz0IARE%2BMYm91srMnuY54zhz3d5GEKE058WpQ1Y4tEIYnpJluGEZixzRv58xP%2BlfLNV7uvJrWHxk10eUxeVHOL0j6UZdoUNU1jrxF86uCYQDTJkBkmO86EvGtjYsPegs%2BaaqSulLh4UY%2ByTYzvigNAFX1ZYOi1jXDyjaO3x7e0hL0NpV%2FORaZnFbMRloCA21ui8MreGkmmEjhi%2FZ3dPwVjeHtvUEtEE3TbNliIj%2FCeGJsQ9M%2B1xX%2Bjh%2FR19xHYYws1bXazbb%2BmuabZpDoV6lfCnRp92KEN88cCH4ViYIYsHPSQmEQARSci8Uf8bFZ92fUIoFjre0RyX0pdMXDI7a5LMZIbMbkz96rQLU40WAFAleW9LJRuwCYb9Cu2uMnBeBvv9fEckwVRmCBtaIu%2FVhTpXyxg8fMCrSphjkq4vNg%2FGQB1ZgkCHkd082coFrWmKHHTHejO7btvhcUZE172v83JN145PLucZsmMdjZ%2FUbH%2BrYv37VZt3t1SEtEjSmAZDVtZ0MKxHCEATvDRn8g0zV91cesUNMy6ZllnMSQBAW9Bz0Fnd%2BZPmgBtAAIDdmDLeUdA1UiuEOCt%2FVpxWmgLOgZtgNCiI6wIWZhkemecI6T1%2FaJTw1%2Fs73FER%2F9mnTZFjPk0XcNd02yCdkBG2Zono6xNScs1yioJ37uxItMUYw79W%2Bnc4I6yL2ZVvkR6c50hUNIjYFnL%2Fbd9ba6rLKt11zQFXnbe5rHH%2F8%2FtXb2ksZwniQpA44qpBQEFiUd70Jfmz4sFqs2I8Z%2By8qRnFACAzafuJQ52%2FDWjheN5IusmW%2BDpZFodOOgCEtQgbVZAuzzXdWmLVEkCgMvz5bg9jiAx%2Fd9BrlHCyTV6SY6L%2FFIZPMwH9Zq49pFNAF09V%2BLtiGgF2O6PPHvVLXcSmxODZpRlJcdzga%2F334bUa1%2BPaVBdckGDIGOLelooPqjb34OmQFvbHQgAgM7m0u7UlhDi7sDSeBeWNBLRT6VAGSYmb1r5YKPFdfNFQfGpV6nP%2Fkbp%2F%2BoV74s2C6JuTUhZmGBPv39se294WeaM21BETfo1%2BPcfR2zYOJfskFSG93zmI2ybZlcsKTETwwrFAW%2Bj0xl2HJm7b4TZ0QXxM0JOL0s3JgvsxHnv%2F2CaVKQDAgaZmFF9QvGhx3gyzYuIkEFm1p%2Bmgs7qrmxTlGhcCAEyyQZXUHg9UJFmRFAJgjAW0cPxiriVdkCAAV8jjDnl7WAO7mw8zlAAg05LG%2BhbEpz%2FYv55MupkvBPxpUZqSMI9Bwqcq%2FE9V%2BBSGX8oz5qfIA3xylyloIHcO8IFdF3zXDDtDYAi%2FLj9pLTKGN2x0dZ0yyumemfYSu5rMisE9LZVxFkeEG6ZfdG7RvElphXNySm6ceUmRLQeIJMZ2nDjYNZ6lMjnO31Ee04SWqFBiXEMAIjJJJ9nGZrRmWdIQgCF7reJTT8TXaeqtr91V721BgCjXZmVNZGdAKAqiJxal94hcEkCVX49wign6fknq5yqD2iDB3TNsMUGb22KbWyKMwV073Z6Y6BJRoSuKLJcXmZNuAiLDo%2B56RCQSZ%2BXPshpS4hKYgATRhcWL49ZyRyTgjQY6f2VWTCmqCQAieqzCVdtVpDNkZU0HVEkGALNiNCpqpzo%2Fb%2Bx8LjgAcMFfOPDBP%2Fevfu3wJ4%2FvfOWws4YhI4Bx9tx8azbrJTAkonosyrVTn1hEj%2FUBlx43R%2FWYJrrtEE91qJfm97Si4zy0NMtYkPL5Kv4ggksLzdMdaoqMP9%2Fj%2BUdVcGNLpOsNJTblZzP72kjuiPjj9D3ent8jBG2Q1TSTDQBkxlxhbxc1L01wFBKAzKQN9bv3tlae8sHYzuZDe5qPxK2zuTkl1EW75VjSzx67WJAOAKqkBGJhZ8gjIUNEQcJhtF46YZkgISdlvtLsKSUZxV0xQiTimiYJUATdPOdK7GaskMrkrkHp%2BCbY2hNh7Omt0rcnWT%2BHxRBC0G%2Fm2C9b55QBnq70q11UssLwicUZ%2FW3m4yn53ec91M3SXlY4q6L9uCDBUNraUL6lsdwsm4JamAHEmduimObmTKZuQlHs7khb7Vq43HEkTQkIQkFAQIC4YMz0BXnT4hZPcjYyyqpRVgds9JLDmJL0etf%2F2g3sojzTmhPhrhdlhmuaQlMdQ0uxGN1ASqZZ%2FnKh6b2GcFfHKibopeUZan8OisOYEoiFGUKNp2lG1oSuDB3VYu0RbzzglWG29VDqX5v%2BpX8fXhvTtXgUO6JH4oa9IGFSTNdMXUkJJv1rx4NBYXzHNc%2FKIjmG4D2zLDaDeYw1k4g6rVp2JvnjqrHmHgETBHi1NnQi%2BHms%2FBCC1jdHu1lnBN8Yn1Jg6SdQR4ImphUSESLb2rjfFw10hq4YYx%2FWbI3LObvBajdYe%2FzWophunLlqZtYEhYHKNBm5ynQCnJ0z%2BcYZl5jknj7LHlesQ%2BMAoCAPk5Jvyy7JKMyxpPfYrzzTSjGRZ2WEe%2Fd6nknmfZ7JmHaioHirPuSJ8a7imiE8dyxwYZ6p2Cr3Ld7m5EzZ23IUgASJfx74YFpmcV5Kpl8L72upjPEYInISC8ZMPbnj0X1IKC0rKl3fXlzW5jGxWEioBOabSzMTnR3G8I26YKcfzwmuLEpeY5CcmzWuh7RISD%2F9CWqRPhIPgt1vDmmRGI8lrum12qApmZe53x1743hwIHkHZ3L84ZDPkBAIM0l402ZXUOuHIlVJuWjCWfFsPYXhsfbqdbVbdzeVcxEFQC7EeEfB9O7CvAepIFKQG5yaNcgNDClpymlYE1tbTqeap8g4P9OQ9HFy0gD63tbK3S2HsQsRRHjse3OuMkhq0rj8X%2Fe%2BZe6iywloYlrBBcWLu0Y8PBG%2BtimSFJVGCR856F2cZcgxSYNkuVEZjOEDezt6wwAH%2BM5W17%2FPyexD%2BhDRONuYa0pWrD62qSJgd2ppp1ZLsyyVS%2FKnLRwzvd%2Bs3n6F24aWSJBTPD%2BJAK4bZ%2BktF4MNEIjYD7x73Iw9rjCGfzrs7%2BMJMsMfbWsfJD%2BPln1%2B1Ku91xjqYy0NQf6%2Fezr6TkAQJLIs6TeVXplunVodzqoJZ9aEM2tCmd8pvXxB7rRBZXL1Rosv1QSNp6SjXxPXF1t63SIbxA4VDQri3a4c8WirG0J9Y7EhJH5d7h1Mhc6ocDNDuGeXp%2B8KKIawpin8wrHAAFZLZsXY1TCWURlK0n%2FCL1qC%2Bn5PrPPyOTlGo9Ir08qDmAcHBXHsavXfur3dLPeTxqswWN0QmmJTvjJugLWKI2%2BCMYZ%2FOOg9EdalBJLUiWwKC52qTDdK%2BOQR38RUZVGm2udie02DQYQTIR7Wu6IRT%2BXhYEDrsnUBVBvkeBqqxBBfrA5YT%2BE1zOnaPgs85dFmFMbw9m3tGk%2BSCpg4jcrwdwe8E1OVWWkKnPGQCQJsbY38qzpokpNsilw0xvSNidbrPmvrzFaWGd65w%2F3uyiy7OhS%2FFBEf3t9R5oz1QvSnCx5COl2%2FwQkJsOoUJRkqW9CL8TVIv5kG%2BzXFhdvzVYEyZzTx62k2dVKqktQcu3WbuznEB4aXkRzNYX73Lk8ijuOlvz%2BfbR9rlX860xbt4vozhBs3tQ%2BZIBWGRin5p4dHknhDJ44J4NwxJlnCkUDzoCGOALCxNfrkEV%2Bingvp9OA8%2B2%2Fn2WMJcoYAEOhrG1wdWr8dNUaS32Ocf3Nze1JQRTg9UOpgAELQ5UWWK8daOmUTAbhj%2FEfb3SNe9DvwoXG6qr%2BSfDZ0PPZnyJS7tTt2dCtH6IwX%2FnyWLc3A0g3SQ3PTosly7nWia9Y7%2FTFxxoD1wGF7SEteGn9hnmlprpFOhcZ%2BOtM22XZ6%2FxEBdrtiT1f4ho%2FpmABt0B8aY5EnpCp9P3ng6fiDyAVDoP0eeuNwe2IwRBAsyjReeYr6zhtjvH58yr9rAokcH%2BHip%2BXqZZlGE8ZGVWgLwvfbS6NkTDpBmkH61ZxuOUBC0JOL0i5f1xY%2Blf8kM%2Fjb0cA0h3pWpmHIEsYs4S9m2%2FhgizUIiq39t4oYuAk20FwwCXlNOGdTx1gJk8ydquIj8%2B2dUBOCbptqPeqNHfAkKXsUoLztnH9R%2Bl5H8iz%2FEbC0dWKrnXPDpCZ9JQJ48eyMROVhkPDvZ6Vftd7Z6bYaJbxjh%2Fvt87KyTUOs%2BVIkXJlnGkitSTzPAQCABCADgn698BGOaTMUe%2F3F5YHCxHR8BOAEzy3N7BHUFASPL0q%2Fer3TFUludq12zV1qrxhvau2tTGuISwXRrlvXuGZRL%2B48F%2FDc2RkpvfiBBSnyb%2BY6frrb04lpleE3t7jeWZGtDKeB0ADs84PO6n2tR9uCHQQkM6kwNXt%2B7tT81Ow%2BkD2CgCOd2Nr2WQcCBXIyPo4KemZperaRJbXWXl6e6VCT84GEYnPHlE3eKQkBmqGDU0Z%2BIFD4fvuc3nAc4fTHRWmTUuVeg84EK%2FJM1xen8C7854%2FRD8vaR88ci%2FDYiwc%2BXFe3yxcNGmXFJKsKk5oDrtcr131UU8Z6Ty4fGTRLyOujma%2B3LXZqqUk71cQE%2FXlR%2BhRbrwnrKoN%2Fn5Nh7SWOI6GoDWe%2B7lzk1lLYaRqioTFxgBvfci4oD4yVQPRiddPTZ2X0XdgX1zi3T0%2BdbFO6Nqg70BH77eBieYNgpJcPrfHHgjJKAKQLXeNaPENIZXK1u%2F6DY1t6w%2FRwKyIZw%2FpAbK17joenJ2ViBNAEPbYwfV5%2FUDNI%2BMq5mV%2Ff4HJGeCKUECAm5NWuOeNMbfOs1RJGBmusMIZBTdrinXIsnCsjx2TkGM%2Bpe3pJ%2Bqw0ZSCBOCHoqSUZl37cEuEnQSYhvl4XnJamXlIQbyuDcneBoUp4ighQ6p5zA4C9MyRuqNsT0aMIKIimZ42fm1NiVc0tQffmhr0tARdDVu1pqPM2F1ize0UzYwgEA2%2BlgwDIWHl75Pmq4Oa2iElyJMVxfDy%2FLHOyTe4XaghgkfD1czNvLms%2F0r3BQ5d4Am%2BMptdHMrKVlvO92jSHEfq0PuK9rRjDstboa7WB7c5Uhiky9hp7Mcj43JLMfIs08L1vBeG5pZlXf9bWiU6DhL%2FZ37H%2BRCjO3zV%2Bjl3Wc9cOdxzLDOGw93TGXECnu7a39xbuRmAT5SoEJkgszJs%2Bf8w0IYQgkWW2X12y4s2KT1sCbgml3c2Hi2y5iYa3HMfxfXs8VoVdO86SnyIDJK%2ByZPFmj4i%2BKH%2BnIfzq8aArIiQGRqnXYLVVYS%2BcnZGmDqIbKkN4ZmnGfXs8a5rCci%2BijyE59eybNrsdKl6Ub1qea44LdurOGV7N2KbZfrEvuN3l4wQyQh%2BilBNMtcl%2FXZKBAIPNb8izSL8qTbt3j7urW7jdldwP3Nme%2FLouaJsr2tsUGYp%2FQnr83Vkcx10kilheOPfFgx8qTG4P%2BXWuJxbvyAAQ1emT5ggC%2FLM6UGCWFmQYzWjwx2xmSWfACVAn5tOtr9aGqny0zx2rDehWhTGEPpL5Y4KWZxsfnp9GNOiyfSHovjmO0jTDbw96%2B0CMzMCv06u1oX8cCzJ2lpnFDEyXQOjANCGHhAKIMnCGHAH6zuvRBH1nUsq3Jw8xj1gQnJ9nPOi2vNK98dsIDosUjdcCZ1ocSb5VTQZJEUQaabrQE7P5ZYbwQWOIC5IZpirMq9HHzWGdUglmAwAjIgQByAA2dITjwLL1F6nXBN1f6rgg3zTklE0h6PIi06Is9c6dnqM%2BTe0TdiYZAXQOLCTULjbdgPLL4g2YH5prL0gZVtc6Iej2GbZjAa28XRuNLJiYkBCBCHyRYBJJwPWY0GWUJGAsWbMWGRDeqAv1EI8y0smmmDjY1dCiTONv59lVNtyWrYIg0yi9sDzzzdrgowd9%2FeTCDun5CsOfzLKtKjQLQcNPIhaCHluQfum6Nk905DMYT0RtDLgAOaiFm3ytuSmZXVQY29daJQECgNVgUeUkQTE87o1esc6ZogwLhggQ4jTVptw2zTYnQx3ZvGtEiHL68xH%2FO%2FUhTZDCkIa91GyjdO1Y8zcmphCN8IanOyqq%2FfqIMzSB1ODa3BZ0xSMkl01clpeaDQBEYl9L5caGfQqTiWhJwexZ2RMT9ST%2Beq%2F7o6bwcFbg1cSiTMP3JltLMwwj0Peyd3fIHxNv1gZfqAl2xIRZGjSyBYFfo0WZ6vXjU5ZlGyRE8YU6%2FiKkhZ8tXy0zBgCchFU1m2SDPxYK69H4tqRJMd04a1XS%2BDZ%2BUB94rirQGOIAIA2YBjkBAZgkuDjf%2FPXxlmyzfGYqJ%2BK93fe0R9%2BrC33WGo1yIgKWmHt2sh8lCDr51RSbsnKM6fJCk1lhX7gTLzrDnA2%2B1neObpASDGkCMkjqN2ZcLLPkgRAUnCNj9QFta1tkU2v0uF9vDXOCk%2B4HQ4w3ReAEcYGZZWSFFnl%2BhmFBlmG6QwWi%2FwjQGAMArA3oVV6tyqs1BnVnVEQFcSIZ0cgwzcDyzHKxVR5rlafaFUAk8QU9u6Ybpn3RwLraXQ3%2BNiF4vFDKJBsnpxeeXTinD%2Bvl9FkXcZ9Y58KvUVOIN4e4VxNRLhiiWWZpKss1S1lGZpZRlth%2FCrt9oDx54FnAFx21ycIGLKJHXGFfjMesqtlusCpyP3uRvR5pgkMLfv53fC6HDMMMav93fCEEwH9B8F8092%2F3%2FnecKeNrdIR2MkuHAYC7I%2Bz2RAKhWCymE4GqSCaTkmY3ZmXEj9scRDiJDbh%2F%2FhAOEWCDb84fb2A8WG8%2BKbVzznEYmIkv3uuLtHvC%2FqCmxXTOSZLRoCqpVjUjzWwxK4MCizyQKXVdfLa1bte%2B5mO1bh7juqD4IX10itAkxpiEOVnWmdOy5s4cM7HY0S%2B%2BEeGOX37q90V6swwkhmaDnJZmLshLnTQ%2BffGcXGRsgC%2FGGPvVH7c0NPTfCZ0AGEOLUcnONE8oTp8%2FK7eowDZw8B2pan%2Fo8a0GpVsYOaqJfz526dBIk%2Bv8s20Nu%2Fc1H6tp1zTOeTc3MB42kBgazeq0SZnzZucumps3ENbq6%2FBAxlhzi%2B%2B11ZVbttcbVenkZjgBjzd1BgACZMgQJOk060SjusGoLltUcP7ycQV58W7slBTNt9%2F7sdcbAYCkq0REdiotiHMRiYnF8wuuvbxkTI61Xwgyxu773ca6es8g2RkiUT0jI%2BX6q6Yvnpc3EDxVHHM%2F8PuNqtoTzS89dcWg0MwYq2vseHN15dbdjeZOUPc3dF0IwBVLx15%2B0aT0NHMfM8q9sVokyv%2F24u5tOxsMqmQ2ypxTKKJPGOcYV%2BjIy7XabUajQeaCwmGt3RNubg00NnlrG3yCc6NRBhKbyurWrK8eW%2BC4%2BPzxyxYW9C33Vi4fL3WPwBFROMo9HZHWVn9dk9egMItJ3n%2BweefepkvOn%2Fi1q6YLLkbeNEAwGuVAIPL437avWZd%2B162LTf33ex6uR8IYutzhv7%2B4d9%2FBVpNBShlMh2lZZgCwaVvdJ5tqzl5cdONXZxlUllTtyEkpq%2Fxw6x%2F%2Fsp1IGFSJc7JaDVdeUrJsUb6qyj20WPx4rLh%2BEkIcOda%2BcWv9lu0NkgRmo9zm9P%2Fz3%2BWL5uYpvW9NyxK7%2BrIphiT5fifLwmIxvml7wytvHY5pukFha9cda20L3vG9haN0jh0AGFSptqHj9nvXPvKLlSkpKozaYIyt3VDz4iv7JQlNhqGf9mBQpLKdjdt3Nf3w%2Fy0onZGTCBmWOPHqj6se%2FtOTxfscAAAPCklEQVSWOJ0qqvytr5X%2B%2BeGLzl1aKMtMJLThJwJxqjs%2FAJRMSP%2FejXNf%2FMuXb7yuNDMjJabxrvK8dwuLkn1OziXL7NwlRU8%2FesmSBYW6LhjDPeVN7350dFTrWRBAi%2FF7H94wepMwho8%2Fs%2BsfL5VL0gjMwRAA6HdPbH3r%2FcpE81PugeOX3jj4%2FtoqgypxLqZOyb795vmqKg%2BKb%2BI3n3NWwblLivYfaXvlrcO9m684qMd%2B5%2BulisI%2B23xcUaR%2Fv3Xo%2FOXjDIPkAIfdlGo1dJmXojHe1OznnKtKkkd5PKFX36285vIpo3CUJHvosa1HKtvU3nM0dF2Eo7rJpNpSVEmWYjHe4Yvoum4yKlIv1GdQpdffO%2BzxRr51%2FayuWJO7TvzumqMfratWVabrYsXy8Td%2BdWZvB2gMwDkBIjF9csbMe5b3DqPBPVkIceNXZ%2B3YcyIcjhkU9t7Hx75y6ZSBL08IumjlhPOXFyd%2Btbu8%2Bal%2F7tFjPQ81kyT2ztrKay4v6X2pODQcP%2Fb3nRVHnUmxRQSaLmbNyFm2sGBmSZbF0lVrkMsd3negZd2W%2BvoGT1JVqCrssy3HbanqVatKkjSMOlrd%2FsqbhyQGnNPKc07iePhkO7J8QEJcfP5EQQAI23c1DtY3FdSpC7qN0hnZf%2FnNl1JTk5RRSUR7D7aOoAnGGH64rnrH7sYkScoIui6WLi786%2B8vufuWxQvnjDGZ5O4rpTS78bxlYx%2B855zf3LuiZHKWpiXBkcTwjfcqjhx19dTNiPjw42VxGVgyOfOGa2eOnoEzLDQDlM7IjkQ0AGhxBkZSikp48w1zdS4SOe9Esx9HLh2kzRV6%2Bc2DSRiRwGQyPHjvipu%2BVmo29aMohRBjclLuvnXxHd9fxDklBsmMBvbIk2Xd0MwYe%2F7lcqFzIgJkd96y%2BPOJ4%2FjISjfHXX0k0vhIrnPqpHSjIdH1oEikjyw%2BHCQrs2dfKk9qctns5j%2Fcf35eTsrAgS%2BEmD09%2B9H7L0iUKUQgOH%2F2Xyf7szMA8Pmj67fUAUIsxr%2F3zbnSmdvOGAqL6Fx0FkzIg7aD%2B%2BmIJCczxIwmpXcDYHBCu76hY%2B%2F%2B5sR5JVl68OfnyEM65yPNYbzv7rN5EuWIG8pq3R3hOHmxNeur4%2Bdg5%2BZYF5SOObMyeNCjoTmgyBIAyAYFRzq1TtdFom2Rl5tKI5F4whj715uHzOaeJefhiHb3rYuNw%2FCbiwrsl188OXGRjOHqtVWMMUZEZbuaGENNFxetmEj0%2BRXX8XXv2NUYtyGmTcocWcKqqeuIRrQEs4jNnpY1IosPhbR9B1sSmyWWzsydND5teHauuOqSEsWgJjjTuG1XI%2BeceTrCjSd8ACDL0pxZ2Z%2FzdKlIlH%2BysSb%2Bx4XnFo%2BgDcEY%2B%2Ber%2B3sEczSdf%2BXLU0eElRFh4%2Fb6RN2v6eKyL00avj9CJK5eNUUkdPhwtYfqm%2Fzs8FGXKjMASE8zO2ymzzcrs4ce2xL%2Fe2yRY%2BbUrJF6bDis3%2F%2FopuO17u6Ao%2FHj0ledP3GE0MzKD7Qk2hLWFEPJxIwR0H8EK5YVRRLap5hNyp7yZrmmrkNRGABMLHZ8PrGLCIis3R16%2BPGyNqcfEQnwzsHHtBGgqcm%2F98BpJ5hz4faED1Q49%2B5vNnTfF%2BKcigrt996xrL9ZBmEcNJzwJV6cPCFjpAAly9Kk4rTG7rMgwvF6r%2BxqD8VpIX%2BM9YwrZgQAQjAZld5CKy53qLa%2BY%2FP2hp37mk0GBoiSLP3fncvSHKbBMhky%2FGzL8U831nSdX5ZQYqzHxomiyld9adKq8ycOgJIGuoZAMBaO6IksOH6cY%2BTATkUFjsYEYmp1BuRAMBYXUClW0xlXzAQAWoz%2F4GcfJWaS6lzomohpXOdClZlRZZGIPrc075ZvzTOobGiCVJKYJPWDKC5o6Zy86SVZA6fUAdlfYU3TRA9nVRCl2UfspGciyM40c0499kJ8%2Fqis6SJ%2Bh0mV4D80%2FP5oz5ZTiPHsFIagykwImjE1%2B8pVJcVF9lMpDaM1JIaby%2Bo%2B2VCTkWm54ZqZ82bljEi8VteFEELqvndEgszmEdzoJJMpfgBZNzTHYrp8sq8PwnCA17f%2FStB7DT4AY7hofkHXID4RhCKasz1U39Cha1xRJETkQowZTIRomMrEaJAC%2Fsjv%2F1w2vSTrx99fpCrDPsmplzOYxYieOJ%2B8NT6ibDTKAMAQgmF9yAr2lbcPG9Re25ikp5nPXlyQbAUEALLEbrh2ZtJ9QM7Fzn3Nf39hD%2BfiSKXr5w%2Buf%2FjeFYwNCwqCuqLndEPbJFggMBqkqur2u3%2F56SO%2FXCEnjw4OVGirCkvcj5IY%2BoLRkSNO9AeimDCL0azIDpsREYiwoyPEhlSUjAivv3vY2nuWxeQJGWcvLuyD8DkXIlmcFxEWlObOm3nxT%2B5f5%2FaEXK7go09tv%2FvWIYbcSdCys8bOnt6zAwsS%2BMNaS4t%2F74GWE80%2BufumAiL4%2FJGHHyu798dJre6BgstiVlRF0nTe4w3bWgNs2LXgnXhubg0kEpPDZpTzcq2cE2NY1%2BiDpEds9G9HocmsJlrLgiga1Ye%2FeCbhA%2Fecc9v%2FfhyNauUHW1avrVp1wcQhYJoACvKsc2Zk9%2BY9f%2FWKaVU17sef2eXzhrtyNgIcOdpWtqtp4ZzcIb%2BFyaiYLIrm5T1o6FClc2hgT4rn6uOeRFYZk2uVp0zMiES52SRXH3cP1cCjF%2F58WaJmr2%2F03vPgelUegZ0QVZV%2BeffZt9271qhKL795sHRGdm52ysiq4zjdjB9rf%2FS%2BFbf938fBQDdZalDlF147MMB0z97GhLFpe8pP9LjYeMLnD8YsphFot%2BjpiDQ2%2B1K6x8w1TZSMz2BjC2xmiwIAXn%2B0MZn%2FPkCdlzhGdJMQsjItN%2F3PHE0XqsIefWr7UBPB%2Bv%2BVJOMN187kCZZRwBeub%2FQNh4xKZyQx2jWdb93eMPw9GMbY2x9VpiTsi8R0UTozmymKNGNKFgBICJu21Z%2FZvtA4KJmxYtnYKRMzAaCtLfD2h1WjtFQimFGSlZiGhwxrB5Df38dYurBAS6AeWWJvvF8Bw%2FYRff7ouo3Hk4iQcWl2m5EJIVYuL9Y5MYZrPzt%2BZsuWB50L9sOb5uuCZJm98tZBtyc8SjMaDXIieyGCuyOcQFuDIjU6b%2BnYxKuxqPbsy%2FvZMFwIxtgTz%2BxMbJCvc3HBOcVEwABg5tSs7MwUABCcv%2FTW4eHMN9oj1apef%2BUMTRcmo%2FTQY2WjtNRwRE9K7clCbzQYMqVrLiuJJPSCR8RPN9Zs3l4%2FtNdhjL327pHDlc7Er1IshrMXFxIRi3PJLd%2BeF4rojOGHH1fVN3o%2Ft2gWRBetGF%2BYZyOC1jb%2Fu2uOjgamK6pcPMGyEAQ2m3GYnk9qquHilRMSMz0MqvT0P%2FZs3jZoTDPGXn7r0NsfViQml0Vj%2FMbrZp08dCR%2BaVyh%2FcJzJwhBisJ%2B89hWzj%2B%2FyQVCiB%2FcNF%2FThcTwjXePDEl09w04fPnNQ4kCkADycqzDMS%2FiDH3dFVMtKUlOmZEk%2FMvzu55%2BYS%2FrJV6WuE5dEw%2F8cctHn1SpyRIIZ0zNXjgnLy6AWCfsvnXdjOxsKwCEwrF7f7vpjKjoIdpQuTnWC1dMICLG4LG%2F7RgRhkYExpjXF73vd5ta2pIcgKfIbPL49GGaF3H0%2FPQHZ8WSnTKpKtLW7XU33fH%2BmnU1gaAWP6U7kX3j63xzdeVNP37%2FWLUrqSmqGpXbb17Q6f7JXYXSL%2B9cdtu9n2ia3nzCe%2FcvP%2F3V3cvNZnk09wmG3OpRfP3qGVt2NEbDsWM17k831Z63tGgge1b%2BgNbm6sn9XJDXF2ls9pcfaD5Y4WQAiYEkIrrovIkj1aqjKD%2F19u8ufPQvZYmVY4jIdf6v1%2Fe%2F%2Bs6hvDG2qZPSx%2BSmploNqsyimvD6Ik0nfIePuk40%2B4Sg3qpydA4P%2FHiZwSB1gqSbV24wyo%2Fef%2F6d930cCWlud%2BjWn310x3cXzZiaNYSYACJIo3mEKxfizu8u%2FN%2BH1puM8vP%2FLl9QmmsxK%2F2y0bsfVLy1%2BvBpAsNOXwkkCeOltkmHrMjXXF4yUqUFQtC82Tnf%2F%2Fb8vz63O2k2pywzImps6mho7DgVhkDAeAc0RARE6A3HnODB%2Fz0nJ9vSlexZQkxO%2BuP9F%2BTn2zgXQPTAHzY98IfNVcc9jLEB%2BqmMMU2nLTuannh21ym7AEdD3E8oTjtnyTghSEJ44pldAxHdkoSqIqmKpKqSqkon%2F1aYLLM%2B1KGmi5%2F8YPHIlo8IQUsXFPz0tiVMkvqQQ4jAGEoSk2WUJWR9LRNIUIrV%2BPv7VibaEElibIrC7v%2Fp8jffr3z17cMmo3yspv3%2BRzZmpFsWzcufOS1r6sT03tDW6gweqnDuOdBcWdUejmhxHHNOfHSSUoQQ37xuxu7yE7rODx5p3ba7aUFp7ojPEomJn%2F3wrInFab2gGYez%2FqmTMp548ILHn9tdvr9ZHd5%2BfyisX3Du%2BBu%2FOpMlO7NV7o3Wrrxk8rJFhU8%2Bt%2FtYjUuW0OsNf%2FRJ1eqPKjVd2GzGzHRzikWVZcY5BcNaR0fY2R5iQIpyMqNKYsi5yMhIufTCSecuKRqlfWJVlf%2FnKzOfeXGPqkhPPr977sxLRqSINC7VdSHyxtjuumVxmt0wUtV%2BiSrfYJTvvmXxoQrncy%2BXtzoDMhtcO5l4ULmo0P7db8zJH5Mqelmo3IdUSXcYf3HnstoG79r11Xv2N7s7wiaDrKqyFtNPNPu60jMBmA0SEUQ1TgRF%2BamzZ%2BQumpc%2FtsAWL05LBh4kQUTD6nBMRMvPKly%2Fpba21s2AfvfnsntuWxqfjgbfMYYE6YJ0XaQ5TFMmZa5YNnZGSVY%2FySoUL7%2BjHqAbLFuXTEp%2F5JcrD1U6P9lw%2FMCRVr8%2FZjTGmykml%2BScUziqp9vNs2fknH%2FOuOIiR2eJeXLh30fvka7qlnPe2Bw4cLjteL2nzRns8EXDEZ0EIQOTQbGlGjLSzWNyrJPGp08sdljMCgD2y8Eff3Y8EtUliV14bvFwuDAY0tasq1EUJgQtXzLWnqoyhp9trfd6owPnNkQ0mZUMh6lgjNVuM8qyNBAJ5PKEN5c19Fi8zumqVVOGJsAYY5rG65p8B4%2B01TV0OF2hOKiBBGPMbFLsNkNWZsq4QvvMqVm52RZJGtA6%2Fz%2BwT9ZvElr84wAAAABJRU5ErkJggg%3D%3D%29%3B%0Abackground%2Dposition%3A%20right%20top%3B%0Abackground%2Drepeat%3A%20no%2Drepeat%3B%0Abackground%2Dattachment%3A%20fixed%3B%0Amargin%2Dright%3A%20200px%3B%0Amargin%2Dtop%3A%20100px%3B%0A%7D%0Ah1%20%7B%0Acolor%3A%20black%3B%0Atext%2Dalign%3A%20center%3B%0Afont%2Dsize%3A%2036px%3B%0A%7D%0Ap%20%7B%0Afont%2Dfamily%3A%20%22Arial%22%3B%0Afont%2Dsize%3A%2025px%3B%0A%7D" rel="stylesheet" type="text/css" media="screen, projection, print" />
</head>
<body>
<div class="slide titlepage">
<h1 class="title">Creación de paquetes de R</h1>
<p class="author">
Alex Sanchez (<a href="mailto:[email protected]" class="email">[email protected]</a>)
</p>
</div>
<div id="de-qué-va-todo-esto" class="slide section level1">
<h1>¿De qué va todo esto?</h1>
<ul>
<li><p>En estos talleres discutiremos dos formas de trabajar mejor con R (o, al menos de hacer lo que muchos creemos que es mejor …)</p>
<ul>
<li>Aprenderemos a <strong>crear paquetes de R</strong> de forma sencilla y rápida</li>
<li>Aprenderemos como <strong>compartir el código</strong> mediante el sistema de control de versiones <code>Git</code> trabajando en el repositorio<code>Github</code>.</li>
</ul></li>
<li><p>Y seremos más felices :-)</p></li>
</ul>
</div>
<div id="porque-quisiera-yo-hacer-paquetes" class="slide section level1">
<h1>Porque quisiera yo hacer paquetes?</h1>
<ul>
<li>Para tener un código más
<ul>
<li>Robusto,</li>
<li>Extensible,</li>
<li>reproducible</li>
</ul></li>
<li>Básicamente para <strong>hacer programas mejores</strong> y <strong>ahorrar tiempo</strong></li>
</ul>
</div>
<div id="porque-trabajar-con-sistemas-de-control-de-versiones" class="slide section level1">
<h1>Porque trabajar con Sistemas de Control de Versiones?</h1>
<ul>
<li>Para disponer de un sistema de seguimiento y recuperación de las sucesivas versiones de lo que estamos desarrollando.</li>
<li>Para que yo y quien lo desee pueda siempre acceder a la última versión (o a versiones anteriores).</li>
<li>Para compartir mi trabajo con los demás pero <em>también conmigo</em> ya que puedo acceder siempre a mi trabajo desde cualquier equipo.</li>
</ul>
</div>
<div id="qué-necesitamos-para-hacer-paquetes" class="slide section level1">
<h1>¿Qué necesitamos para hacer paquetes?</h1>
<ul>
<li>Nos harán falta algunos paquetes.</li>
</ul>
<div class="sourceCode" id="cb1"><pre class="sourceCode r"><code class="sourceCode r"><a class="sourceLine" id="cb1-1" data-line-number="1"><span class="cf">if</span> (<span class="op">!</span><span class="st"> </span>(<span class="kw">require</span> (DevTools))) <span class="kw">install.packages</span> ( <span class="st">"DevTools"</span>)</a>
<a class="sourceLine" id="cb1-2" data-line-number="2"><span class="cf">if</span> (<span class="op">!</span><span class="st"> </span>(<span class="kw">require</span> (roxygen2))) <span class="kw">install.packages</span> ( <span class="st">"roxygen2"</span>)</a>
<a class="sourceLine" id="cb1-3" data-line-number="3"><span class="cf">if</span> (<span class="op">!</span><span class="st"> </span>(<span class="kw">require</span> (testthat))) <span class="kw">install.packages</span> ( <span class="st">"testhat"</span>)</a>
<a class="sourceLine" id="cb1-4" data-line-number="4"><span class="cf">if</span> (<span class="op">!</span><span class="st"> </span>(<span class="kw">require</span> (knitr))) <span class="kw">install.packages</span> ( <span class="st">"knitr"</span>)</a></code></pre></div>
<ul>
<li>Y algunas herramientas que se encuentran empaquetadas en <code>RTools</code>
<ul>
<li>Para Windows las debe descargar <a href="https://cran.r-project.org/bin/windows/Rtools/">de aqui:</a></li>
<li>Para Mac debe tener <code>XCode</code> instalado</li>
<li>En Linux además de R, es necesario haber instalado las herramientas de desarrollo de I</li>
</ul></li>
</ul>
</div>
<div id="qué-necesitamos-para-compartirlos-por-git-github" class="slide section level1">
<h1>¿Qué necesitamos para compartirlos por Git / Github?</h1>
<ul>
<li><p>Creareamos una cuenta en <code>GitHub</code> (la web desde donde compartiremos el código).</p></li>
<li><p>Instalaremos el programa <code>git</code> en nuestro ordenador</p>
<p><a href="http://r-pkgs.had.co.nz/git.html">Instrucciones para hacerlo</a></p></li>
</ul>
</div>
<div id="una-nota-sobre-el-cómo" class="slide section level1">
<h1>Una nota sobre el “cómo”</h1>
<ul>
<li>Hay varias formas de hacer paquetes.</li>
<li>Clásica: Google _ “How to create R packages” _
<ul>
<li>Bottom-Up: Creando cada componente y enlazándolas</li>
<li>Estilo de los manuales de CRAN o del seminario de John Fox</li>
</ul></li>
<li>À la “Hadley-Wickam”
<ul>
<li>Aprovechando herramientas de desarrollo contenidas en Rstudio</li>
<li>[Writing an R package from scratch] (<a href="https://hilaryparker.com/2014/04/29/writing-an-r-package-from-scratch/" class="uri">https://hilaryparker.com/2014/04/29/writing-an-r-package-from-scratch/</a>)</li>
<li>[Write an R Package from Scratch with Github] (<a href="http://www.r-bloggers.com/write-an-r-package-from-scratch-with-github/" class="uri">http://www.r-bloggers.com/write-an-r-package-from-scratch-with-github/</a>) –</li>
</ul></li>
</ul>
</div>
<div id="primer-paso-pensemos-qué-queremos-hacer" class="slide section level1">
<h1>Primer paso: Pensemos qué queremos hacer</h1>
<ul>
<li>En esta sesión trabajaremos <em>con un ejemplo</em>:
<ul>
<li>Empezamos escogiendo <strong>una</strong> función sencilla con la que crearemos un paquete</li>
<li>Vale la pena perderr 5 min. pensando en un buen nombre para su paquete</li>
</ul></li>
<li>Un ejemplo naïve:
<ul>
<li>Empaquetaremos una función que permite visualizar dos o más variables cuantitativas con puntos y / o boxplots.</li>
<li>La llamaremos <code>boxPlotWithDots</code></li>
<li>Para facilitar el ejemplo la <em>recuperaremos de un repositorio de GitHub</em>:</li>
</ul></li>
</ul>
</div>
<div id="una-función-de-ejemplo" class="slide section level1">
<h1>Una función de ejemplo</h1>
<div class="sourceCode" id="cb2"><pre class="sourceCode r"><code class="sourceCode r"><a class="sourceLine" id="cb2-1" data-line-number="1"><span class="co"># source ( "https://raw.githubusercontent.com/alexsanchezpla/usefulFunctions/master/boxplotWithDots.R")</span></a>
<a class="sourceLine" id="cb2-2" data-line-number="2">boxplotWithDots <-<span class="st"> </span><span class="cf">function</span> (myExpres, lev, aTitle, groupLabels, <span class="dt">addBoxplot=</span><span class="ot">TRUE</span>)</a>
<a class="sourceLine" id="cb2-3" data-line-number="3">{</a>
<a class="sourceLine" id="cb2-4" data-line-number="4"> <span class="kw">beeswarm</span>(myExpres<span class="op">~</span>lev, </a>
<a class="sourceLine" id="cb2-5" data-line-number="5"> <span class="dt">ylab=</span><span class="st">"Expression"</span>, <span class="dt">xlab=</span><span class="st">"Groups"</span>,</a>
<a class="sourceLine" id="cb2-6" data-line-number="6"> <span class="dt">main=</span>aTitle,</a>
<a class="sourceLine" id="cb2-7" data-line-number="7"> <span class="dt">labels=</span>groupLabels) </a>
<a class="sourceLine" id="cb2-8" data-line-number="8"> <span class="cf">if</span>(addBoxplot)</a>
<a class="sourceLine" id="cb2-9" data-line-number="9"> <span class="kw">boxplot</span>(myExpres<span class="op">~</span>lev, <span class="dt">add =</span> T, <span class="dt">names =</span> <span class="kw">c</span>(<span class="st">""</span>,<span class="st">""</span>), <span class="dt">col=</span><span class="st">"#0000ff22"</span>)</a>
<a class="sourceLine" id="cb2-10" data-line-number="10"> <span class="co"># Segons un post de: https://www.r-statistics.com/2011/03/beeswarm-boxplot-and-plotting-it-with-r/</span></a>
<a class="sourceLine" id="cb2-11" data-line-number="11">}</a></code></pre></div>
</div>
<div id="ejemplo-de-uso" class="slide section level1">
<h1>Ejemplo de uso</h1>
<div class="sourceCode" id="cb3"><pre class="sourceCode r"><code class="sourceCode r"><a class="sourceLine" id="cb3-1" data-line-number="1"><span class="kw">library</span> (beeswarm)</a>
<a class="sourceLine" id="cb3-2" data-line-number="2">expres <-<span class="kw">c</span> (<span class="kw">rnorm</span> (<span class="dv">10</span>,<span class="dv">5</span>,<span class="dv">2</span>), <span class="kw">rnorm</span> (<span class="dv">10</span>,<span class="dv">10</span>,<span class="dv">2</span>))</a>
<a class="sourceLine" id="cb3-3" data-line-number="3">trado <-<span class="st"> </span><span class="kw">as.factor</span> (<span class="kw">c</span> (<span class="kw">rep</span> ( <span class="st">"CT"</span>, <span class="dv">10</span>), <span class="kw">rep</span> ( <span class="st">"TR"</span>, <span class="dv">10</span>)))</a>
<a class="sourceLine" id="cb3-4" data-line-number="4">titulo <-<span class="st"> "Treatment effect"</span></a>
<a class="sourceLine" id="cb3-5" data-line-number="5">groupLab <-<span class="st"> </span><span class="kw">c</span> ( <span class="st">"Control"</span>, <span class="st">"Treatment"</span>)</a>
<a class="sourceLine" id="cb3-6" data-line-number="6"><span class="kw">boxplotWithDots</span> (<span class="dt">myExpres =</span> expres, <span class="dt">lev =</span> trado, <span class="dt">aTitle =</span> titulo, <span class="dt">groupLabels =</span> groupLab)</a></code></pre></div>
<h2 id="section"><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABgAAAASACAIAAAC2oxHNAAAACXBIWXMAAB2HAAAdhwGP5fFlAAAgAElEQVR4nOzdeZxP9eI/8DObZUZZwhD52qprKtEiLbQR9SVtKhJpEQ99K+3qp/26ldCmm0S6yVXdyrcU0SLaRCH7Ul1FQ5MakbHM8vtjHt/xuWNMMWPOOJ7PPzw+n/d5n8+8zrnz6Pq8nPM+cXl5eQEAAAAA0RUfdgAAAAAA9i4FEAAAAEDEKYAAAAAAIk4BBAAAABBxCiAAAACAiFMAAQAAAEScAggAAAAg4hRAAAAAABGnAAIAAACIOAUQAAAAQMQpgAAAAAAiTgEEAAAAEHEKIAAAAICIUwABAAAARJwCCAAAACDiFEAAAAAAEacAAgAAAIg4BRAAAABAxCmAAAAAACJOAQQAAAAQcQogAAAAgIhTAAEAAABEnAIIAAAAIOIUQAAAAAARpwACAAAAiDgFEAAAAEDEKYAAAAAAIk4BBAAAABBxCiAAAACAiFMAAQAAAEScAggAAAAg4hRAAAAAABGnAAIAAACIOAUQAAAAQMQpgAAAAAAiTgEEAAAAEHEKIAAAAICIUwABAAAARJwCCAAAACDiFEAAAAAAEacAAgAAAIg4BRAAAABAxCmAAAAAACJOAQQAAAAQcQogAAAAgIhTAAEAAABEnAIIAAAAIOIUQAAAAAARpwACAAAAiDgFEAAAAEDEKYAAAAAAIk4BBAAAABBxCiAAAACAiFMAAQAAAEScAggAAAAg4hRAAAAAABGnAAIAAACIOAUQAAAAQMQpgAAAAAAiTgEEAAAAEHEKIAAAAICIUwABAAAARJwCCAAAACDiFEAAAAAAEacAAoB9zMMPPxxXMgcccEDYB0FELF68uHv37s2bN09JSalcufJBBx3Url27QnNmz5594YUXpqWlVa5cOTk5uWbNmt26dQslLQDszxLDDgAAwD5p/PjxvXr1ys7OLhjZsmXLunXrYuc8/vjjAwYMyMvLKxjJysr6+eefyy4lABAEgSuAAIByrmXLlrGXLw0YMCDsRCErJyfk119/veGGG2Lbn52tWrXqzjvvjG1/yptycjIBoAwogAAA2G3Tp0//wwt53nnnnc2bN5dNHgCgeG4BA4B9TO3atVu0aFHkpnnz5sW+TU5OPuyww3aeVrly5b2SjP3JypUrC428+OKLZ5999vbt23c1JyEh4c0332zdunXx1w0BAHuDAggA9jG9e/fu3bt3kZuSkpJiv1o3b978s88+K6tc7F9++umn2LcNGzbs0aNH8XOOP/74c845Z68nAwCK4hYwAABKqkqVKqUyBwDYS1wBBAD7nX79+j3zzDMFb1u3bp1/odAvv/zy0EMPvfvuu8uXL//0009btmxZaMcPP/xw4sSJH330UXp6emZmZs2aNevVq9e+ffuuXbvu6q60AmvWrHnppZfmz5+/atWqVatWZWRk1KlTp379+occcshxxx136aWX1qtXL3b++++/P2nSpPwdY8c/+uij/JV6Tz/99HPPPTd/cOjQobG3v5100kn9+vXLzs5+7rnnXnrppaVLl27atOnggw9u1arV1VdffeaZZxbMXLBgwahRo6ZNm/bjjz8mJSU1a9asWbNmPXv2POWUU4o/nD04Fc8///wHH3xQ8LZJkyb33ntvEARz58597rnnPvzwwzVr1mRnZ9etW/ekk066+uqr27Ztu8cnZLfs1rEUxJgxY0bseHp6+s4rKM+ZMyf27bJly/LnpKSkPPjggyWJsbP09PQJEyZMmzZt6dKlGRkZ2dnZNWvWPPLII88444zevXvXrFmzyKMo9ZMJAOVXHgAQFYmJ//FPO61bty5yWt++fXee9sUXX1SvXr1gcM6cObG7LF68+LTTTivmbxTdu3dfu3ZtkT9u69att99+e6FshVSoUOGOO+7Izs4u2Ouhhx4q/u8wt9xyS8HkTp06xW7q0aPH999/f9xxxxW541VXXbVt27a8vLwHHnhgV6n69OmTk5NT5OHs8anY+bTn5ubefffd8fFFX5F9+eWXb9myZc9OyJ+0B8fyhzH+jJo1a5bKKc23bdu22267rZiVrSpXrvzXv/419n/QvXEyAaCccwUQABAsX768Q4cOv/76a5FbP/74486dO2dmZhbzCePHj581a9a0adMaNWoUO56Tk9O1a9c333yz+ADbtm176KGH0tPTx44du5vZi5Cenn7mmWeuWLGiyK2jR4+uXr165cqVH3jggV19wrPPPluzZs2//vWvhcZLcip2dtddd/3tb3/b1dYXX3yxQoUKzz33XPEfssdK91jCivHbb7916dJl+vTpxeyelZV11113ffXVV6+88squ6jYAiDz/FwgABDfddNOu2p81a9Z06dKl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118vdIlQkQo9d/zzzz/ftm1bhQoVSnpsu6mEp6IUlfyElJNjKWGM/Nd9+/Yt2Lply5auXbtecMEFJ5988oEHHjhnzpznn39+69atBRMSExP79+8fm6Gc/HYBQBlQAAEAu5SQkDBmzJgzzjgjJycnf2Tr1q2DBw8ePHjwrnbp379/wb0555xzzhdffBG79YMPPvjggw+K+YmxX9fzNWnSJLYCmD9//iGHHJKamnrJJZfcddddu3U4JVHCU1GKSn5CysmxlDzG1VdfPWHChOnTpxeM5OXlvfbaa4WuAypw5513HnbYYbEj5eS3CwDKgFvAAIDitG3bduTIkQkJCX9mcs+ePR977LGCt9dff33t2rWLmV+jRo1Cz4DPyMhYt25d7MiJJ55YaK+ffvppwYIFmZmZfyZSKSrJqShFpXJCysmxlDBGQkLChAkTWrRo8Wd279Wr1z333FNosPz8dgHA3qYAAgD+wFVXXTV58uRCl04UkpaW9o9//OOFF16I/TJfvXr1KVOmFFqopcApp5zy6aefdu/evdB43759Y5cK6tev3wknnFCC+KVpj09FKSqtE1IejqXkMVJTUz/++OM+ffokJu7ywvaqVas+/fTTY8eOjY8v/FffcvXbBQB7lVvAAIA/1r59+8WLF7/++utvv/32559/vm7duqysrPr16zdo0KBJkyY9evQ49dRTi9yxZcuWixYtevbZZydOnLhixYq1a9empqaecMIJPXr0OPfcc/Pn3HDDDYWu+vn1119r1KiR/zohIWH69OmjRo0aP378999//9NPP1WqVCklJaV69ep79ZB3ZY9PRWkpxRMS+rGUSoyUlJSRI0fecccdEyZMeO+991asWPHzzz8HQVCzZs2WLVt26NDh8ssvP+CAA4rct7z9dgHA3hPnaZcAAAAA0eYWMAAAAICIUwABAAAARJwCCAAAACDiFEAAAAAAEacAAgAAAIg4BRAAAABAxCmAAAAAACJOAQQAAAAQcQogAAAAgIhTAAEAAABEnAIIAAAAIOIUQAAAAAARpwACAAAAiDgFEAAAAEDEKYAAAAAAIk4BBAAAABBxCiAAAACAiFMAAQAAAEScAggAAAAg4hRAAAAAABGnAAIAAACIOAUQAAAAQMQpgAAAAAAiTgEEAAAAEHEKIAAAAICIUwABAAAARJwCCAAAACDiFEAAAAAAEacA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ICKaNGkSBMFXX331h4/3mj17dsF8gP2BAggAAIiIQw899PDDD//pp5/efPPN4meOGjUq+L+VgAD2BwogAAAgOm688cYgCG6++eb169fvas7UqVPHjx9fqVKlfv36lWE0gDApgAAAgOi46qqrWrVq9e2333bo0GH16tVBEGRnZ/fp02f06NH5EyZPnnzxxRfn5uYOGjRo5+WiAQBlH+MAACAASURBVKLKgmcAAEB0JCUlvfHGG6eddtqXX37ZrFmz/v37H3PMMaNGjZo+fXrNmjX/8Y9/vPHGG3l5eT179hw4cGDYYQHKjgIIAACIlIMPPnjWrFnXXnvtq6+++vDDD+cPrlix4rzzzguCoEqVKvfcc8/NN98cFxcXakyAMqUAAgAAoqZ69eqvvPLKF198MW7cuGnTpi1dujQxMfHkk0/u2LHjFVdcUadOnbADApQ1BRAAABBNrVq1atWq1dKlS5s1a9a0adPp06eHnQggNBaBBgAAAIg4BRAAAABAxCmAAAAAACJOAQQAAAAQcQogAAAgyqpXr56UlFSrVq2wgwCEyVPAAACAKEtNTZ03b17t2rXDDgIQJgUQAAAQcWlpaWFHAAiZW8AAAAAAIk4BBAAAABBxCiAAAACAiLMGEAAAEFkLFiyYOXNmenp6hQoVGjVq1KFDB48DA/ZPCiAAACCCpkyZcscdd8yfPz92MCEhoWvXroMHD27UqFFYwQBC4RYwAAAgUvLy8gYOHHj22WfPnz+/Tp06F110URAEtWrV6tSpU1JS0oQJE4455pipU6eGHROgTCmAAACASLn//vsfeuihChUqPProo6tWrXrggQeCIDjooIPeeuutlStXXnTRRZmZmeedd97s2bPDTgpQdhRAAABAdMyZM+e+++5LTEycOHHizTffXKFChdit9erVe+WVV/r165eVldWjR4/t27eHlROgjCmAAACA6Lj33nvz8vJuvfXWs88+u8gJcXFxTzzxxBFHHLF8+fIXX3yxjOMBhEUBBAAARERmZubUqVOTkpJuueWWYqYlJibedtttQRC88sorZRUNIGSeAgYAQGFbtmyZMmWKu2PY5yxZsmT79u2HH374+++/XzC4Zs2aIAg2btz46quvFgxu27YtCIJPP/00dhD2FXXq1GnTpk3YKdjHKIAAAChsxIgRxV9AAeXZsmXLLr744kKDa9as2Xlw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nAIIAAAAIOIUQAAAAAARpwACAAAAiLjEsAMAAACUF6tXr/7xxx+zs7Nr167duHHj+Hj/ZA5EhAIIAADY323fvn3cuHH//Oc/v/nmm4LBWrVqnXfeeX379q1WrVqI2QBKhQIIAACIppycnDlz5syZMycjIyMxMfGQQw459dRTGzZsWGja999/36dPnxUrVgRBUKNGjaZNmyYmJn7//ferV68eNWrUq6+++tRTT5144okhHABA6VEAAQAAEfTWW289+uijq1evLjTepk2bgQMHHn744flvf/zxx4svvjgjI6Np06Z33HFH27ZtExIS8jctWrTokUce+fjjj6+44oqxY8fqgIB9mgIIAACIlJycnLvvvnvChAlBEDRq1Khdu3b16tXLzs5evHjxe++9N3PmzDlz5gwZMuTss8/Oy8u7/vrrMzIyTj755GeeeSY5OTn2c4444oixY8cOHjx4zJgx//M///Pee++5FwzYdymAAACASHnooYcmTJhQuXLle++994ILLohdyHnDhg2PPPLIhAkTbrzxxho1avzyyy9z586tU6fOiBEjCrU/+eLi4gYOHLh8+fKPP/74mWeeueOOO8rwOABKkwIIAICiff/9N5988l7YKWD3LFu2bMyYEYmJiTfffHPdutU+++yDQhPOOef0TZsyJk2adP3119SvXz8Isjp0aPv117OK+cwOHdp8/PG0V1554ZRTjo2Li9ub8eGPbdr0W9gR2CcpgAAAKNprr73w2msvhJ0C9kR2dvDgg/2Ln/Pzz+k//7wgCIIXXnjohRce+sPP3LAhvVevs0onH0CZi//jKQAAAADsyxRAAAAAABGnAAIAAACIOAUQAAAAQMRZBBoAgKI1aNDkkEMahZ0CdsO2bdtmz56dkJDQqlWr2Ke/7+yXX35ZsmRJcnLy5s2bExISjj766MqVKxc5Mycn5+uvv968eXPjxo3r1q27d4LDbpg//wsPAmMPKIAAACjahRf2uu66QWGngN1zwQUXzJ8//7//++pu3boVM61Xr15BkNm//60rV6584403fv45afTokY0bNy407bfffrvuuus2b1512GHHv/nmm0lJSXszO/wpXboct3Dhl2GnYN/jFjAAACA6+vXrFwTBo48++u9//3tXcyZMmPDxxx9Xq1ate/fuDzzwQIsWLb7//vsuXboMGzasYK+ff/75xRdf7Nix4yeffFKrVq1nn31W+wPs01wB9MdWrFixevXqn3/+eevWrbVr165Tp07z5s3DDgUAABShffv2HTt2nDJlSvfu3Z944onjjjsudmtOTs6YMWOGDBkSFxd37733HnjggUEQjBs3btCgQRMnThwxYsSIESMqVqyYkJCwefPm/F2OOeaYJ554ws1fwL5OAVS0119//amnnvryyy83btyYl5dXaGtcXFxKSkrLli1vvPHGCy64IJSEAABAkYYMGbJx48ZPPvnk0ksvPe2009q1a9eoUaOsrKwlS5ZMnDhx5cqV8fHxt912W+fOnfPnV65c+dFHH73sssvGjx8/c+bMjIyMIAhSUlJOPPHE888/v0OHDnFxcaEeEEApUAAV9v777/fo0WPt2rXFzMnLy9u0adPMmTNnzpxZt27dV1555ZRTTimzhAAAQDGSk5Off/75ESNGjBo16sMPP/zwww9jtzZs2HDQoEGnnXZaob1atmzZsmXLIAi2bt2ak5OTnJxcZoEByoAC6D+MHDmyX79+sZf8xMXFJSYmVqxYMf+hAFlZWVu3bs3Ozi6Yk56efuqpp7744ovdu3cPJzQAAPCfEhISrr/++h49ekydOnX27Nnp6emVK1euV6/eaaed1rZt28TE4r4HVaxYscxyApQZBdAO3333Xf/+/fObnaSkpNatW/fv3/+SSy4pcvKUKVOeeOKJ6dOnZ2Vl5ebm9urV6/TTT3djMAAAlB81atS49NJLL7300rCDAIRPAbTDtddem5OTEwRBw4YN586dW61atWImd+zYsWPHjrm5uaeddtrMmTOzs7P79Onz1ltvlVVYAADgj6Wnp8+ePTsjIyMpKal+/fqtW7d2bxewf1IA7fDJJ58EQZCQkLBgwYIqVar8mV3i4+NnzJhRvXr1zMzM6dOn7918AADAnzZ37twhQ4Z88cUXsSs8VKxY8cILL7z++utr1aoVYjaAshcfdoByJCsrKwiCv/zlL3+y/SnQrl27IAgKnhMJAACEa+TIkRdffPGsWbNSUlI6dux41VVX9ezZ8/jjj8/Ozh4/fnynTp2++uqrsDMClClXAO2Q/y8Du9v+BEFQo0aNIAhyc3NLPxMAALCbRo8e/cgjjyQkJPTv379v376x93x99913991338yZM6+44op//etfhx12WIg5AcqSK4B2yH8WwMqVK3d3x9mzZwdBkJSUVPqZAACA3bFs2bKHH344Pj5++PDhN910U6EVfxo1ajR69Ojzzjvv999/v/HGG/PXAAXYHyiAdmjUqFEQBOvXr//b3/725/d655135s2bV7A7AAAQoscffzwnJ6dXr17//d//XeSEhISEv/3tb//1X/+1bNmySZMmlXE8gLAogHa444478l/ceeedHTt2/Prrr4ufv2rVqp49e3bq1Cn/3rGC3QEAgFD8/vvvH374YUJCQr9+/YqZVqFChWuvvTYIAgUQsP+wBtAOV1555ahRoz7//PMgCN5999133333wAMPPPLII1NTU1NTUw8++OC4uLi1a9euW7fup59+WrRo0fr16wv2Pemkk3r37h1edgAAIFi8ePG2bdtatGhx0EEHFT/ztNNOC4Jg7ty5ZRELoBxQAP2Hzz77rGPHju+++27+299+++3TTz/9w73OOuusgl0AAICw5P8bbZ06df5wZu3atRMSEjIzM3NychISEvZ+NICQuQWssClTpnz00UdpaWnx8X9wcuLj45s1azZ9+nTtDwAAlAf5Sz5v3rz5D2du2bIlJyenUqVK2h9gP+EKoCK0bdt20aJF2dnZb7zxxkcffbRo0aLffvstKysrLy8vOTn5wAMPbNasWZs2bbp27Zr/4LC9ZOHChWPGjNmDHbdt2xb831PtAQBg/9GwYcMgCBYsWPCH1/XMnz+/YD7A/kABtEuJiYldu3bt2rVrWAHOOuus9PT0Pd5948aNpRgGAADKvwYNGjRt2nTlypXvvvvuOeecU8zM8ePHB0FwxhlnlFU0gJApgMqv6677/+zdeXhN1+LG8XVyInMESSQRQ0LRRGomBDXPBDXLpdTQ3BpLaatqHtrGNbRX05ZUuSiliHkKiogiBHVEZDBExhqSkPHknN8f5/fk5hqCneNstu/njz7b2mtnv73Pfdp67bXWuODgYAkP3r592/CxktEjAQAAAK+4kSNHfv7554sWLWratKmTk9MT54SFhe3Zs8fa2jogIMDE8QBALhRAr67p06dPnz5dwoO2trbZ2dkvdXkaAAAA8Grq27fv1q1bz5w5M3To0B9//LFq1aqPTNi7d++0adP0ev2kSZNcXFxkCQkApkdHAAAAAEA51Gr1999/HxAQEBMT06VLl4EDB3bo0KFatWq5ubnR0dFbtmw5fvy4ECIgIGDUqFFyhwUA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1IxQAAEAXh0rV64UQixcuNDe3v5pc1xdXWfMmFE0GQAAhbl//36bNm2WL1+u0+kCAgKWLVsmhKhWrdr333/ftGnTpKSkgICA6dOnyx0TAEyKAggAlCM9Pf38+fP29vY9e/YseeagQYPMzMzCwsIKCwtNkw0AANPQ6XSDBg36888/a9SoERkZuW7dus6dOwshrK2t//nPf546dWrlypWWlpaLFi366aef5A4LAKZDAQQAypGYmKjX69966y0LC4uSZzo5Obm4uOTm5qamppomGwAAprFx48b9+/e7uroeOXKkbt26j9xVqVSjRo1avXq1EGLq1Knp6elyZAQAGVAAAYByGD7nUavVzzPZMM1wSDwAAIrxzTffCCG+/vrrKlWqPG3O4MGDe/XqlZmZGRwcbMJoACAnCiAAUA53d3chRFxcXPGFXTY2NvXq1WvevHnxmRkZGSkpKWXKlHFxcTF1SgAAXpobN25cuHChXLlyzzzs8qOPPhJCcB4CgDeHudwBAABG4+bm5u3trdFoDh482KVLF8OgSqWKiop6ZObWrVu1Wm379u3LlClj8pgAgP+XlZX1+eefp6WlyR1EOQxLmy0tLQMCAooGs7KyhBC3b98eMGBA0aBWqxVCXLx4sfggSu/dd98dN26c3CkAPAEFEAAoyogRI6ZOnTp9+vS2bdtaWlo+cU5GRsacOXMMk02bDgDwP86cObNixQq5UyhQamrq5s2bHxnMysp6fFCr1T4+iNLYt2/f2LFjVSqV3EEAPIoCCAAUZezYscHBwefPn3///ffXrFnzeAeUlZXVv3//GzduNGnS5JmfxwMAXqq2bdvu2bPnwYMHcgdRjitXrsyaNat27drz5s0rPn716tXy5ctXrFixaCQjI2P06NH29vYhISEmj6lkNWvWpP0BXk0UQACgKNbW1tu2bWvZsuWmTZtiYmIWLlzYsWNHw37P+fn5O3funD59ekxMjIuLy+bNm83M2AkOAOSkUqm6du0qdwpFuX///vz58+Pj49u3b1+hQoUSZq5du1YI4efn179/f1OlAwA58Z/+AKA0devWDQ8Pr169+vnz57t27ers7Ny0adNGjRo5OTn169cvJiamXr16ERER1apVkzspAABGVq5cuU6dOhUUFCxevLiEaVqt9uuvvxZCsAEQgDcHBRAAKNA777xz+fLloKAgb2/ve/fu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49avX//EzYASEhK++OILIcTEiRPVarUpsgIAAAB4ySiAAECBvv/++yVLluj1+ooVK7Zr165GjRo6nS4mJiYsLOzOnTsqlerSpUt9+/ZdtGiR4bQvA71ev3v37lmzZt2/f79Dhw4DBgyQ8W8BAAAAgBFRAAGA0qxdu/Zf//qXWq2eNGnSqFGjLCwsim5lZ2cvX748JCRECHHt2rX+/fv7+Pxfe/cZXlWV9w14JZAEEkroIiAdlSFSFLFXyuCIoOAI6igWFMFBBOzYFWYUUZRimdFHUWwjKgqi4ggWEBVFB0VGEVRaMCIgHZLzfjjvlSdPAqEYcnB7358Wa6+1899cXFmH39l77RaHHnpoZmZmdnb2e++998MPP4QQOnXqNGLEiORk+8QBAEBECIAAIuX7778fNmxYUlLSyJEjTz311EJH09PTr7vuutq1a99+++1paWlly5b9z3/+85///Cd/QJ06da644oozzjgjKSmpdAsHAAD2IgEQQKSMHTt269atZ511VtH0J1/v3r3ffffd6dOnX3DBBYcffvi33367Zs2aqlWrHnLIIYcccogbfwAAIHoEQADRkZub++abb4YQLr300uJH9u3bd/r06a+//vpVV111/PHHl0p1AABAwviaFyA6lixZsnr16rp169avX7/4kW3atClfvvyiRYs2bNhQOrUBAAAJJAACiI5Vq1aFEGrUqLHTkWXKlKlevXoI4aefftrrZQEAAIkmAAKIjooVK4YQ1q5duyuD16xZE0KoVKnS3q0JAADYBwiAAKKjbt265cqVW7Ro0U7v61mwYMHatWtr1qxZuXLl0qkNAABIIAEQQHSUK1fumGOOycvLe/LJJ4sf+cQTT4QQ2rdvXyp1AQAACSYAAoiUvn37JiUlPfzww59//vmOxrzzzjvPP/98SkrKxRdfXJq1AQAAiSIAAoiU1q1bn3vuuZs2berdu/f06dOLDnj55Zf79euXm5s7YMCAnb4sDAAAiIayiS4AgBJ24403/vTTT1OmTLnooouOOuqoU045pXHjxrFYbMGCBZMmTfr0009DCOecc85ll12W6EoBAIBSIgACiJoyZcrcf//9rVu3fuCBB2bOnDlz5syCR2vUqDFkyJAePXokqjwAAKD0CYAAIigpKenCCy/s3r37G2+8MWvWrOXLlyclJdWpU+fYY49t3759enp6ogsEAABKlQAIILIqV6585plnnnnmmYkuBAAASDCbQAMAAABEnAAIAAAAIOIEQAAAAAARJwACAAAAiDgBEAAAAEDEeQsYwO9adnb2ggUL1q5dW6lSpQMPPLBWrVqJrggAACh5AiCA36m33357zJgxc+fOjcVi8Z6kpKSWLVv279//pJNOSmxtAABAyRIAAfzubNmy5frrr3/xxRdDCOnp6W3atMnMzFyzZs0nn3wyd+7cPn36dOvWbdiwYWlpaYmuFAAAKBkCIIDfl1gsNnDgwNdffz0jI2PIkCFnnXVWftCzZcuWZ599dsSIES+99NK6devGjRuXnGyrOAAAiAKf7AF+X8aPH//6669nZmY+99xz5513XsHbfFJTU//yl7/861//yszMnDZt2uOPP57AOgEAgBIkAAL4Hdm4ceP9998fQrjrrrsOOuig7Y5p2rTpPffcE0IYPXr0hg0bSrU+AABg7xAAAfyOvPvuuz///HOrVq1OPvnkYoadcMIJhx566OrVq6dPn15apQEAAHuRPYBgh1at+nHevDmJrgJKwPr168qUSS5XLv21114OYXNWVrOd/tvOymo2Z87MqVNfPuAAL4Zn37J27epElwAA8NsjAILtSEpKCiG88caLb7zxYqJrgZI3fvzfxo//266MnDz54cmTH97b9cAeiP+iBgBgFwmAYDtOPPHEY445ZuPGjYkuBEpAXl7ep59+mpyc3Lp168WLF//0008NGjSoVq1a8bNWrVq1aNGiqlWrNmzYsHTqhF1XqVKlI444ItFVAAD8lgiA9kTTpk1DCF27dh0xYkSia2GvaNKkybvvvpvoKqBkrF+/vkKFCuXLl//4449vu+22m2+++bTTThs1alTxswYPHjxy5Mj+/fvfdtttpVMnAACw99gEek98880333zzzfvvv5/oQgB27ueffw4h5OXlrVmz5pRTTgkhPPfcc8W/3mvjxo3PPPNMCCE+HgAA+K0TAAFE05YtW+6///42bdrUq1cvhLBx48aqVasOGDCgcePGK1asuPHGG4uZe/PNNy9btuzwww9v165dadULAADsRR4B+1+7+zzXsmXLCk0ZMmRIiVYEsIfmz59/+umnL1iwIIRQsWLF9evXlylTJiUlZdasWSGEpKSkkSNHZmZmDh06tNBOurFYbPjw4SNGjEhNTR01apR9dgEAIBqSYrFYomvYV/z6/+fsI3+ZGRkZGzZs2G+//ZYvX57oWoAE+PLLL48++ujVq1e3aNHijjvu6Ny584IFC9LS0urVq/fiiy/eeOON3377bXzk4YcfPmjQoBNOOKFWrVorV66cPn36vffe+8EHH5QpU+aRRx654IILEnshAACwNzRq1GjRokV9+/YdN25comspPe4AAoiUzZs3d+vWbfXq1aeffvpTTz1Vvnz5EEJWVlb86Nlnn33KKad069ZtxowZqampH374Yc+ePQudoU6dOo888kjnzp1Lu3QAAGCvEQD9r3/+85+XXnrptm3bQghJSUmtWrUqW3b7fz8fffRRCCEjI6N58+Z7r568vLzvvvtuDybuIzciAQkxduzYr7/++pBDDpkwYUK5cuWKDsjMzHzxxRdbtmz5ww8/XHDBBYsXL543b96PP/5YvXr1Fi1adO/e/cILL0xPTy/9ygEAgL1HAPS/LrzwwuOPP/6oo45auXJlLBZbvHjx9OnTDznkkKIj4w+LZWVlxXfT2EuysrK+/PLLPZ6+fv36EiwG+K149NFHQwjDhg3bbvoTV6VKlZtuuqlPnz5Lliz597//XYrVAQAAieEtYP9H48aNly9fHn/w4eeff27duvXu7gxdgho2bJicnJy0++LTq1WrlqjKgUTJzs6eN29eZmZmp06dih/Zo0ePMmXKTJ8+PX7bIwAAEG0CoMKSk5OnTJkyevToMmXK5OXlXXXVVSeeeGJC/oP06quv5ubm5u2+Nm3ahBBatmxZ+jUDibVkyZIQQuPGjXf0BGu+zMzM/fbbb+vWrdnZ2aVSGgAAkEgCoO3r37//559/XrVq1RDC9OnTa9WqNW/evEQXBbAT8XsAi24ENmzYsDFjxhTqjA/zoncAAPg9EADtUPPmzbOzs48//vgQwqpVq1q2bHnfffcluiiA4tStWzeE8M0332zdujW/c9OmTUOHDr3++usLjvzpp5+ys7PT0tJq1apV2lUCAAClTgBUnLJly06fPv1vf/tbcnJyXl7elVde2b59e/tlAPusmjVrtmrVau3atZMnT87vzM3NjcViubm5BUc+99xzubm5J554YpkyZUq9TAAAoLQJgHbummuu+fjjjytXrhxCeOutt/bbb79EVwSwQxdddFEI4frrry/mVYA//vjj7bffHkLo06dP6VUGAAAkjgBol7Ru3XrFihVHHHFECOGnn35KdDkAO3TJJZc0b958/vz5Z5555rp164oOyMnJ6dq16/Lly48//vjTTz+99CsEAABKnwBoV5UrV27WrFk33XSTDVOBfVlqaurLL79cvXr11157rXXr1hMmTMi/FWjNmjWPPPJIq1atZs2a1aBBg2effdYvNAAA+J3YyXuCKeTWW2/t27fvsmXLQgieBQP2TU2aNJk9e/YZZ5zx2WefnXPOOampqSGEDRs21KhRI7459HHHHffss8/a/hkAAH4/BEC7rXbt2rVr1050FQDFadSo0Zw5cx5//PHHHnts5syZIYRYLBaLxdq3b9+nT58zzzzTvT8AAPC7IgACiKYyZcpceOGFF154YU5OTo0aNdLT01etWpWWlpbougAAgAQQAAFEXOXKlTMyMqpUqSL9AQCA3y0BEEDEpaSkzJo1S/oDAAC/ZwIggOjLyspKdAkAAEAieQ08AAAAQMQJgAAAAAAiTgAEAAAAEHECIAAAAICIEwABRN+wYcPGjBmT6CoAAICE8RYwgIjbtGnT0KFDK1as2L9//0TXAgAAJIY7gAAiLjc3NxaL5ebmJroQAAAgYQRAAAAAABEnAAIAAACIOAEQAAAAQMQJgAAAAAAiTtJ4ydcAACAASURBVAAEAAAAEHECIAAAAICIEwABRFxqampGRkaVKlUSXQgAAJAwZRNdAAB7V0pKyqxZs9LS0hJdCAAAkDACIIDoy8rKSnQJAABAInkEDAAAACDiBEAAAAAAEScAAgAAAIg4ARAAAABAxAmAAKJv2LBhY8aMSXQVAABAwngLGEDEbdq0aejQoRUrVuzfv3+iawEAABLDHUAAEZebmxuLxXJzcxNdCAAAkDACIAAAAICIEwABAAAARJwACAAAACDiBEAAAAAAEScAAgAAAIg4ARAAAABAxAmAACIuNTU1IyOjSpUqiS4EAABImLKJLgCAvSslJWXWrFlpaWmJLgQAAEgYARBA9GVlZSW6BAAAIJE8AgYAAAAQcQIgAAAAgIgTAAEAAABEnAAIAAAAIOIEQADRN2zYsDFjxiS6CgAAIGG8BQwg4jZt2jR06NCKFSv2798/0bUAAACJ4Q4ggIjLzc2NxWK5ubmJLgQAAEgYARAAAABAxAmAAAAAACJOAAQAAAAQcQIgAAAAgIgTAAEAAABEnAAIAAAAIOIEQAARl5qampGRUaVKlUQXAgAAJEzZRBcAwN6VkpIya9astLS0RBcCAAAkjAAIIPqysrISXQIAAJBIHgEDAAAAiDgBEAAAAEDECYAAAAAAIk4ABAAAABBxAiCA6Bs2bNiYMWMSXQUAAJAw3gIGEFlLlix5+umn33zzzTfffDM5OXnq1KkdOnTo2bNnzZo1E10aAABQqtwBBBBB27Ztu+6665o2bXr11Ve/+eabIYS8vLxXX331iiuuaNKkyV133RWLxRJdIwAAUHoEQABRs3Hjxs6dO//tb3/bsmVLz549J0yYEEIoX778hAkTTj311F9++eWaa67p2bNnbm5uoisFAABKiQAIIGouueSSadOm7b///jNnznz66adPO+20EEJycnKvXr1eeeWV119/vUqVKs8999x1112X6EoBAIBSIgACiJS33nrrySefrFSp0ptvvtmuXbuiAzp27PjKK6+kpqaOHDly3rx5pV8hAABQ+gRAAJEyYsSIEMLQoUObN2++ozFHH310//79c3NzR44cWYqlAQAACSMAAoiOdevW/fvf/y5btuxFF11U/Mi+ffuGEF555RW7QQMAwO+B18ADCbNly5YhQ4asWLEi0YVEx9q1a7ds2VKpUqV4vhO3bdu2EMLmzZv//Oc/Fxycmpqak5Nz+umnp6amlnah0dWoUaPhw4cnJSUluhAAAPg/BEBAwnz33XejR492B0qJW7t27fPPP1+oc9u2bUU7Qwgvv/xyqRT1e1G2bNmrr766atWqiS4EAAD+DwEQkDBNmzZ95513li9fnuhCoiM7O/uvf/1rtWrVxo0bV7D/+++/T0lJqV27dn5Pbm7u+eefv2XLlvHjx6elpZV6pZHVoEED6Q8AAPsgARCQSMccc0yiS4iUvLy8O+64Izs7++CDD27RokUxI998880tW7ZkZWWde+65pVYeAACQKDaBBoiO5OTkHj16hBDuuOOOYobFYrE777wzhHDWWWeVUmUAAEBCCYAAIuW6665LT09/9tlnx44du6MxN99884wZM2rWrDlgwIDSrA0AAEgUARBApNSpU+ehhx4KIVx++eUDBw5cs2ZNwaMrV648//zzb7/99rJlyz755JMVK1ZMUJkAAECpsgcQQNSce+65GzZsuPzyy0eNGvXoo4926NChefPm27Ztmzdv3ltvvbVx48aMjIzHH3+8Q4cOia4UAAAoJQIggAi65JJL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b968OX/wTpe29u3bx9fKzz77rG7duiGEypUrF3wVw5VXXpmXl9e/f//4H2vUqJG/jKakpBS8nF9zXSW+ZAPslAAIoCRlZ2fHP5Dtv//+v+Y8y5cv32+//eKnqlixYqdOna655przzz8/P10KIdx1112FZsU/Tf7pT3/q2rVr+fLlH3rooZycnFgstn79+uHDh5cpUyaEkJmZuXz58vj4pUuXzp07d8yYMfET3nbbbXPnzp07d+6WLVsKnrBz587169cPITRs2PDss8++9dZbly5d+mvqFAAB/ObsYgBUzJKRm5sbD1/iSUrHjh2HDBnSv3//ww8/PH/J6NevX6HTfvXVV/lxUsOGDfv27XvLLbcMHjy4U6dO8XUthDBgwID88Ttd2uI1HHbYYXXr1m3duvXHH3+cl5eXm5s7ceLE/A37Tj755BDCBRdcsGTJklgstn79+quvvjp+qGnTpnl5eQUr3LPrKvElG2CnBEAAJWny5MnxT2bdunX7NefJf8FKmzZtFi1alN+fl5eX/7kwJSVl/vz5BWfFP02WK1eubNmyH374YaFzXnXVVfFzPvnkkwX7p06dGu//n//5n0JT4ieMGz58+LZt20qkTgEQwG/OLgZAxSwZf/vb3+JHW7Vq9fnnnxc89Morr9SqVSt+9I033ih46IYbboj39+/fPzc3t+Chjz/+uGLFiiGEevXqFfpZxSxt+WFNs2bNNm7cWPDQyJEj8y+hf//+hSaeeOKJ8UMF17s9vq4SX7IBdsoeQAAlKf8OoPhd5Xvmq6++mjRpUgihatWqb7/9doMGDfIPJSUlXXvttfHPhVu3br3vvvuKTt+0adMFF1zQtm3bQv1//vOf4425c+fubkmdOnW69tpr879rLZE6AYik7S4ZGzduHDFiRAghMzNz0qRJWVlZBY+eeuqpEyZMiL8Zc+jQoQUPzZw5M4SQnp5+zz335D8eFXfooYfG99D54Ycffv75592t8+9//3u5cuUK9nTu3DneqFix4p133llofP7R//73v7/+uuL2xpINsCMCIICSlP8BtNB733dL/Jn/EMLgwYMrVapUdMCgQYMyMjLiI7d7hssuu6xoZ/ye/BDCpk2bdreka6+9dm/UCUD0bHfJeOONN3JyckIIV1xxRb169YoOOOmkk+L35nz88ccF05ybbrpp6tSp06ZNK7ivUL781XbLli27W+fxxx9fqKdOnTrxRps2bYqu4/lf7cRf9RC3x9eVr8SXbIAdEQABlKT87xJ/zSe2Dz74IN6If7FZVI0aNY444ogQwsqVK7f7pq1mzZoV7Sz0xeluad269d6oE4Do2e6S8d5778Ub+Q9SFdWuXbsQQl5eXsHbXk444YROnTodeeSRhQZv3bp1xowZL7/88p4VWaVKlSpVqhTqzF8oGzVqVHTKdpfRPb6ufCW+ZAPsSNlEFwAQKdWqVYs3fvzxxz0+yfLly+ONgg9VFdKwYcN4Y+nSpYWG1ahRI37fTUlJT0/f7g1Nv7JOAKJnR0vG999/H2+ccMIJOz3JmjVrinYuWrTo008/Xbhw4bfffvv111/Pnj173bp1e1xnoSfUdutoQb/yukp8yQYohgAIoCTlf4/3ySef7OKUKVOmvPbaayGEo48+Or7F5i+//BJCqFChQnxvy+3Kv0199erVhQ5t9yb5X6Pod6Rxv7JOAKJnR0vG2rVrd/0k8fUlLhaLjR8/ftiwYQsWLCg0bP/99y9fvvzChQv3oM6SssfXFVfiSzZAMQRAACWpZcuWlSpVWrt27RdffLFkyZJd2Qr63nvvnTZtWihww3k8T1m3bt26desqVKiw3Vn5u00XE76UlPjulUXta3UCkHDFLxkhhFdffXWni2PBAf369XvwwQfj7T/84Q/t2rU75JBDDjzwwGbNmjVs2HDQoEGJfc/AHl8XQOkTAAGUpOTk5PgrP2Kx2JgxY4YPH178+PXr17/77rvxdny7nBBC7dq1443FixfH35heVP4Xnvvtt18J1L1Hfit1ApBw+UtGmTJlWrZsuYuzZsyYEU9/GjZs+OyzzxZ9W1b8XQQJtGfXBZAQdhcDKGEDBw6MN+6777558+YVP/j+++/fvHlzCKF+/fr5AVB8t8gQwuTJk7c7a9WqVbNnzw4hVK1atWnTpiVS9h74rdQJQMLl7+L84Ycf7mjMq6+++tBDD/3jH//Ij3VeeeWVeGP06NFF05/wf9/InhB7dl0ACSEAAihhbdu2Peuss0IImzZt6tKly9dff72jkZ999tktt9wSb19xxRX5t81369Yt3hgxYsR2d7i8++6745sOdO3adUc325eC30qdACTcH//4x/hux/fcc0/+OwQK+u6777p37963b9+XXnopf8nI32Enf0e5gn744YcZM2bstZJ3yZ5dF0BCCIAASt6DDz4Yf/vV4sWLDz/88HvuuafQJpFbt2695557jjvuuC1btoQQsrKyLr/88vyjzZs3P/XUU0MIOTk5HTp0WLJkScG5d91119133x1CSElJGTJkSAmWvXLlyt0an6g6AfjNyczMvOyyy0IIa9euPf300wvt6LxkyZJTTz01viZeeuml+f1ZWVnxxsSJEwudcP78+SeffPKGDRvif1y6dOl2f+7uLm27a8+u69fb29cFRJI9gABKXmZm5jvvvNOxY8f58+evXr16yJAh1113Xdu2bevWrRuLxRYuXPjNN9/kR0L16tWbPHlySkpKwTM89NBDrVu3Xrly5QcffNCiRYvjjjuuZcuW2dnZM2fO/OKLL+Jj7rzzzubNm//6asuXLx9v/OMf/0hPTy9XrtyZZ55ZqVKlXZlbmnUC8Jt2++23T5s2be7cubNnz27ZsmXHjh2bN2+elpY2f/78SZMmxR+I/utf/9qlS5f8KX/605+uu+669evX33777V988cVJJ51UuXLl77//ftasWa+++mosFjv44IPnz58fQjj77LO7du16/fXXx19C/2uWtlK4rj1WmtcFRFAMgL1j9erVgwYNSk1NLeaX8BlnnPHjjz9ud/p///vfgw8+eLuz0tLS7rnnnqJTjjnmmBBCPGYqKicnJz798ssvL1RnZmZmwfMvXrx4V064x3XGd4xu0aJFMacFYJ/Ss2fP+O/2l156absDdmXJWLVqVYcOHba7ZKSkpFxxxRW5ubmFpkyYMKHQdyRxFSpUeOCBB7Kzs2vVqpXfuWTJkvisYpa29u3bhxCqV69etLz8x5kvvvjiokefeeaZHf0N7MF1lfiSDbBT7gAC2FsqV658zz33XHnllRMnTpw8efK33367YsWKrVu3ZmZmNm7c+JhjjvnLX/6yo5dnhRCaNm36+eefjx8/fuLEiZ988klOTk56enqDBg06duzYr1+/+vXrl2Cdr7766rXXXvvZZ58lJSXVrl27+NAqUXUC8FtXpUqVN954Y8qUKU8++eTMmTOzs7MrVarUtGnTVq1aDRo0qFGjRkWn9OrVq127dsOGDfv4448XLlxYtmzZxo0bd+nS5dJLL42/X3LmzJl33XXXkiVLmjRpkn8vzK9c2krhuvZMKV8XEDFJMXvRA/xu/PLLL8uXL09JSYlvUQQA7KJYLPbTTz+tWLFi//33r1q16t7+cZZsoMQJgAAAAAAizlvAAAAAACJOAAQAAAAQcQIgAAAAgIgTAAEAAABEnAAIAAAAIOIEQAAAAAARJwACAAAAiDgBEAAAAEDECYAAAAAAIk4ABAAAABBxAiAAAACAiBMAAQAAAEScAAgAAAAg4gRAAAAAABEnAAIAAACIOAEQAAAAQMQJgAAAAAAiTgAEAAAAEHECIAAAAICIEwABAAAARJwACAAAACDiBEAAAAAAEScAAgAAAIg4ARAAAABAxAmAAAAAACJOAAQAAAAQcQIgAAAAgIgTAAEAAABEnAAIAAAAIOIEQAAAAAARJwACAAAAiDgBEAAAAEDECYAAAAAAIk4ABAAAABBxAiAAAACAiBMAAQAAAEScAAgAAAAg4gRAAAAAABEnAAIAAACIOAEQAAAAQMQJgAAAAAAiTgAEAAAAEHECIAAAAICIEwABAAAARJwACAAAACDiBEAAAAAAEScAAgAAAIg4ARAAAABAxAmAAAAAACJOAAQAAAAQcQIgAAAAgIgTAAEAAABEXNlEFwAAsLds27ZtxowZL7300gcffLB8+fIff/wxIyOjZs2abdu27dixY48ePcqXL5/oGgEASkNSLBZLdA0AACVvypQpgwYNWrBgwY4GVK1a9c4777z00kuTkpJKszAAgNInAAIAoiYvL++KK64YPXp0fk/dunUPPvjgatWqLVu27Jtvvlm2bFn+oR49ejz11FOpqamJqBQAoJQIgACAqDnvvPPGjx8fb5922mk33njjYYcdVnDAJ598Mnz48BdeeCH+Qah3796PPfZYAgoFACgtAiAAIFIeeeSRSy65JIRQtmzZf/7zn+edd96ORo4bN65fv37x9qRJk7p06VJKJQIAlDoBEAAQHTk5OQ0aNFi/fn0I4dFHH73ggguKH3/DDTcMGzYshNC2bdsPP/ywmJFr1qx57bXXsrOzzzzzzP33378EawYAKAVeAw8ARMeYMWPi6c9pp5220/QnhHDllVeWK1cuhPDRRx8tXry44KFjjz02KSmpV69eIYSpU6c2adKkV69eAwcOnD9/fsFhubm5TzzxRNeuXevVq5eWllatWrU2bdpcc801hc6Wr0aNGklJSR06dNju0ffffz8pKSkpKWnMmDH5nTNmzIh3fvbZZyGEDz/88C9/+UvDhg3LlStXp06dU045ZcKECcV8pffOO++cffbZhx12WGZmZo0aNdq1a9enT59i9sYGACLJa+ABgOh4+OGH442hQ4fuyvjq1atPnTo1JycnhLCjfaDfe++9bt26bd68ueihb7/9tmvXrvPmzcvvWbVq1apVqz799NNRo0bdeeedgwcP3u1r2LFYLHbnnXfedNNNeXl58Z5ly5YtW7bstddeGzdu3Msvv1y1atWC4zds2HDGGWe8/vrrBTtzcnI+/PDDxx577NZbb73hhhtKsDwAYF8mAAIAImLBggXx13s1a9asbdu2uzjr+OOPL+bomjVrzj333M2bNzds2PDII4888MADDz744PihFStWHH300StWrAghVKxY8aijjmrVqtWKFSs++OCDBQsWbN68eciQIXl5eVddddWvu6z/9fDDD48bN6569eq33Xbbcccdl5GR8cEHH4wcOfKjjz567733OnbsOGvWrJSUlPzxvXv3jqc/FSpU6Nq1a6NGjTZs2DB79uz33nsvNzf3xhtvPPTQQ//4xz+WVHkAwL5MAAQARMT7778fbxSf6eyW1157LYQwfPjwq666qkyZMgUP9e3bN57+tGnT5oUXXmjQoEG8PxaL/f3vfx86dGhubu4NN9zQpUuXgw46qESKGTduXIMGDaZNm9a4ceN4T4MGDbp163b++ec/99xzc+bMufvuu6+//vr4oS+++OL5558PIWRlZb399tvVqlUreJ5+/frFYrGxY8cKgADgd8IeQABARCxfvjzeyM9HSkSnTp2uvfbaQunPV199NWnSpBBC1apV33777fz0J4SQlJR07bXXxm/82bp163333VeCxfz9738vdHXlypV78MEHK1WqFEIYNWrU1q1b4/0zZ86MNwYPHlww/Qkh9O3bN94zZ86cEqwNANiXCYAAgIiIb+UTQii0FU6+9evXJ+3YmWeeud1Z1157bdHOF198Mb7v8uDBg+PhSyGDBg3KyMiIj9yzyymqUaNGPXr0KNpfpUqVyy67LISwcuXKt99+O965bdu2eGPJkiWFxiclJeXk5MRisaVLl5ZUbQDAPk4ABABERNmy///Z9k2bNpXgaVu3bl2084MPPog3unTpst1ZNWrUOOKII0IIK1eu3NEbwXbXkUcemZy8/Q9vRx11VLyR/zL7ww47LN649dZb+/Xr99FHH5VIDQDAb5Q9gACAiKhZs2a8kZ2dvd0BZcuW7d27d9H+CRMmbNmyZbtT0tPTK1euXLQ//3Gzgg9/FdKwYcN4Y+nSpcUM23W78rO+/vrreKNt27YDBgy4//77t27dOm7cuHHjxjVu3PiYY4454ogjOnToULJPyQEA+z4BEAAQEfmhRv5dMIWkpaU99thjRfuffvrpHZ2zSpUq2+3/5ZdfQggVKlSoWLHijubWqVMn3li9evWOxuyW6tWr7/TQ2rVr8ztHjRp13HHH3XTTTV9++WUIYeHChQsXLnz88cdDCC1atLjiiisuuuiipKSkEqkNANjHeQQMAIiIE088Mf6E1Hvvvffzzz/v4qylS5du3rx5R0d3lI/Ec59169atW7duR3Pzb0QqJiQqZM2aNcUcLWbLnu+++y7eKFeuXMH+7t27f/HFF19//fW999572mmn5edE8+bN69OnT5cuXeI7GQEAkScAAgAiokqVKvEXwG/cuPGBBx7YxVkTJ07cg59Vu3bteKOY/X0WLlwYb+y33367eNr8B7i2a9GiRTudmH/bUUFNmjQZOHDgyy+//OOPP86ZM+fyyy+Pb1w9efLkp556ahdrAwB+0wRAAEB0XH/99fHG8OHDP/30052OX7Vq1Z133rkHP6hdu3bxxuTJk3d05tmzZ4cQqlat2rRp00JHd7RN9Y4eXot76623Cj7hVdCTTz4Zbxx55JHxxlNPPfXQQw89+uijhUa2adPmgQceGD9+fPyPs2bNKuYnAgCRIQACAKKjffv2p556aghhgm4OyQAABTZJREFU06ZNp5xySvF5yvLlyzt37ryjHaOL161bt3hjxIgR230K7O67746HNV27di34HFlqamoIYf78+Xl5eYWmLFiw4Nlnny3mh65evXrUqFFF+99999033ngjhFCxYsWOHTvGO//5z3/27dv3oosuim8AVMj+++8fbxTz+BsAECUCIAAgUp544olGjRqFEFasWHHsscf+9a9/zX8UK9+aNWtuuummJk2afPjhhwcccEBmZubu/pTmzZvHk6acnJwOHTosWbKk4NG77rrr7rvvDiGkpKQMGTKk4KGsrKwQwk8//TRs2LCC/YsXL+7Zs2dubm7xP/e22267//77C/ZMnTr1tNNOi7cvu+yy/P2G8l8DP3jw4K1btxacsnHjxptvvjnejr+rHgCIvCQ7/wEAEbN06dIuXboUfASscePGBx10UNWqVbOzsxcsWPD999/HPwK1bNlyypQp/fv3f+mll3r06PH888/nTzn22GPfe++9unXr/vDDD9v9KcuWLWvduvXKlStDCJUrVz7uuONatmyZnZ09c+bML774Ij7mrrvuuuqqqwrOevjhhy+99NJ4u1OnTp07dy5fvvycOXP+9a9/rVq1avDgwaNGjdq2bdvo0aP79+8fHzZjxowTTjghhFCvXr14MX/4wx+OPPLIcuXKzZ49e86cOfGbif7whz989NFH5cuXj8/64osvWrVqtW3bthBCnTp1TjvttNq1a+fm5n733XeTJk1atWpVCKFZs2Zz587NnwIARJgACACIoA0bNgwbNuy+++5bv379dgeUK1duyJAh1113XXp6+qhRowYOHLi7AVAI4euvv+7atev8+fOLHkpLSxs2bNigQYOKHjrnnHMmTJhQtP+yyy4bPXp0WlrajgKgsWPH/uc//xk3blzRue3atZs0aVLNmjULdj799NN9+/bd0bZBRxxxxLPPPnvAAQfs6OoAgCgpm+gCAABKXnp6+h133DFgwICJEydOmTJl/vz52dnZ27Ztq1WrVpMmTbp06dKjR4/8fXC6d+8eQmjSpMnu/pSmTZt+/vnn48ePnzhx4ieffJKTk5Oent6gQYOOHTv269evfv3625311FNP9erVa+zYsV999dWyZcuqVavWtm3byy67rFOnTiGEq6++Oi8vr02bNkUnJicnjx07tnv37uPGjZs5c2ZOTk6VKlVatWp1zjnnnHvuucnJhR/t79WrV+fOnUePHv3WW28tWbJk6dKlFStWrF+/frNmzfr06RN/YxoA8DvhDiAAgH1a/h1ADz74YP7jYwAAu8Um0AAAAAARJwACAAAAiDgBEAAAAEDECYAAAAAAIk4ABAAAABBx3gIGAAAAEHHuAAIAAACIOAEQAAAAQMQJgAAAAAAiTgAEAAAAEHECIAAAAICIEwABAAAARJwACAAAACDiBEAAAAAAEScAAgAAAIg4ARAAAABAxAmAAAAAACJOAAQAAAAQcQIgAAAAgIgTAAEAAABEnAAIAAAAIOIEQAAAAAARJwACAAAAiDgBEAAAAEDECYAAAAAAIk4ABAAAABBxAiAAAACAiBMAAQAAAEScAAgAAAAg4gRAAAAAABEnAAIAAACIOAEQAAAAQMQJgAAAAAAiTgAEAAAAEHECIAAAAICIEwABAAAARJwACAAAACDiBEAAAAAAEScAAgAAAIg4ARAAAABAxAmAAAAAACJOAAQAAAAQcQIgAAAAgIgTAAEAAABEnAAIAAAAIOIEQAAAAAARJwACAAAAiDgBEAAAAEDECYAAAAAAIu7/AdCCFlmTPUMGAAAAAElFTkSuQmCC" width="768" /></h2>
</div>
<div id="etapas-en-la-creación-de-un-paquete" class="slide section level1">
<h1>Etapas en la creación de un paquete</h1>
<p>Aunque el orden se puede modificar una forma de crear paquetes <em>utilizando las herramientas de Hadley Wickam</em> puede ser la siguiente:</p>
<h2 id="pasos-imprescindibles">Pasos imprescindibles</h2>
<ol style="list-style-type: decimal">
<li>Creación del esqueleto del paquete.</li>
<li>Creación de las funciones y documentación de estas con <code>Roxygen</code></li>
<li>Actualización de la información de los archivos DESCRIPTION y NAMESPACE</li>
<li>Creación del paquete ( “compilación”)</li>
</ol>
</div>
<div class="slide section level1">
<h2 id="pasos-opcionales">Pasos opcionales</h2>
<ol style="list-style-type: decimal">
<li>Creación de un manual mediante una “Vignette” <a href="http://r-pkgs.had.co.nz/vignettes.html">http://r-pkgs.had.co.nz/vignettes.html</a></li>
<li>[Antes del punto 4] Creación y depósito de los datos de ejemplo *</li>
<li>[Después del punto 4] Depósito ( “upload”) del paquete a GitHub para hacerlo accesible a los potenciales usuarios</li>
<li>[Después del punto 4] Instalación del paquete desde los archivos locales o desde <code>github</code>.</li>
</ol>
</div>
<div id="creación-del-esqueleto-del-paquete" class="slide section level1">
<h1>1. Creación del esqueleto del paquete</h1>
<p>Muchas de las acciones que describiremos pueden ejecutarse desde la consola o usando el sistema de menus de rstudio</p>
<h2 id="creación-de-un-paquete-desde-la-consola.">Creación de un paquete desde la consola.</h2>
<div class="sourceCode" id="cb4"><pre class="sourceCode r"><code class="sourceCode r"><a class="sourceLine" id="cb4-1" data-line-number="1"><span class="kw">setwd</span> ( <span class="st">"~ / OnVolguemCrearElPaquet"</span>)</a>
<a class="sourceLine" id="cb4-2" data-line-number="2"><span class="cf">if</span> (<span class="op">!</span><span class="st"> </span><span class="kw">require</span> (DevTools)) <span class="kw">install.packages</span> ( <span class="st">"DevTools)</span></a>
<a class="sourceLine" id="cb4-3" data-line-number="3"><span class="st">require (DevTools)</span></a>
<a class="sourceLine" id="cb4-4" data-line-number="4"><span class="st">create ( "</span>boxPlotDotted<span class="st">")</span></a></code></pre></div>
</div>
<div class="slide section level1">
<h2 id="creación-de-un-paquete-mediante-el-sistema-de-menus">Creación de un paquete mediante el sistema de menus</h2>
<ul>
<li>Abrimos RStudio</li>
<li>Creamos un nuevo proyecto: <code>File -> New Project</code></li>
<li>Escogemos <code>New Directory</code></li>
<li>Escogemos <code>R Package</code></li>
<li>Elegimos el directorio donde queremos que se cree el paquete</li>
<li>Damos un nombre al paquete y hacemos clic en “Create Project”</li>
</ul>
</div>
<div id="resultado-el-esqueleto-del-paquete" class="slide section level1">
<h1>1.2 Resultado: El esqueleto del paquete</h1>
<div class="figure">
<img src="data:image/png;base64,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ERERERG5sYyF82a7atWpl6Od169fz7D33sfl+neso2EYvPLyS0RFRV1xu8itZsWyxVzq+e/r53+DqxERERERyRtzbKcOA8OKlcjRzoULF6ZceDhHjx7DZrNRqlQpnuz+RFZou9J2kVvNwf37uNTz393d4wZXIyIiIiKSN7le7iAqKuqyQe1K20VEREREROTaytXkKSIiIiIiInLrUbATERERERHJ5xTsRERERERE8jkFOxERERERkXxOwU5ERERERCSfU7ATERERERHJ5xTsRERERERE8jkFOxERERERkXxOwU5ERERERCSfU7ATERERERHJ5xTsRERERERE8jkFOxERERERkXxOwU5ERERERCSfU7ATERERERHJ5xTsRERERERE8rn8H+xcafwzbzwztybhuuj2FHb/9i0T5+8n/UbXJiIiIiIicgPk82Dn4NTKr3nnm/UcTczAebFdnElsWzibBetP4LjR5YmIiIiIiNwAt16wcyWwfNijdHhiJBtTLtzsPLmINzp14tmpe0lP38u8mXHU7v06j8cEYL7x1YqIiIiIiNx0lqttYOCgwWzfvv2y+1SqWJHXXns1Zw0avlRqVBn39X/xy7YkKlX1wcja6ODE6t/Y4SpKu3qhWK0WHnlrCIZhXKZBERERERGR21uug12vXs/Sv38/QkJCAK4Y6gC279iRi0cw8IlsTDWvv/hr4d8kVonB72xuyzjGykV7oHgn6oRYICOOma+8xOySrzHymQq4A6QfZcX3Y5j6yyaOpBn4hJalwHEgMNtDZMSzYfY4Js9bzf5k8Cgczb0dH6dttQKZvxBnAn/Pm8ikuSvZc9qBe0hF7n4wlvZ1QnE3AFca+xaN56sflrIr3gHWAMo1e4HX2pXCmoszFRERERERuRZyPRTzxMmTDBnyFkeOHLke9WTyCqdJnQDSNy1k4+l/p0TJOLKCRftMRDapScGLRVJXCpsnvsnHc+Mo1uIpXny5D7F1C+GwZ98pjZ3fvck7M44S0b4vbwzoQ9sS+5n14Yf8fCgDSOefH9/izSmb8b/nCV586TkerpjELyMHMmLZSRyA/eBcPh69FGfd7vR/czADn+9Ek8pBV9/9KSIiIiIikgd5yiJnw13//v2udT1nuFOq0d2E/DKDBWtPccfdBTBhJ27pH8RZo2lfPfCiidSVuIGZf5yiUKu3eaZ18cze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FlKOguxn/oxFrNu+mz2793AgwXHFpl3JW5j65R+YGj3FQ+VDqfvYo1RN+oXPp20n1QXWPLYrIiIiIiJys+Sqx+7uu+/CbDYz6osvLro9tnNn6tevB0C9enfmsSQHJ5aM44e9ATTs35LSWbOemAm681Ee/q0vE8ZOp/G7D9H78VOM/nESw37PvPrN4hlAydr+uF2ybTt7547lt/Ra9H0wAk8DKFCLLu0X0mfCWOY3epMHirXIQ7siIiIiIiI3j7Fw3mxXrTr1crSzw+Gg74svceTIkYtuDwkJ4f33huVqyKXIzbRi2WIu9fz39fO/wdWIiIiIiORNroZiLl267JKhDjKHXC5ZsvSqixIREREREZGcy9VQzPr162UNtRQREREREZFbww1Z7kBERERERESuHwU7ERERERGRfE7BTkREREREJJ9TsBMREREREcnnFOxERERERETyOQU7ERERERGRfE7BTkREREREJJ9TsBMREREREcnnFOxERERERETyOQU7ERERERGRfE7BTkREREREJJ+zAJw8cfxm1yEiIiIiIiJ5ZAEoGlrsZtch/2/vvsOjqhI3jn/vzGSSkIT0BJgEAoQAofci4CpNUEQFXFaqBRBXXXX5WbBQBUEFVLCArCKwokgTkcWyqHRBRXoRFEgChASSUFJn7u+PhNDSCUKy74dnHpK5Z86cc+bO89w3595z5brYv3f39W6CiIiIiMhVswGkpaVe73aIiIiIiIhICekaOxERERERkTJOwU5ERERERKSMU7ATEREREREp4xTsREREREREyjgFOxERERERkTJOwU5ERERERKSMU7ATEREREREp4xTsREREREREyjgFOxERERERkTJOwU5ERERERKSMsxX3Bb/99hvvzZxFbGxskco7HA4eHjaUmjVrFrtxIiIiIiIiUrhiz9gVJ9QBxMbGMnPWrOK+TcGcSfy04C1mfBlDRunWLCIiIiIiUuYUe8YuLi4OwzD4aM6HWK3WAss6nU4GDhpMTEzRg2CRuE5zYOMmttXrilm6NYuIiIiIiJQ5xQ52pmlisVhyQ93Ro0dZ8Mkn7NixEzc3N+pFR3PvvX0IDQ3NLWOaZSx+mWf46Y0RvL75TO5TVu8QatRrTde7etCmqifG+aIZx/l5xSKWf/8L+0+kYmKjoiOKph370r9LDSoYeb+FiIiIiIhIaSl2sLtY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6/sg7QNiWTr6eV7/9yrWbv6FX37ayH8//4h3P9nFOe+G9OlWhcQvp/LWkg1s2/Ez33w0hVk7LDTu3YXwUgwIhk8j7ukURNK3U3h1/jf8+OtOdvy8jq9WbuZEVvb23l1CSFwxmdc+/i+bt+9k+5a1rNmZhNMtiKhwO6c3fMbyjdvY/tNaVv+SiCU0imCOsGrparbuO8jvB38nJiXvWTZ7McpiC6JpGwfOXR/x7qI1/Lx9B9u27eOUq+T9z0rYwn++2cT2/Qc5uHcnvx5IAXtFKtqNQsemQJ6R3PaXII59MZvvz0TRvU1IAX9pcHFqw1QeHvAYb/9yOmdWMfu5YQMe451fz+Q85yRx7esMveQ5EREREZHyrUQzdg0bNuStt97M/f38zF1p3tPO4t+CYRNHU3vJUr5at4C3V2QCBh6BETRo15AMlzs1ej/PSI85zF/5Nq98ZmIPqsNfho3hb+0CsJZaSwDDkzr3jeY537l8/PV8pq3MBDwIqtuNWh1bEGzzJKrvi4z0mce/V81h6hdOsPkSdccIWtWrTtP7H6Ljm/NY/NZkTMOb6rc9Qev7evDkg6eYvXgek7/LTkA2Tz8iWvtecbsBt/CilwU3wm5/ikdPz2LBivd4bQlguONfJZo2ofZCz1TNizPpID8u+w97TmYABl5VGtLzsQdo7G0AhYxNgX86sBPesTs1ln/EsRY9aOZf+N8ZTPPyqGbmfQ6sEp2IiIiI/A8xvl653GzVtv1VVXItgp3In2HT+jXkt//7VPT9k1sjIiIiIlIyxZqxe2jIUM6dO5fv9ryuuatQoQLvz5pZ/JaJiIiIiIhIkZToGrviMAq4ZYGIiIiIiIhcvWLN2GnmTURERERE5MZzzWfsRERERERE5NpSsBMRERERESnjFOxERERERETKOAU7ERERERGRMk7BTkREREREpIxTsBMRERERESnjFOxERERERETKOAU7ERERERGRMk7BTkREREREpIxTsBMRERERESnjFOxERERERETKOAU7ERERERGRMk7BTkREREREpIxTsBMRERERESnjFOxERERERETKOAU7ERERERGRMk7BTkREREREpIxTsBMRERERESnjFOxERERERETKOAU7ERERERGRMk7BTkREREREpIxTsBMRERERESnjFOxERERERETKOAU7ERERERGRMk7BTkREREREpIxT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" alt="Aspecto del directorio creado" />
<p class="caption">Aspecto del directorio creado</p>
</div>
</div>
<div id="añadimos-la-documentación" class="slide section level1">
<h1>2. Añadimos la documentación</h1>
<ul>
<li>Tradicionalmente, lento de hacer, y fácil de cometer errores.</li>
<li>El paquete <code>roxygen2</code> lo ha hecho más sencillo.</li>
<li>Sólo hace falta poner unos comentarios en el encabezamiento del paquete.</li>
<li>Los comentarios pueden empezar por:
<ul>
<li><span class="citation">@param</span></li>
<li><span class="citation">@keywords</span></li>
<li><span class="citation">@seealso</span></li>
<li><span class="citation">@export</span></li>
<li><span class="citation">@examples</span></li>
</ul></li>
<li>Lo que los hace atractivo este sistema es que es son casi las mismas operaciones si no quisiéramos hacer un paquete pero s’documentar lo que hacemos.</li>
</ul>
</div>
<div class="slide section level1">
<h2 id="aspecto-del-archivo-documentado">2.1 Aspecto del archivo documentado</h2>
<div class="sourceCode" id="cb5"><pre class="sourceCode r"><code class="sourceCode r"><a class="sourceLine" id="cb5-1" data-line-number="1"><span class="co"># 'BoxplotWithDots</span></a>
<a class="sourceLine" id="cb5-2" data-line-number="2"><span class="co"># '#' This function Allows Plotting a Dotplot and eventually overplotting a boxplot on it</span></a>
<a class="sourceLine" id="cb5-3" data-line-number="3"><span class="co"># '#' @param myExpres Numeric values</span></a>
<a class="sourceLine" id="cb5-4" data-line-number="4"><span class="co"># '@param lev A factor for drawing the plot as plot (ex ~ lev). Pay attention to the order of values ??in the express vector and levels in the factor</span></a>
<a class="sourceLine" id="cb5-5" data-line-number="5"><span class="co"># '@param aTitle The title for the plot</span></a>
<a class="sourceLine" id="cb5-6" data-line-number="6"><span class="co"># '@param groupLabels Names for the groups</span></a>
<a class="sourceLine" id="cb5-7" data-line-number="7"><span class="co"># '@param addBoxplot Define if a boxplot has to be overdrawn (siete to TRUE when the number of points is big enough)</span></a>
<a class="sourceLine" id="cb5-8" data-line-number="8"><span class="co"># '@importFrom graphics boxplot</span></a>
<a class="sourceLine" id="cb5-9" data-line-number="9"><span class="co"># '@importFrom beeswarm beeswarm</span></a>
<a class="sourceLine" id="cb5-10" data-line-number="10"><span class="co"># '@examples</span></a>
<a class="sourceLine" id="cb5-11" data-line-number="11"><span class="co"># Ex preso <-c (rnorm (10,5,2), rnorm (10,10,2))</span></a>
<a class="sourceLine" id="cb5-12" data-line-number="12"><span class="co"># 'Trado <- as.factor (c (recibe ( "CT", 10), recibe ( "TR", 10)))</span></a>
<a class="sourceLine" id="cb5-13" data-line-number="13"><span class="co"># 'Titulo <- "Treatment effect"</span></a>
<a class="sourceLine" id="cb5-14" data-line-number="14"><span class="co"># 'GroupLab <- c ( "Control", "Treatment")</span></a>
<a class="sourceLine" id="cb5-15" data-line-number="15"><span class="co"># 'BoxplotWithDots (myExpres = expres, lev = trado, aTitle = titulo, groupLabels = groupLab)</span></a>
<a class="sourceLine" id="cb5-16" data-line-number="16"><span class="co"># '@export</span></a>
<a class="sourceLine" id="cb5-17" data-line-number="17">boxplotWithDots <-<span class="st"> </span><span class="cf">function</span> (myExpres, lev, aTitle, groupLabels, <span class="dt">addBoxplot =</span> <span class="ot">TRUE</span>) {</a>
<a class="sourceLine" id="cb5-18" data-line-number="18"><span class="kw">beeswarm</span> (myExpres <span class="op">~</span><span class="st"> </span>lev,</a>
<a class="sourceLine" id="cb5-19" data-line-number="19"><span class="dt">ylab =</span> <span class="st">"Expression"</span>, <span class="dt">xlab =</span> <span class="st">"Groups"</span>,</a>
<a class="sourceLine" id="cb5-20" data-line-number="20"><span class="dt">main =</span> aTitle,</a>
<a class="sourceLine" id="cb5-21" data-line-number="21"><span class="dt">labels =</span> groupLabels)</a>
<a class="sourceLine" id="cb5-22" data-line-number="22"><span class="cf">if</span> (addBoxplot)</a>
<a class="sourceLine" id="cb5-23" data-line-number="23"><span class="kw">boxplot</span> (myExpres <span class="op">~</span><span class="st"> </span>lev, <span class="dt">add =</span> T, <span class="dt">names =</span> <span class="kw">c</span> ( <span class="st">""</span>, <span class="st">""</span>), <span class="dt">col =</span> <span class="st">"# 0000ff22"</span>)</a>
<a class="sourceLine" id="cb5-24" data-line-number="24"><span class="co"># Según un post de: https://www.r-statistics.com/2011/03/beeswarm-boxplot-and-plotting-it-with-r/</span></a>
<a class="sourceLine" id="cb5-25" data-line-number="25">}</a></code></pre></div>
</div>
<div id="procesamos-la-documentación" class="slide section level1">
<h1>2.2 Procesamos la documentación</h1>
<ul>
<li>Para crear la documentación en formato “estándar” lo único que necesitamos ahora se hacer:</li>
</ul>
<div class="sourceCode" id="cb6"><pre class="sourceCode r"><code class="sourceCode r"><a class="sourceLine" id="cb6-1" data-line-number="1"><span class="kw">setwd</span> ( <span class="st">"boxPlotDotted"</span>)</a>
<a class="sourceLine" id="cb6-2" data-line-number="2"><span class="kw">require</span> (DevTools)</a>
<a class="sourceLine" id="cb6-3" data-line-number="3"><span class="kw">documento</span> ()</a></code></pre></div>
<ul>
<li>En el directorio <code>man</code> debería haber aparecido un archivo de ayuda:<code>boxPlotDotted.Rda</code>.</li>
</ul>
</div>
<div id="revisión-del-archivo-description" class="slide section level1">
<h1>3.1 Revisión del archivo DESCRIPTION</h1>
<ul>
<li>El archivo DESCRIPTION contiene información sobre diversos aspectos del paquete, la mayoría bastante intuitiva</li>
</ul>
<div class="sourceCode" id="cb7"><pre class="sourceCode r"><code class="sourceCode r"><a class="sourceLine" id="cb7-1" data-line-number="1">Package<span class="op">:</span><span class="st"> </span>boxPlotDotted</a>
<a class="sourceLine" id="cb7-2" data-line-number="2">Title<span class="op">:</span><span class="st"> </span>What the Package <span class="kw">Does</span> (one line, title case)</a>
<a class="sourceLine" id="cb7-3" data-line-number="3">Version<span class="op">:</span><span class="st"> </span><span class="dv">0</span>.<span class="dv">0</span>.<span class="fl">0.9000</span></a>
<a class="sourceLine" id="cb7-4" data-line-number="4">Authors <span class="op">@</span><span class="st"> </span>R<span class="op">:</span><span class="st"> </span><span class="kw">person</span> ( <span class="st">"First"</span>, <span class="st">"Last"</span>, <span class="dt">email =</span> <span class="st">"[email protected]"</span>, <span class="dt">role =</span> <span class="kw">c</span> ( <span class="st">"aut"</span>, <span class="st">"cree"</span>))</a>
<a class="sourceLine" id="cb7-5" data-line-number="5">Description<span class="op">:</span><span class="st"> </span>What the package <span class="kw">does</span> (one paragraph).</a>
<a class="sourceLine" id="cb7-6" data-line-number="6">Depends<span class="op">:</span><span class="st"> </span><span class="kw">R</span> (<span class="op">></span><span class="st"> </span><span class="er">=</span><span class="st"> </span><span class="dv">3</span>.<span class="fl">3.2</span>)</a>
<a class="sourceLine" id="cb7-7" data-line-number="7">License<span class="op">:</span><span class="st"> </span>What license is it under?</a>
<a class="sourceLine" id="cb7-8" data-line-number="8">Encoding<span class="op">:</span><span class="st"> </span>UTF<span class="dv">-8</span></a>
<a class="sourceLine" id="cb7-9" data-line-number="9">LazyData<span class="op">:</span><span class="st"> </span>true</a>
<a class="sourceLine" id="cb7-10" data-line-number="10">RoxygenNote<span class="op">:</span><span class="st"> </span><span class="dv">6</span>.<span class="fl">0.1</span></a></code></pre></div>
<ul>
<li>Esta información se actualizará</li>
</ul>
</div>
<div id="actualización-del-archivo-description" class="slide section level1">
<h1>3.2 Actualización del archivo DESCRIPTION</h1>
<ul>
<li>La cambiamos por la información de nuestro paquete</li>
</ul>
<div class="sourceCode" id="cb8"><pre class="sourceCode r"><code class="sourceCode r"><a class="sourceLine" id="cb8-1" data-line-number="1">Package<span class="op">:</span><span class="st"> </span>boxPlotDotted</a>
<a class="sourceLine" id="cb8-2" data-line-number="2">Type<span class="op">:</span><span class="st"> </span>Package</a>
<a class="sourceLine" id="cb8-3" data-line-number="3">Title<span class="op">:</span><span class="st"> </span>Diagramas de puntos y de caja</a>
<a class="sourceLine" id="cb8-4" data-line-number="4">Version<span class="op">:</span><span class="st"> </span><span class="dv">0</span>.<span class="fl">1.1</span></a>
<a class="sourceLine" id="cb8-5" data-line-number="5">Author<span class="op">:</span><span class="st"> </span>Alex Sanchez</a>
<a class="sourceLine" id="cb8-6" data-line-number="6">Maintainer<span class="op">:</span><span class="st"> </span>Alex Sanchez <span class="op"><</span>asanchez<span class="op">@</span>ub.edu<span class="op">></span></a>
<a class="sourceLine" id="cb8-7" data-line-number="7">Description<span class="op">:</span><span class="st"> </span>Este paquete nos servirá para hacer un diagrama de caja, <span class="st">`</span><span class="dt">boxplot</span><span class="st">`</span>, un diagrama de puntos,<span class="st">`</span><span class="dt"> dotchart, o ambos superpuestos (según el número de puntos podemos decidir).</span></a>
<a class="sourceLine" id="cb8-8" data-line-number="8"><span class="dt">License: GPL 2</span></a>
<a class="sourceLine" id="cb8-9" data-line-number="9"><span class="dt">LazyData: TRUE</span></a>
<a class="sourceLine" id="cb8-10" data-line-number="10"><span class="dt">RoxygenNote: 6.0.1</span></a></code></pre></div>
<p>Ver <a href="http://r-pkgs.had.co.nz/description.html">en este enlace</a> mas información sobre este archivo y cómo modificarlo.</p>
</div>
<div id="revisión-del-archivo-namespace" class="slide section level1">
<h1>3.3 Revisión del archivo NAMESPACE</h1>
<ul>
<li><p>Cuando se carga un paquete con <code>library ()</code> sólo se ponen en memoria los objetos que han sido “exportados”</p></li>
<li><p>En este archivo se indica los objetos que se desea exportar lo que los hará directamente visibles</p>
<ul>
<li>Los objetos exportados deben tener ayuda</li>
<li>Los objetos no exportados no necesitan estar documentados</li>
</ul></li>
<li><p>Para exportar dos objetos a, b utilizaremos: <code>export (a, b)</code></p></li>
<li><p>La opción por defecto es exportar todo con esta instrucción:</p>
<ul>
<li><code>ExportPattern (" ^ [^ \ \.] ")</code></li>
</ul></li>
</ul>
</div>
<div id="compilación-e-instalación" class="slide section level1">
<h1>4. Compilación e Instalación</h1>
<ul>
<li><p>Tradicionalmente se hace por separado.</p></li>
<li><p>La instrucción <code>install</code> del paquete<code>DevTools ()</code>combina las dos</p></li>
</ul>
<p>Nos colocamos en el directorio de donde cuelga el directorio del paquete</p>
<div class="sourceCode" id="cb9"><pre class="sourceCode r"><code class="sourceCode r"><a class="sourceLine" id="cb9-1" data-line-number="1"><span class="kw">setwd</span> ( <span class="st">".."</span>)</a></code></pre></div>
<p>Y ejecutamos la instrucción <code>install ()</code></p>
<div class="sourceCode" id="cb10"><pre class="sourceCode r"><code class="sourceCode r"><a class="sourceLine" id="cb10-1" data-line-number="1"><span class="kw">require</span> (DevTools)</a>
<a class="sourceLine" id="cb10-2" data-line-number="2"><span class="kw">install</span> ( <span class="st">"boxPlotDotted"</span>)</a></code></pre></div>
</div>
<div id="probamos-el-paquete" class="slide section level1">
<h1>4.2 Probamos el paquete</h1>
<div class="sourceCode" id="cb11"><pre class="sourceCode r"><code class="sourceCode r"><a class="sourceLine" id="cb11-1" data-line-number="1"><span class="kw">require</span> (boxPlotDotted)</a>
<a class="sourceLine" id="cb11-2" data-line-number="2">expres <-<span class="kw">c</span> (<span class="kw">rnorm</span> (<span class="dv">10</span>,<span class="dv">5</span>,<span class="dv">2</span>), <span class="kw">rnorm</span> (<span class="dv">10</span>,<span class="dv">10</span>,<span class="dv">2</span>))</a>
<a class="sourceLine" id="cb11-3" data-line-number="3">trado <-<span class="st"> </span><span class="kw">as.factor</span> (<span class="kw">c</span> (<span class="kw">recibe</span> ( <span class="st">"CT"</span>, <span class="dv">10</span>), <span class="kw">recibe</span> ( <span class="st">"TR"</span>, <span class="dv">10</span>)))</a>
<a class="sourceLine" id="cb11-4" data-line-number="4">titulo <-<span class="st"> "Treatment effect"</span></a>
<a class="sourceLine" id="cb11-5" data-line-number="5">groupLab <-<span class="st"> </span><span class="kw">c</span> ( <span class="st">"Control"</span>, <span class="st">"Treatment"</span>)</a>
<a class="sourceLine" id="cb11-6" data-line-number="6">opt <-<span class="st"> </span><span class="kw">par</span> (<span class="dt">PCH =</span> <span class="dv">2</span>)</a>
<a class="sourceLine" id="cb11-7" data-line-number="7"><span class="co"># BoxplotWithDots (myExpres = expres, lev = trado, aTitle = titulo, groupLabels = groupLab)</span></a></code></pre></div>
</div>
<div id="y-ahora-un-poco-de-pràctica" class="slide section level1">
<h1><em>Y ahora un poco de pràctica</em></h1>
<ul>
<li>Elegimos la función con la que trabajar. Supondremos que se llama <code>unaFuncion</code> y está contenida en el archivo <code>unaFuncion.R</code>.
<ul>
<li><strong>NOTA:</strong> <em>Aquí podéis usar la función que deseéis. El ejemplo no contienen ninguna</em></li>
</ul></li>
<li>Repetimos paso a paso el proceso de creación del paquete a partir de la función que hemos aportado.</li>
</ul>
<div class="sourceCode" id="cb12"><pre class="sourceCode r"><code class="sourceCode r"><a class="sourceLine" id="cb12-1" data-line-number="1"><span class="kw">setwd</span> ( <span class="st">"~ / elMeuDirectoriDeTreball"</span>)</a>
<a class="sourceLine" id="cb12-2" data-line-number="2"><span class="kw">library</span> (DevTools)</a>
<a class="sourceLine" id="cb12-3" data-line-number="3"><span class="kw">create</span> ( <span class="st">"unPaquete"</span>)</a>
<a class="sourceLine" id="cb12-4" data-line-number="4"><span class="kw">setwd</span> ( <span class="st">"unPaquete"</span>)</a>
<a class="sourceLine" id="cb12-5" data-line-number="5"><span class="co"># Copiamos el archivo `unaFuncion.R` el directorio R</span></a>
<a class="sourceLine" id="cb12-6" data-line-number="6"><span class="co"># Documentamos la función con el sistema de Roxygen</span></a>
<a class="sourceLine" id="cb12-7" data-line-number="7"><span class="kw">document</span>()</a>
<a class="sourceLine" id="cb12-8" data-line-number="8"><span class="kw">setwd</span>( <span class="st">".."</span>)</a>
<a class="sourceLine" id="cb12-9" data-line-number="9"><span class="co"># La instalamos</span></a>
<a class="sourceLine" id="cb12-10" data-line-number="10"><span class="kw">install</span> (<span class="st">"unPaquete"</span>)</a></code></pre></div>
</div>
<div id="referencias-y-enlaces" class="slide section level1">
<h1>Referencias y enlaces</h1>
<ul>
<li>[Libro sobre creación de paquetes] (<a href="http://r-pkgs.had.co.nz/" class="uri">http://r-pkgs.had.co.nz/</a>)</li>
<li>[Curso sobre creación de paquetes] (<a href="http://courses.had.co.nz/12-devtools/" class="uri">http://courses.had.co.nz/12-devtools/</a>)</li>
</ul>
</div>
<!-- dynamically load mathjax for compatibility with self-contained -->
<script>
(function () {
var script = document.createElement("script");
script.type = "text/javascript";
script.src = "https://mathjax.rstudio.com/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML";
document.getElementsByTagName("head")[0].appendChild(script);
})();
</script>
</body>
</html>