@pendle/core-v2 4.5.1-beta-3 → 4.5.1-beta-4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. package/build/artifacts/contracts/interfaces/IPActionMiscV3.sol/IPActionMiscV3.dbg.json +1 -1
  2. package/build/artifacts/contracts/interfaces/IPActionMiscV3.sol/IPActionMiscV3.json +44 -34
  3. package/build/artifacts/contracts/interfaces/IPAllActionV3.sol/IPAllActionV3.dbg.json +1 -1
  4. package/build/artifacts/contracts/interfaces/IPAllActionV3.sol/IPAllActionV3.json +44 -34
  5. package/build/artifacts/contracts/interfaces/IPReflector.sol/IPReflector.dbg.json +4 -0
  6. package/build/artifacts/contracts/interfaces/IPReflector.sol/IPReflector.json +30 -0
  7. package/build/artifacts/contracts/offchain-helpers/PendlePoolDeployHelper.sol/PendlePoolDeployHelper.dbg.json +1 -1
  8. package/build/artifacts/contracts/offchain-helpers/PendlePoolDeployHelper.sol/PendlePoolDeployHelper.json +2 -2
  9. package/build/artifacts/contracts/router/ActionMiscV3.sol/ActionMiscV3.dbg.json +1 -1
  10. package/build/artifacts/contracts/router/ActionMiscV3.sol/ActionMiscV3.json +46 -36
  11. package/build/artifacts/contracts/router/Reflector.sol/Reflector.dbg.json +1 -1
  12. package/build/artifacts/contracts/router/Reflector.sol/Reflector.json +2 -7
  13. package/contracts/interfaces/IPActionMiscV3.sol +4 -3
  14. package/contracts/interfaces/IPReflector.sol +6 -0
  15. package/contracts/router/ActionMiscV3.sol +14 -27
  16. package/contracts/router/Reflector.sol +21 -13
  17. package/package.json +2 -2
  18. package/typechain-types/ActionMiscV3.ts +55 -44
  19. package/typechain-types/IPActionMiscV3.ts +55 -44
  20. package/typechain-types/IPAllActionV3.ts +55 -44
  21. package/typechain-types/IPReflector.ts +95 -0
  22. package/typechain-types/Reflector.ts +1 -4
  23. package/typechain-types/factories/ActionMiscV3__factory.ts +45 -35
  24. package/typechain-types/factories/IPActionMiscV3__factory.ts +44 -34
  25. package/typechain-types/factories/IPAllActionV3__factory.ts +44 -34
  26. package/typechain-types/factories/IPReflector__factory.ts +42 -0
  27. package/typechain-types/factories/PendlePoolDeployHelper__factory.ts +1 -1
  28. package/typechain-types/factories/Reflector__factory.ts +1 -6
  29. package/typechain-types/hardhat.d.ts +9 -18
  30. package/typechain-types/index.ts +2 -4
@@ -275,6 +275,7 @@ export interface IPAllActionV3Interface extends utils.Interface {
275
275
  "addLiquiditySingleToken(address,address,uint256,(uint256,uint256,uint256,uint256,uint256),(address,uint256,address,address,(uint8,address,bytes,bool)),(address,uint256,((uint256,uint256,uint256,uint8,address,address,address,address,uint256,uint256,uint256,bytes),bytes,uint256)[],((uint256,uint256,uint256,uint8,address,address,address,address,uint256,uint256,uint256,bytes),bytes,uint256)[],bytes))": FunctionFragment;
276
276
  "addLiquiditySingleTokenKeepYt(address,address,uint256,uint256,(address,uint256,address,address,(uint8,address,bytes,bool)))": FunctionFragment;
277
277
  "boostMarkets(address[])": FunctionFragment;
278
+ "callAndReflect(address,bytes,bytes,bytes)": FunctionFragment;
278
279
  "claimOwnership()": FunctionFragment;
279
280
  "exitPostExpToSy(address,address,uint256,uint256,uint256)": FunctionFragment;
280
281
  "exitPostExpToToken(address,address,uint256,uint256,(address,uint256,address,address,(uint8,address,bytes,bool)))": FunctionFragment;
@@ -285,7 +286,6 @@ export interface IPAllActionV3Interface extends utils.Interface {
285
286
  "mintPyFromToken(address,address,uint256,(address,uint256,address,address,(uint8,address,bytes,bool)))": FunctionFragment;
286
287
  "mintSyFromToken(address,address,uint256,(address,uint256,address,address,(uint8,address,bytes,bool)))": FunctionFragment;
287
288
  "multicall((bool,bytes)[])": FunctionFragment;
288
- "multicallAlpha(address,bytes,bytes)": FunctionFragment;
289
289
  "owner()": FunctionFragment;
290
290
  "pendingOwner()": FunctionFragment;
291
291
  "redeemDueInterestAndRewards(address,address[],address[],address[])": FunctionFragment;
@@ -369,6 +369,10 @@ export interface IPAllActionV3Interface extends utils.Interface {
369
369
  functionFragment: "boostMarkets",
370
370
  values: [string[]]
371
371
  ): string;
372
+ encodeFunctionData(
373
+ functionFragment: "callAndReflect",
374
+ values: [string, BytesLike, BytesLike, BytesLike]
375
+ ): string;
372
376
  encodeFunctionData(
373
377
  functionFragment: "claimOwnership",
374
378
  values?: undefined
@@ -425,10 +429,6 @@ export interface IPAllActionV3Interface extends utils.Interface {
425
429
  functionFragment: "multicall",
426
430
  values: [IPActionMiscV3.Call3Struct[]]
427
431
  ): string;
428
- encodeFunctionData(
429
- functionFragment: "multicallAlpha",
430
- values: [string, BytesLike, BytesLike]
431
- ): string;
432
432
  encodeFunctionData(functionFragment: "owner", values?: undefined): string;
433
433
  encodeFunctionData(
434
434
  functionFragment: "pendingOwner",
@@ -624,6 +624,10 @@ export interface IPAllActionV3Interface extends utils.Interface {
624
624
  functionFragment: "boostMarkets",
625
625
  data: BytesLike
626
626
  ): Result;
627
+ decodeFunctionResult(
628
+ functionFragment: "callAndReflect",
629
+ data: BytesLike
630
+ ): Result;
627
631
  decodeFunctionResult(
628
632
  functionFragment: "claimOwnership",
629
633
  data: BytesLike
@@ -661,10 +665,6 @@ export interface IPAllActionV3Interface extends utils.Interface {
661
665
  data: BytesLike
662
666
  ): Result;
663
667
  decodeFunctionResult(functionFragment: "multicall", data: BytesLike): Result;
664
- decodeFunctionResult(
665
- functionFragment: "multicallAlpha",
666
- data: BytesLike
667
- ): Result;
668
668
  decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result;
669
669
  decodeFunctionResult(
670
670
  functionFragment: "pendingOwner",
@@ -1389,6 +1389,14 @@ export interface IPAllActionV3 extends BaseContract {
1389
1389
  overrides?: Overrides & { from?: string | Promise<string> }
1390
1390
  ): Promise<ContractTransaction>;
1391
1391
 
1392
+ callAndReflect(
1393
+ reflector: string,
1394
+ selfCall1: BytesLike,
1395
+ selfCall2: BytesLike,
1396
+ reflectCall: BytesLike,
1397
+ overrides?: PayableOverrides & { from?: string | Promise<string> }
1398
+ ): Promise<ContractTransaction>;
1399
+
1392
1400
  claimOwnership(
1393
1401
  overrides?: Overrides & { from?: string | Promise<string> }
1394
1402
  ): Promise<ContractTransaction>;
@@ -1470,13 +1478,6 @@ export interface IPAllActionV3 extends BaseContract {
1470
1478
  overrides?: PayableOverrides & { from?: string | Promise<string> }
1471
1479
  ): Promise<ContractTransaction>;
1472
1480
 
1473
- multicallAlpha(
1474
- reflector: string,
1475
- selfCall: BytesLike,
1476
- reflectCall: BytesLike,
1477
- overrides?: PayableOverrides & { from?: string | Promise<string> }
1478
- ): Promise<ContractTransaction>;
1479
-
1480
1481
  owner(overrides?: CallOverrides): Promise<[string]>;
1481
1482
 
1482
1483
  pendingOwner(overrides?: CallOverrides): Promise<[string]>;
@@ -1771,6 +1772,14 @@ export interface IPAllActionV3 extends BaseContract {
1771
1772
  overrides?: Overrides & { from?: string | Promise<string> }
1772
1773
  ): Promise<ContractTransaction>;
1773
1774
 
1775
+ callAndReflect(
1776
+ reflector: string,
1777
+ selfCall1: BytesLike,
1778
+ selfCall2: BytesLike,
1779
+ reflectCall: BytesLike,
1780
+ overrides?: PayableOverrides & { from?: string | Promise<string> }
1781
+ ): Promise<ContractTransaction>;
1782
+
1774
1783
  claimOwnership(
1775
1784
  overrides?: Overrides & { from?: string | Promise<string> }
1776
1785
  ): Promise<ContractTransaction>;
@@ -1852,13 +1861,6 @@ export interface IPAllActionV3 extends BaseContract {
1852
1861
  overrides?: PayableOverrides & { from?: string | Promise<string> }
1853
1862
  ): Promise<ContractTransaction>;
1854
1863
 
1855
- multicallAlpha(
1856
- reflector: string,
1857
- selfCall: BytesLike,
1858
- reflectCall: BytesLike,
1859
- overrides?: PayableOverrides & { from?: string | Promise<string> }
1860
- ): Promise<ContractTransaction>;
1861
-
1862
1864
  owner(overrides?: CallOverrides): Promise<string>;
1863
1865
 
1864
1866
  pendingOwner(overrides?: CallOverrides): Promise<string>;
@@ -2185,6 +2187,20 @@ export interface IPAllActionV3 extends BaseContract {
2185
2187
 
2186
2188
  boostMarkets(markets: string[], overrides?: CallOverrides): Promise<void>;
2187
2189
 
2190
+ callAndReflect(
2191
+ reflector: string,
2192
+ selfCall1: BytesLike,
2193
+ selfCall2: BytesLike,
2194
+ reflectCall: BytesLike,
2195
+ overrides?: CallOverrides
2196
+ ): Promise<
2197
+ [string, string, string] & {
2198
+ selfRes1: string;
2199
+ selfRes2: string;
2200
+ reflectRes: string;
2201
+ }
2202
+ >;
2203
+
2188
2204
  claimOwnership(overrides?: CallOverrides): Promise<void>;
2189
2205
 
2190
2206
  exitPostExpToSy(
@@ -2276,13 +2292,6 @@ export interface IPAllActionV3 extends BaseContract {
2276
2292
  overrides?: CallOverrides
2277
2293
  ): Promise<IPActionMiscV3.ResultStructOutput[]>;
2278
2294
 
2279
- multicallAlpha(
2280
- reflector: string,
2281
- selfCall: BytesLike,
2282
- reflectCall: BytesLike,
2283
- overrides?: CallOverrides
2284
- ): Promise<[string, string] & { selfRes: string; reflectRes: string }>;
2285
-
2286
2295
  owner(overrides?: CallOverrides): Promise<string>;
2287
2296
 
2288
2297
  pendingOwner(overrides?: CallOverrides): Promise<string>;
@@ -3131,6 +3140,14 @@ export interface IPAllActionV3 extends BaseContract {
3131
3140
  overrides?: Overrides & { from?: string | Promise<string> }
3132
3141
  ): Promise<BigNumber>;
3133
3142
 
3143
+ callAndReflect(
3144
+ reflector: string,
3145
+ selfCall1: BytesLike,
3146
+ selfCall2: BytesLike,
3147
+ reflectCall: BytesLike,
3148
+ overrides?: PayableOverrides & { from?: string | Promise<string> }
3149
+ ): Promise<BigNumber>;
3150
+
3134
3151
  claimOwnership(
3135
3152
  overrides?: Overrides & { from?: string | Promise<string> }
3136
3153
  ): Promise<BigNumber>;
@@ -3212,13 +3229,6 @@ export interface IPAllActionV3 extends BaseContract {
3212
3229
  overrides?: PayableOverrides & { from?: string | Promise<string> }
3213
3230
  ): Promise<BigNumber>;
3214
3231
 
3215
- multicallAlpha(
3216
- reflector: string,
3217
- selfCall: BytesLike,
3218
- reflectCall: BytesLike,
3219
- overrides?: PayableOverrides & { from?: string | Promise<string> }
3220
- ): Promise<BigNumber>;
3221
-
3222
3232
  owner(overrides?: CallOverrides): Promise<BigNumber>;
3223
3233
 
3224
3234
  pendingOwner(overrides?: CallOverrides): Promise<BigNumber>;
@@ -3514,6 +3524,14 @@ export interface IPAllActionV3 extends BaseContract {
3514
3524
  overrides?: Overrides & { from?: string | Promise<string> }
3515
3525
  ): Promise<PopulatedTransaction>;
3516
3526
 
3527
+ callAndReflect(
3528
+ reflector: string,
3529
+ selfCall1: BytesLike,
3530
+ selfCall2: BytesLike,
3531
+ reflectCall: BytesLike,
3532
+ overrides?: PayableOverrides & { from?: string | Promise<string> }
3533
+ ): Promise<PopulatedTransaction>;
3534
+
3517
3535
  claimOwnership(
3518
3536
  overrides?: Overrides & { from?: string | Promise<string> }
3519
3537
  ): Promise<PopulatedTransaction>;
@@ -3595,13 +3613,6 @@ export interface IPAllActionV3 extends BaseContract {
3595
3613
  overrides?: PayableOverrides & { from?: string | Promise<string> }
3596
3614
  ): Promise<PopulatedTransaction>;
3597
3615
 
3598
- multicallAlpha(
3599
- reflector: string,
3600
- selfCall: BytesLike,
3601
- reflectCall: BytesLike,
3602
- overrides?: PayableOverrides & { from?: string | Promise<string> }
3603
- ): Promise<PopulatedTransaction>;
3604
-
3605
3616
  owner(overrides?: CallOverrides): Promise<PopulatedTransaction>;
3606
3617
 
3607
3618
  pendingOwner(overrides?: CallOverrides): Promise<PopulatedTransaction>;
@@ -0,0 +1,95 @@
1
+ /* Autogenerated file. Do not edit manually. */
2
+ /* tslint:disable */
3
+ /* eslint-disable */
4
+ import {
5
+ BaseContract,
6
+ BigNumber,
7
+ BytesLike,
8
+ CallOverrides,
9
+ ContractTransaction,
10
+ Overrides,
11
+ PopulatedTransaction,
12
+ Signer,
13
+ utils,
14
+ } from "ethers";
15
+ import { FunctionFragment, Result } from "@ethersproject/abi";
16
+ import { Listener, Provider } from "@ethersproject/providers";
17
+ import type {
18
+ TypedEventFilter,
19
+ TypedEvent,
20
+ TypedListener,
21
+ OnEvent,
22
+ } from "./common";
23
+
24
+ export interface IPReflectorInterface extends utils.Interface {
25
+ contractName: "IPReflector";
26
+ functions: {
27
+ "reflect(bytes)": FunctionFragment;
28
+ };
29
+
30
+ encodeFunctionData(functionFragment: "reflect", values: [BytesLike]): string;
31
+
32
+ decodeFunctionResult(functionFragment: "reflect", data: BytesLike): Result;
33
+
34
+ events: {};
35
+ }
36
+
37
+ export interface IPReflector extends BaseContract {
38
+ contractName: "IPReflector";
39
+ connect(signerOrProvider: Signer | Provider | string): this;
40
+ attach(addressOrName: string): this;
41
+ deployed(): Promise<this>;
42
+
43
+ interface: IPReflectorInterface;
44
+
45
+ queryFilter<TEvent extends TypedEvent>(
46
+ event: TypedEventFilter<TEvent>,
47
+ fromBlockOrBlockhash?: string | number | undefined,
48
+ toBlock?: string | number | undefined
49
+ ): Promise<Array<TEvent>>;
50
+
51
+ listeners<TEvent extends TypedEvent>(
52
+ eventFilter?: TypedEventFilter<TEvent>
53
+ ): Array<TypedListener<TEvent>>;
54
+ listeners(eventName?: string): Array<Listener>;
55
+ removeAllListeners<TEvent extends TypedEvent>(
56
+ eventFilter: TypedEventFilter<TEvent>
57
+ ): this;
58
+ removeAllListeners(eventName?: string): this;
59
+ off: OnEvent<this>;
60
+ on: OnEvent<this>;
61
+ once: OnEvent<this>;
62
+ removeListener: OnEvent<this>;
63
+
64
+ functions: {
65
+ reflect(
66
+ inputData: BytesLike,
67
+ overrides?: Overrides & { from?: string | Promise<string> }
68
+ ): Promise<ContractTransaction>;
69
+ };
70
+
71
+ reflect(
72
+ inputData: BytesLike,
73
+ overrides?: Overrides & { from?: string | Promise<string> }
74
+ ): Promise<ContractTransaction>;
75
+
76
+ callStatic: {
77
+ reflect(inputData: BytesLike, overrides?: CallOverrides): Promise<string>;
78
+ };
79
+
80
+ filters: {};
81
+
82
+ estimateGas: {
83
+ reflect(
84
+ inputData: BytesLike,
85
+ overrides?: Overrides & { from?: string | Promise<string> }
86
+ ): Promise<BigNumber>;
87
+ };
88
+
89
+ populateTransaction: {
90
+ reflect(
91
+ inputData: BytesLike,
92
+ overrides?: Overrides & { from?: string | Promise<string> }
93
+ ): Promise<PopulatedTransaction>;
94
+ };
95
+ }
@@ -74,10 +74,7 @@ export interface Reflector extends BaseContract {
74
74
  ): Promise<ContractTransaction>;
75
75
 
76
76
  callStatic: {
77
- reflect(
78
- inputData: BytesLike,
79
- overrides?: CallOverrides
80
- ): Promise<[boolean, string] & { success: boolean; result: string }>;
77
+ reflect(inputData: BytesLike, overrides?: CallOverrides): Promise<string>;
81
78
  };
82
79
 
83
80
  filters: {};
@@ -613,6 +613,50 @@ const _abi = [
613
613
  stateMutability: "nonpayable",
614
614
  type: "function",
615
615
  },
616
+ {
617
+ inputs: [
618
+ {
619
+ internalType: "address payable",
620
+ name: "reflector",
621
+ type: "address",
622
+ },
623
+ {
624
+ internalType: "bytes",
625
+ name: "selfCall1",
626
+ type: "bytes",
627
+ },
628
+ {
629
+ internalType: "bytes",
630
+ name: "selfCall2",
631
+ type: "bytes",
632
+ },
633
+ {
634
+ internalType: "bytes",
635
+ name: "reflectCall",
636
+ type: "bytes",
637
+ },
638
+ ],
639
+ name: "callAndReflect",
640
+ outputs: [
641
+ {
642
+ internalType: "bytes",
643
+ name: "selfRes1",
644
+ type: "bytes",
645
+ },
646
+ {
647
+ internalType: "bytes",
648
+ name: "selfRes2",
649
+ type: "bytes",
650
+ },
651
+ {
652
+ internalType: "bytes",
653
+ name: "reflectRes",
654
+ type: "bytes",
655
+ },
656
+ ],
657
+ stateMutability: "payable",
658
+ type: "function",
659
+ },
616
660
  {
617
661
  inputs: [
618
662
  {
@@ -1663,40 +1707,6 @@ const _abi = [
1663
1707
  stateMutability: "payable",
1664
1708
  type: "function",
1665
1709
  },
1666
- {
1667
- inputs: [
1668
- {
1669
- internalType: "address payable",
1670
- name: "reflector",
1671
- type: "address",
1672
- },
1673
- {
1674
- internalType: "bytes",
1675
- name: "selfCall",
1676
- type: "bytes",
1677
- },
1678
- {
1679
- internalType: "bytes",
1680
- name: "reflectCall",
1681
- type: "bytes",
1682
- },
1683
- ],
1684
- name: "multicallAlpha",
1685
- outputs: [
1686
- {
1687
- internalType: "bytes",
1688
- name: "selfRes",
1689
- type: "bytes",
1690
- },
1691
- {
1692
- internalType: "bytes",
1693
- name: "reflectRes",
1694
- type: "bytes",
1695
- },
1696
- ],
1697
- stateMutability: "payable",
1698
- type: "function",
1699
- },
1700
1710
  {
1701
1711
  inputs: [
1702
1712
  {
@@ -2122,7 +2132,7 @@ const _abi = [
2122
2132
  ];
2123
2133
 
2124
2134
  const _bytecode =
2125
- "0x6080806040523461001657614c81908161001c8239f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c80631a8631b2146101275780632d8f9d8d146101225780632e071dc61461011d578063339748cb14610118578063339a55721461011357806347f1de221461010e5780635d3e105c1461010957806360fc84661461010457806367e3d5a5146100ff5780637036e052146100fa5780638354a5e5146100f5578063a89eba4a146100f0578063bd61951d146100eb578063c2d6d65d146100e6578063d0f42385146100e1578063f06a07a0146100dc5763f7e375e8146100d757600080fd5b611eeb565b611dae565b611bcd565b611af8565b611a05565b6118dd565b61147c565b611372565b611190565b610fe8565b610e21565b610b9c565b610931565b6106f3565b6105b8565b61048d565b6101aa565b73ffffffffffffffffffffffffffffffffffffffff81160361014a57565b600080fd5b359061015a8261012c565b565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc608091011261014a576004356101928161012c565b9060243561019f8161012c565b906044359060643590565b3461014a576101b83661015c565b909273ffffffffffffffffffffffffffffffffffffffff9384841692604051947fafd27bf50000000000000000000000000000000000000000000000000000000086526020958681600481895afa91821561037a578491600093610394575b508161037f575b50506040517fdb74aa1500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482018190526024820152905085816044816000895af195861561037a5760009661034b575b505084106102e8577f52e05e4badd3463bad837f42fe3ba58c739d1b3081cff9bb6eb02a24034d455d6102e495604051931692806102d18733958360209093929193604081019481520152565b0390a46040519081529081906020820190565b0390f35b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f536c6970706167653a20494e53554646494349454e545f50545f59545f4f55546044820152606490fd5b0390fd5b61036b929650803d10610373575b6103638183610427565b810190612995565b933880610284565b503d610359565b6121be565b61038c9289339116613d27565b38828161021e565b6103b5919350883d8a116103bc575b6103ad8183610427565b8101906121a9565b9138610217565b503d6103a3565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040810190811067ffffffffffffffff82111761040e57604052565b6103c3565b67ffffffffffffffff811161040e57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761040e57604052565b6040519061015a826103f2565b67ffffffffffffffff811161040e5760051b60200190565b3461014a576020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261014a5760043567ffffffffffffffff811161014a573660238201121561014a578060040135906104e982610475565b916104f76040519384610427565b8083526024602084019160051b8301019136831161014a57602401905b8282106105265761052484612231565b005b84809183356105348161012c565b815201910190610514565b908160a091031261014a5790565b9060807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc83011261014a576004356105848161012c565b916024356105918161012c565b91604435916064359067ffffffffffffffff821161014a576105b59160040161053f565b90565b60206106126105c63661054d565b8094916105d96080839695960183612ad5565b356105e381612b08565b6105ec81612b12565b8061068657506105fb82612321565b61060b8884013580923390613543565b85856136f1565b927f71c7a44161eb32e4640f6c8f0586db5f1d2e03306e2c63bb2e0f7cd0a8fc690c8135936106408561012c565b6040805173ffffffffffffffffffffffffffffffffffffffff9586168152938801356020850152830186905283169390921691339180606081015b0390a4604051908152f35b80610692600392612b12565b036106d4576106a082612321565b6106b08884013580923390613543565b6106cf816106bd85612321565b6106c960408701612321565b90613581565b61060b565b6106dd82612e86565b6106cf60408301356106ee8161012c565b612f93565b3461014a576107013661015c565b91929073ffffffffffffffffffffffffffffffffffffffff91828516916040938451967fd94073d40000000000000000000000000000000000000000000000000000000088526020978881600481895afa801561037a5782859161077193600091610914575b50853391166134bc565b85517f2f13b60c0000000000000000000000000000000000000000000000000000000081528881600481895afa801561037a5784916000916108e7575b50156108d5575b505084517fbcb7ea5d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201529587876024816000895af196871561037a576000976108b6575b50861061085857845191825260208201869052919091169033907f31af33f80f4b396e3d4e42b38ecd3e022883a9bf689fd63f47afbe1d389cb6e790604090a451908152f35b84517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f536c6970706167653a20494e53554646494349454e545f53595f4f55540000006044820152606490fd5b6108ce919750883d8a11610373576103638183610427565b9538610812565b6108e09133876134bc565b38826107b5565b61090791508a3d8c1161090d575b6108ff8183610427565b81019061221c565b386107ae565b503d6108f5565b61092b91508c8d3d106103bc576103ad8183610427565b38610767565b3461014a5761093f3661054d565b92919060006080850161095a6109558288612ad5565b612b4b565b61096381612b12565b80610a6657505050610977848284866137a5565b925b60208501358410610a07577fcd34b6ac7e4b72ab30845649aef2f4fd41945ae2dc08f625be69738bbd0f9aa960209535936109b38561012c565b73ffffffffffffffffffffffffffffffffffffffff9061067b87836040519485941698169633968460409194939273ffffffffffffffffffffffffffffffffffffffff606083019616825260208201520152565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f536c6970706167653a20494e53554646494349454e545f544f4b454e5f4f55546044820152606490fd5b80610a72600392612b12565b03610ab7575050610a85848284306137a5565b92610a9f84610a9660408801612321565b6106c988612321565b610ab28482610aad88612321565b613015565b610979565b60608601610af7610ade610ade610ad88a888a610ad388612321565b6137a5565b93612321565b73ffffffffffffffffffffffffffffffffffffffff1690565b90610b0e610b0760408a01612321565b9389612ad5565b92823b15610b98576040517f2bdb823c0000000000000000000000000000000000000000000000000000000081529493859392849286928492610b549260048501612ca5565b03925af1801561037a57610b7f575b50610b706106ee85612321565b92610ab28482610aad88612321565b80610b8c610b9292610413565b80612c00565b38610b63565b8480fd5b3461014a57610baa3661054d565b909273ffffffffffffffffffffffffffffffffffffffff938484169060409283517fafd27bf50000000000000000000000000000000000000000000000000000000081526020968782600481885afa91821561037a57600092610e02575b5085517fd94073d40000000000000000000000000000000000000000000000000000000081528881600481895afa801561037a57828691610c5593600091610de5575b508c3391166134bc565b85517f2f13b60c0000000000000000000000000000000000000000000000000000000081528881600481895afa801561037a578591600091610dc8575b5015610db6575b505084517fbcb7ea5d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216600482015287816024816000895af197881561037a57600098610d97575b505060018710610858578697610d32876102e498997f5f2e0499a3b6a21fd5e1fac44ac47c9aa7c3afa39076d67162a4993411d496da9486612d32565b9735610d3d8161012c565b610d7e8a8a895194859416973397859094939260609273ffffffffffffffffffffffffffffffffffffffff6080840197168352602083015260408201520152565b0390a45191825260208201929092529081906040820190565b610dae929850803d10610373576103638183610427565b953880610cf5565b610dc19133876134bc565b3883610c99565b610ddf91508a3d8c1161090d576108ff8183610427565b38610c92565b610dfc91508c8d3d106103bc576103ad8183610427565b38610c4b565b610e1a919250883d8a116103bc576103ad8183610427565b9038610c08565b60607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261014a57600435610e578161012c565b60443567ffffffffffffffff811161014a57610e79604091369060040161053f565b610e8281612e86565b013590610e8e8261012c565b610e9782612f93565b906024358210610a075781610eb29184610aad60209661012c565b604051908152f35b9181601f8401121561014a5782359167ffffffffffffffff831161014a576020808501948460051b01011161014a57565b60005b838110610efe5750506000910152565b8181015183820152602001610eee565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602093610f4a81518092818752878088019101610eeb565b0116010190565b6020808201908083528351809252604092604081018260408560051b8401019601946000925b858410610f88575050505050505090565b909192939495968580610fd7837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0866001960301885286838d5180511515845201519181858201520190610f0e565b990194019401929594939190610f77565b6020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261014a5760043567ffffffffffffffff811161014a57611033903690600401610eba565b9161103d83610475565b92604061104d6040519586610427565b8185527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061107a83610475565b01906000908460005b84811061111b57505050505060005b8181106110a757604051806102e48782610f51565b806110e96110e46110c76110be600195878a61232b565b8781019061236b565b91906110dc6110d786898c61232b565b6123bc565b923691612400565b61316c565b6110fb6110f4610468565b9215158352565b8582015261110982886121f9565b5261111481876121f9565b5001611092565b8251611126816103f2565b84815260608382015282828b010152018590611083565b9181601f8401121561014a5782359167ffffffffffffffff831161014a576020838186019501011161014a57565b90916111826105b593604084526040840190610f0e565b916020818403910152610f0e565b60607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261014a576004356111c68161012c565b67ffffffffffffffff60243581811161014a576111e790369060040161113d565b6044929192359082821161014a5761121b61121661120c61122594369060040161113d565b9690933691612400565b61313f565b9490503691612400565b61128060405180958180947fef4093630000000000000000000000000000000000000000000000000000000082526020600483015273ffffffffffffffffffffffffffffffffffffffff600096879687936024830190610f0e565b0393165af193841561037a57819282956112b5575b505050156112ac576102e46040519283928361116b565b50805190602001fd5b9194509291503d8085853e6112ca8185610427565b830190604084830312610b98578351936112e385612212565b6020810151918211611305576112fc939495500161319c565b91388080611295565b8580fd5b91602061015a92949361014081019581520190805182526020810151602083015260408101516040830152606081015160608301526080810151608083015260a081015160a083015260c081015160c083015260e081015160e083015261010080910151910152565b3461014a5760e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261014a576004356113ad8161012c565b6024356113b98161012c565b67ffffffffffffffff9160a43583811161014a576113db90369060040161053f565b9060c43593841161014a576113f761140994369060040161053f565b9260843591606435916044359161248e565b906102e460405192839283611309565b61015a90929192610120810193805182526020810151602083015260408101516040830152606081015160608301526080810151608083015260a081015160a083015260c081015160c083015260e081015160e083015261010080910151910152565b3461014a5760e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261014a576004356114b78161012c565b6024356114c38161012c565b6044359160843560c43567ffffffffffffffff811161014a576114ea90369060040161053f565b906114f3612437565b506114fc612437565b9373ffffffffffffffffffffffffffffffffffffffff9081811693604051917f2c8ce6bc000000000000000000000000000000000000000000000000000000008352606083600481895afa92831561037a576000936000916000916118a7575b50866117f2575b8a6117e0575b61157f60643561157a8d8d51613256565b6138de565b9a60408b019b808d52806116e0575b50918a916115e46102e49d60806115d66115ce7f5d98132a999dd75863cdd284a57d3eb44c9b14d38240d22576dea4f09a73626e9c9b9a99988851613256565b835190613268565b950194855251606435613268565b60a08d018181528451919791156116935750505061161c94506116078484613b71565b90308783160361167e575b5050519088613ba8565b60e088015260c08701525b61165c61164b611640602089015160608a015190613256565b60c089015190613256565b8061010089015260a435111561292f565b6040519416938061166f87339583611309565b0390a460405191829182611419565b61168c918784519216613015565b3880611612565b9193509150856116a9575b505050505050611627565b6116c36116cb966116ba87866138f0565b338a87166134bc565b51928a613935565b60e088015260c087015238808080808061169e565b916020611760898f61170f9061170660009884989e889e9d9c9b999e1680958a16613015565b518233816134bc565b6040517fbcb7ea5d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8f16600482015295869283919082906024820190565b03925af192831561037a576102e49d60806115d68f967f5d98132a999dd75863cdd284a57d3eb44c9b14d38240d22576dea4f09a73626e9c6115ce916115e4966000916117c1575b5060608a01529698999a9b9c505050509d50509161158e565b6117da915060203d602011610373576103638183610427565b386117a8565b6117ed8b33888516613543565b611569565b6117fe8784338b6134bc565b604080517ff6b911bc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b16600482015230602482015260448101899052908160648160008d5af1801561037a57600091600091611876575b508b5260208b0152611563565b905061189a915060403d6040116118a0575b6118928183610427565b810190613211565b38611869565b503d611888565b9150506118cd91935060603d6060116118d6575b6118c58183610427565b8101906131de565b9193913861155c565b503d6118bb565b60a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261014a576004356119138161012c565b60243561191f8161012c565b60443567ffffffffffffffff811161014a57611941602091369060040161053f565b9160a461195b606435946119548661012c565b8380612b55565b94600073ffffffffffffffffffffffffffffffffffffffff80948160405198899788967f769f8e5d0000000000000000000000000000000000000000000000000000000088521660048701528a6024870152166044850152608435606485015260016084850152165af190811561037a576000916119e6575b50604080519182526020820192909252f35b6119ff915060203d602011610373576103638183610427565b386119d4565b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261014a57600435611a3b8161012c565b60243567ffffffffffffffff811161014a57600091611a5f8392369060040161113d565b90816040519283928337810184815203915af4611a7a6129a4565b906103476040519283927f1934afc800000000000000000000000000000000000000000000000000000000845215156004840152604060248401526044830190610f0e565b61015a9092919260a081019360808091805184526020810151602085015260408101516040850152606081015160608501520151910152565b3461014a5760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261014a576102e4600435611b368161012c565b602435611b428161012c565b60643591611b4e6129d4565b50611b5d836044358484613275565b939050611b726084356080860151101561292f565b7f19ded113217988ae612547683a5154518a667a51ba409520760f26303a8a6f5873ffffffffffffffffffffffffffffffffffffffff80604051941694169280611bbe87339583611d6f565b0390a460405191829182611abf565b611bd63661054d565b92909173ffffffffffffffffffffffffffffffffffffffff9384821692604051927fafd27bf50000000000000000000000000000000000000000000000000000000084526020938481600481895afa801561037a57611c3f928592600092611d50575b50612b55565b6040517fdb74aa1500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201819052602482015290969095848760448160008a5af196871561037a57600097611d31575b5086106102e8577f3193c546cf854c6a4c63afa03b04d35e4242c2761af34a4093fc5daa88dd530891611d1d8888611cdc87612321565b9360405195869516983398013590859094939260609273ffffffffffffffffffffffffffffffffffffffff6080840197168352602083015260408201520152565b0390a4604080519182526020820192909252f35b611d49919750853d8711610373576103638183610427565b9538611ca5565b611d68919250873d89116103bc576103ad8183610427565b9038611c39565b91602061015a92949360c08101958152019060808091805184526020810151602085015260408101516040850152606081015160608501520151910152565b3461014a5760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261014a57600435611de98161012c565b60243590611df68261012c565b6064359160843567ffffffffffffffff811161014a57611e1a90369060040161053f565b91611e236129d4565b5082611e33856044358585613275565b95611e5d73ffffffffffffffffffffffffffffffffffffffff9384938460808b0151911687612d32565b953590611e698261012c565b82604051951685526020850152856040850152611eb1606085018860808091805184526020810151602085015260408101516040850152606081015160608501520151910152565b169216907f6a5433209d35fd4b489a9e43d2bc02e9d1a24430d39be6fff13b4bb52a72a7e06101003392a46102e460405192839283611d6f565b3461014a5760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261014a576004803590611f288261012c565b67ffffffffffffffff60243581811161014a57611f489036908401610eba565b93909160443581811161014a57611f629036908601610eba565b909160643590811161014a57611f7b9036908701610eba565b94909660005b8181106121075750505060005b8181106120515750505060005b828110611fa457005b611fbd610ade610ade611fb884878a612a10565b612321565b90600060405180937f9262187b000000000000000000000000000000000000000000000000000000008252818381612014898c830191909173ffffffffffffffffffffffffffffffffffffffff6020820193169052565b03925af191821561037a5760019261202e575b5001611f9b565b61204a903d806000833e6120428183610427565b810190612a81565b5038612027565b8060008561206c610ade610ade611fb86120cb97898b612a10565b89836040518097819582947f7d24da4d0000000000000000000000000000000000000000000000000000000084528301604060019193929373ffffffffffffffffffffffffffffffffffffffff60608201951681528260208201520152565b03925af191821561037a576001926120e5575b5001611f8e565b612101903d806000833e6120f98183610427565b810190612aa7565b506120de565b80600087612122610ade610ade611fb861217497898b612a10565b8b836040518097819582947fef5cfb8c000000000000000000000000000000000000000000000000000000008452830191909173ffffffffffffffffffffffffffffffffffffffff6020820193169052565b03925af191821561037a5760019261218e575b5001611f81565b6121a2903d806000833e6120428183610427565b5038612187565b9081602091031261014a57516105b58161012c565b6040513d6000823e3d90fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b805182101561220d5760209160051b010190565b6121ca565b8015150361014a57565b9081602091031261014a57516105b581612212565b906000805b835181101561231b5761226c610ade610ade61225284886121f9565b5173ffffffffffffffffffffffffffffffffffffffff1690565b906122e261227d61225283886121f9565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff90911660248201526000604482015292602091829185918290889082906064820190565b03925af192831561037a576001936122fd575b505001612236565b8161231392903d1061090d576108ff8183610427565b5038806122f5565b50509050565b356105b58161012c565b919081101561220d5760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc18136030182121561014a570190565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561014a570180359067ffffffffffffffff821161014a5760200191813603831361014a57565b356105b581612212565b67ffffffffffffffff811161040e57601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b92919261240c826123c6565b9161241a6040519384610427565b82948184528183011161014a578281602093846000960137010152565b60405190610120820182811067ffffffffffffffff82111761040e57604052816101006000918281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e08201520152565b92919596949693909361249f612437565b506124a8612437565b90604051907f2c8ce6bc00000000000000000000000000000000000000000000000000000000825260608260048173ffffffffffffffffffffffffffffffffffffffff8b165afa91821561037a57600099600091600094612907575b50888b8780612834575b5050508061280e575b8a6125278861157a848951613256565b80604088015280612705575b50509173ffffffffffffffffffffffffffffffffffffffff96612677949261258361257061256589978c9b9a51613256565b604088015190613268565b9260808701938452604087015190613268565b60a086018181528351919591156126b95750506125bc93506125a5838c613b71565b9030898316036126a4575b50505189878d16613ba8565b60e083015260c08201525b6125fd8a6125ec6125e16020850151606086015190613256565b60c085015190613256565b8061010085015286849c1689612d32565b9935926126098461012c565b846040519716875260208701528960408701526060860190805182526020810151602083015260408101516040830152606081015160608301526080810151608083015260a081015160a083015260c081015160c083015260e081015160e083015261010080910151910152565b169216907fe2e505a9d93e4a8a524a95c07024bbe068fa9972f10bb08f51fd0d0c4e11834a6101803392a4565b6126b2918984519216613015565b38806125b0565b91509150836126cc575b505050506125c7565b6126e66126f2946126dd85856138f0565b338b86166134bc565b51908c8b898216613935565b60e083015260c0820152388080806126c3565b73ffffffffffffffffffffffffffffffffffffffff8085999896949a936127396020948a988461279e9c1694859116613015565b61274960408901518333816134bc565b6000604051809a819582947fbcb7ea5d000000000000000000000000000000000000000000000000000000008452166004830191909173ffffffffffffffffffffffffffffffffffffffff6020820193169052565b03925af196871561037a5761258361257061256573ffffffffffffffffffffffffffffffffffffffff9b8c9b6126779a6000916127ef575b5060608a01529597999a5050505092948c919850612533565b612808915060203d602011610373576103638183610427565b386127d6565b61282f813373ffffffffffffffffffffffffffffffffffffffff8516613543565b612517565b8260409261285d836128c0963373ffffffffffffffffffffffffffffffffffffffff82166134bc565b83517ff6b911bc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015230602482015260448101939093529193849283916000919083906064820190565b0393165af1801561037a576000916000916128e6575b5086526020860152888b8761250e565b9050612901915060403d6040116118a0576118928183610427565b386128d6565b9150925061292591995060603d6060116118d6576118c58183610427565b9199919238612504565b1561293657565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f536c6970706167653a20494e53554646494349454e545f53595f4f55540000006044820152606490fd5b9081602091031261014a575190565b3d156129cf573d906129b5826123c6565b916129c36040519384610427565b82523d6000602084013e565b606090565b6040519060a0820182811067ffffffffffffffff82111761040e5760405260006080838281528260208201528260408201528260608201520152565b919081101561220d5760051b0190565b9080601f8301121561014a57815190602091612a3b81610475565b93612a496040519586610427565b81855260208086019260051b82010192831161014a57602001905b828210612a72575050505090565b81518152908301908301612a64565b9060208282031261014a57815167ffffffffffffffff811161014a576105b59201612a20565b91909160408184031261014a57805192602082015167ffffffffffffffff811161014a576105b59201612a20565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff818136030182121561014a570190565b6004111561014a57565b60041115612b1c57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b356105b581612b08565b6105b59291612b676080840184612ad5565b35612b7181612b08565b612b7a81612b12565b80612ba05750612b8983612321565b612b9a602085013580923390613543565b91613639565b80612bac600392612b12565b03612be6578235612bbc8161012c565b612b9a60208501358092612bd1823383613543565b612bda8161012c565b6106c960408801612321565b612bef83612e86565b612b9a60408401356106ee8161012c565b600091031261014a57565b359061015a82612b08565b90357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18236030181121561014a57016020813591019167ffffffffffffffff821161014a57813603831361014a57565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b9173ffffffffffffffffffffffffffffffffffffffff80921683526020830152606060408301528235612cd781612b08565b612ce081612b12565b60608301526020830135612cf38161012c565b16608082015260c06060612d1e612d0d6040860186612c16565b608060a087015260e0860191612c66565b930135612d2a81612212565b151591015290565b93929360808501612d466109558288612ad5565b612d4f81612b12565b80612d70575050602092612d64928692613850565b925b01358210610a0757565b80612d816003929895969498612b12565b03612dc15750612d9882612dbc9260209530613850565b8095612db382612daa60408701612321565b6106c987612321565b610aad84612321565b612d66565b90610ade610ade612de385612de9946060820198612dde8a612321565b613850565b95612321565b612dff612df860408501612321565b9284612ad5565b90803b1561014a57612e459460008094604051978895869485937f2bdb823c00000000000000000000000000000000000000000000000000000000855260048501612ca5565b03925af191821561037a57602092612e73575b50612dbc612e686106ee83612321565b8095610aad84612321565b80610b8c612e8092610413565b38612e58565b73ffffffffffffffffffffffffffffffffffffffff612ea482612321565b16612f6657612eb660208201356134dd565b612ec8610ade610ade60608401612321565b612ed4610ade83612321565b612f5e576020820135905b612ee883612321565b90612ef66080850185612ad5565b93813b1561014a57600093602091612f40604051978896879586947f2bdb823c00000000000000000000000000000000000000000000000000000000865201359060048501612ca5565b03925af1801561037a57612f515750565b80610b8c61015a92610413565b600090612edf565b612f8e612f75610ade83612321565b612f8160608401612321565b60208401359133906134bc565b612eb6565b73ffffffffffffffffffffffffffffffffffffffff1680612fb357504790565b6020602491604051928380927f70a082310000000000000000000000000000000000000000000000000000000082523060048301525afa90811561037a57600091612ffc575090565b6105b5915060203d602011610373576103638183610427565b821561313a5773ffffffffffffffffffffffffffffffffffffffff16806130ae5750600080809381935af16130486129a4565b501561305057565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f6574682073656e64206661696c656400000000000000000000000000000000006044820152fd5b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff9092166024830152604482019290925261015a9161313582606481015b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101845283610427565b613f8d565b505050565b60008091602081519101305af4906131556129a4565b90821580613164575b6112ac57565b50600161315e565b60008091602081519101305af4916131826129a4565b9183159081613193575b506112ac57565b9050153861318c565b81601f8201121561014a5780516131b2816123c6565b926131c06040519485610427565b8184526020828401011161014a576105b59160208085019101610eeb565b9081606091031261014a5780516131f48161012c565b91604060208301516132058161012c565b9201516105b58161012c565b919082604091031261014a576020825192015190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b9190820180921161326357565b613227565b9190820391821161326357565b9093916132806129d4565b9373ffffffffffffffffffffffffffffffffffffffff92838716916040908151907f2c8ce6bc000000000000000000000000000000000000000000000000000000008252606082600481885afa94851561037a5760008093600097613494575b509a826133c4575b50505061335e93929161330a86600093816020996133ac575b50508a51613256565b818a0152519586809581947fbcb7ea5d0000000000000000000000000000000000000000000000000000000083526004830191909173ffffffffffffffffffffffffffffffffffffffff6020820193169052565b0393165af1801561037a576133869160009161338d575b508060608501526020840151613256565b6080830152565b6133a6915060203d602011610373576103638183610427565b38613375565b6133bd918b8916908c3391166134bc565b3881613301565b918492916133db82613440969998979433846134bc565b89600084518097819582947ff6b911bc0000000000000000000000000000000000000000000000000000000084528c168b6004850160409194939294606082019573ffffffffffffffffffffffffffffffffffffffff80921683521660208201520152565b03925af1801561037a5760209661335e9660009461330a9386918791613475575b508d52898d015293509682949596506132e8565b905061348e9150853d87116118a0576118928183610427565b38613461565b919650506134b291925060603d6060116118d6576118c58183610427565b95909291386132e0565b929190826134cb575b50505050565b6134d493613d27565b388080806134c5565b34036134e557565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f657468206d69736d6174636800000000000000000000000000000000000000006044820152fd5b90919073ffffffffffffffffffffffffffffffffffffffff168061356c5750905034036134e557565b8161357657505050565b61015a923091613d27565b73ffffffffffffffffffffffffffffffffffffffff91908216806135e6575016803b1561014a576000906004604051809481937fd0e30db00000000000000000000000000000000000000000000000000000000083525af1801561037a57612f515750565b915050803b1561014a576040517f2e1a7d4d00000000000000000000000000000000000000000000000000000000815260048101929092526000908290602490829084905af1801561037a57612f515750565b608490604060209495013561364d8161012c565b73ffffffffffffffffffffffffffffffffffffffff80948183169788156000146136e65761368f81945b6136808161012c565b61368a8482613d8f565b61012c565b60405198899788967f20e8c5650000000000000000000000000000000000000000000000000000000088521660048701526024860152604485015260006064850152165af190811561037a57600091612ffc575090565b61368f600094613677565b602093604060849394960135906137078261012c565b73ffffffffffffffffffffffffffffffffffffffff94859182841698891560001461379a5761374581955b61373b8161012c565b61368a8582613d8f565b604051998a9889977f20e8c565000000000000000000000000000000000000000000000000000000008952166004880152602487015260448601526064850152165af190811561037a57600091612ffc575090565b613745600095613732565b60a49060006040936020959673ffffffffffffffffffffffffffffffffffffffff958691828416938a8061383e575b505001356137e18161012c565b60405198899788967f769f8e5d0000000000000000000000000000000000000000000000000000000088521660048701526024860152166044840152816064840152600160848401525af190811561037a57600091612ffc575090565b613849913387613d27565b388a6137d4565b60a49060006020949560409473ffffffffffffffffffffffffffffffffffffffff8096819301356138808161012c565b604051998a9889977f769f8e5d000000000000000000000000000000000000000000000000000000008952166004880152602487015216604485015282606485015260016084850152165af190811561037a57600091612ffc575090565b90808210156138eb575090565b905090565b906138fa90614101565b610ade57503090565b6105b5939273ffffffffffffffffffffffffffffffffffffffff60609316825260208201528160408201520190610f0e565b9593916000966000968460019161395261394e82614101565b1590565b613b25575b5050613965575b5050505050565b73ffffffffffffffffffffffffffffffffffffffff979496919293959780931660409788517f70a0823100000000000000000000000000000000000000000000000000000000918282526020978883806139df896004830191909173ffffffffffffffffffffffffffffffffffffffff6020820193169052565b0381885afa97881561037a578c93600099613b06575b5080613a0184896149fa565b9385519d8e95869485937f5b709f1700000000000000000000000000000000000000000000000000000000855216916004840192613a3e93613903565b0392165a90600091f197881561037a57613a96988795613a6692600092613ae5575b50613256565b985180988194829383526004830191909173ffffffffffffffffffffffffffffffffffffffff6020820193169052565b03915afa801561037a57613abd94613ab793600092613ac8575b5050613268565b90613256565b91388080808061395e565b613ade9250803d10610373576103638183610427565b3880613ab0565b613afd9192508c8d3d106118a0576118928183610427565b90509038613a60565b613b1e9199508a3d8c11610373576103638183610427565b97386139f5565b929950975050613b5091935073ffffffffffffffffffffffffffffffffffffffff8516968789614750565b9492989197859198998096156139575781613b6a92613015565b3880613957565b90613b7b90614101565b6105b557503090565b604051600081526020810181811067ffffffffffffffff82111761040e5760405290565b90939160009460009473ffffffffffffffffffffffffffffffffffffffff9182811693604051927f2c8ce6bc000000000000000000000000000000000000000000000000000000008452606084600481895afa93841561037a57600094613d03575b508194600194613c1c61394e84614101565b613cc8575b5050505050613c2f57505050565b91604091613c7a949596936000613c44613b84565b938551978895869485937f29910b1100000000000000000000000000000000000000000000000000000000855260048501613903565b03925af1801561037a576105b592600090600092613ca4575b50613c9e9192613256565b93613256565b613c9e9250613cc2915060403d6040116118a0576118928183610427565b91613c93565b9299509299509250613cde935016958685614750565b9197909690839083613cf2575b8080613c21565b613cfb92613015565b388080613ceb565b613d1d91945060603d6060116118d6576118c58183610427565b5090509238613c0a565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff9283166024820152929091166044830152606482019290925261015a916131358260848101613109565b919073ffffffffffffffffffffffffffffffffffffffff831692831561231b576040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff831660248201526020948590829060449082905afa801561037a576b7fffffffffffffffffffffff91600091613f70575b5010613e2d5750509050565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000085820190815273ffffffffffffffffffffffffffffffffffffffff8416602483015260006044830181905291829190613eb581606481015b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610427565b519082855af1613ec36129a4565b81613f40575b5015613ee257613eda929350614a37565b80388061231b565b606484604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152600c60248201527f5361666520417070726f766500000000000000000000000000000000000000006044820152fd5b80518015925086908315613f58575b50505038613ec9565b613f68935082018101910161221c565b388581613f4f565b613f879150863d8811610373576103638183610427565b38613e21565b604051613ff89173ffffffffffffffffffffffffffffffffffffffff16613fb3826103f2565b6000806020958685527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656487860152868151910182855af1613ff26129a4565b91614b7f565b805190828215928315614095575b505050156140115750565b608490604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152fd5b6140a5935082018101910161221c565b388281614006565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561014a570180359067ffffffffffffffff821161014a57602001918160051b3603831361014a57565b61410e60408201826140ad565b905015908161411b575090565b61412a915060608101906140ad565b90501590565b9060808282031261014a57815192602083015192604081015192606082015167ffffffffffffffff811161014a576105b5920161319c565b9061417282612b12565b52565b9594929093919360a0948060a0890160a08a525260c09560c089019260c08360051b8b01019781946000925b85841061421e575050505050505091859493916141dd6142109460206105b599019073ffffffffffffffffffffffffffffffffffffffff169052565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60408701528583036060870152612c66565b916080818403910152610f0e565b909192939495997fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff408d82030183528a357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa18336030181121561014a57820160609080357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe818236030181121561014a578101928281528335838201526020938493608091858101358385015260409283928d848401359087015282016142e290612c0b565b8b86016142ee91614168565b81016142f99061014f565b9060e09182860161431e9173ffffffffffffffffffffffffffffffffffffffff169052565b614329818e0161014f565b6101009081870161434e9173ffffffffffffffffffffffffffffffffffffffff169052565b614359828d0161014f565b926101209384880161437f9173ffffffffffffffffffffffffffffffffffffffff169052565b820161438a9061014f565b610140908188016143af9173ffffffffffffffffffffffffffffffffffffffff169052565b610160918301358288015261018093830135848801528201356101a087015281016143d991612c16565b90916101c08601526101e08501906143f092612c66565b6143fc85870186612c16565b8583038887015261440d9291612c66565b9301359101529b01969594600101939201906141a1565b959391979694929060a0988060a0890160a08a525260c09960c089019260c08360051b8b01019b81946000925b85841061449f575050505050505091614210939161448d6105b5989994602089019073ffffffffffffffffffffffffffffffffffffffff169052565b60408701528583036060870152612c66565b9091929394959d8e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff408e8303018452357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa18336030181121561014a57820160609080357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe818236030181121561014a578101928281528335838201526020938493608091858101358385015260409283928d8484013590870152820161456390612c0b565b8b860161456f91614168565b810161457a9061014f565b9060e09182860161459f9173ffffffffffffffffffffffffffffffffffffffff169052565b6145aa818e0161014f565b610100908187016145cf9173ffffffffffffffffffffffffffffffffffffffff169052565b6145da828d0161014f565b92610120938488016146009173ffffffffffffffffffffffffffffffffffffffff169052565b820161460b9061014f565b610140908188016146309173ffffffffffffffffffffffffffffffffffffffff169052565b610160918301358288015261018093830135848801528201356101a0870152810161465a91612c16565b90916101c08601526101e085019061467192612c66565b61467d85870186612c16565b8583038887015261468e9291612c66565b9301359101529f0196959460010193920190614451565b901561220d578035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa18136030182121561014a570190565b9035907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe818136030182121561014a570190565b60808101959490936060939261472681612b12565b855273ffffffffffffffffffffffffffffffffffffffff8093166020860152604085015216910152565b9193909360009360008094614767610ade84612321565b9084986040850161477881876140ad565b905061490d575b5050606084019061479082866140ad565b90506147af575b505050509060206147aa92013590614b61565b841190565b89989395949799926148398773ffffffffffffffffffffffffffffffffffffffff8b6148818761484b9761480160a06147fb6147f56147ef8a9e896140ad565b906146a5565b806146de565b01612321565b98899261310961482c614825606061481f6147f56147ef878d6140ad565b01612b4b565b92886140ad565b9a9097608081019061236b565b94909e60405196879460208601614711565b6040519a8b998a9889967f6122b17300000000000000000000000000000000000000000000000000000000885260048801614175565b0393165af1801561037a57846020936148ce936147aa979280946148d8575b50506148c26148bb8487806148c89697518301019101613211565b9092613256565b99613268565b98613256565b9491923880614797565b6148bb94506148c893506148c291614901913d8091833e6148f98183610427565b810190614130565b969250905093506148a0565b84995084939a5082985091869273ffffffffffffffffffffffffffffffffffffffff928361493a89612321565b91169061494691613d8f565b61495090876140ad565b909a90614960608089018961236b565b61496b9d919d613b84565b906040519e8f98899788967f6122b17300000000000000000000000000000000000000000000000000000000885260048801966149a797614424565b03928c165af196871561037a5781829783996149d3575b506149ca909785613268565b9795388061477f565b90506149ca98506149ef9197503d8084833e6148f98183610427565b5098909791906149be565b9190604051608081019080821067ffffffffffffffff83111761040e57606091604052818152602081019482368737600182965260408201520152565b6040517f095ea7b3000000000000000000000000000000000000000000000000000000006020820190815273ffffffffffffffffffffffffffffffffffffffff90931660248201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60448201526000928392918390614aba8160648101613e89565b51925af1614ac66129a4565b81614b32575b5015614ad457565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f5361666520417070726f766500000000000000000000000000000000000000006044820152fd5b8051801592508215614b47575b505038614acc565b614b5a925060208091830101910161221c565b3880614b3f565b81810291818304149015171561326357670de0b6b3a7640000900490565b91929015614bfa5750815115614b93575090565b3b15614b9c5790565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152fd5b825190915015614c0d5750805190602001fd5b610347906040519182917f08c379a0000000000000000000000000000000000000000000000000000000008352602060048401526024830190610f0e56fea2646970667358221220b00d2435880ea5403fcadb35b7ca2ab2042c0d7edbd8ad8854dd0cc0a2cbc1f264736f6c63430008170033";
2135
+ "0x6080806040523461001657614ce1908161001c8239f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c80631a8631b2146101275780632d8f9d8d146101225780632e071dc61461011d578063339748cb14610118578063339a55721461011357806347f1de221461010e5780635d3e105c1461010957806360fc8466146101045780637036e052146100ff5780638354a5e5146100fa5780639fa02c86146100f5578063a89eba4a146100f0578063bd61951d146100eb578063c2d6d65d146100e6578063d0f42385146100e1578063f06a07a0146100dc5763f7e375e8146100d757600080fd5b611f42565b611e05565b611c24565b611b4f565b611a5c565b611934565b611776565b6112b0565b6111a6565b610fe8565b610e21565b610b9c565b610931565b6106f3565b6105b8565b61048d565b6101aa565b73ffffffffffffffffffffffffffffffffffffffff81160361014a57565b600080fd5b359061015a8261012c565b565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc608091011261014a576004356101928161012c565b9060243561019f8161012c565b906044359060643590565b3461014a576101b83661015c565b909273ffffffffffffffffffffffffffffffffffffffff9384841692604051947fafd27bf50000000000000000000000000000000000000000000000000000000086526020958681600481895afa91821561037a578491600093610394575b508161037f575b50506040517fdb74aa1500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482018190526024820152905085816044816000895af195861561037a5760009661034b575b505084106102e8577f52e05e4badd3463bad837f42fe3ba58c739d1b3081cff9bb6eb02a24034d455d6102e495604051931692806102d18733958360209093929193604081019481520152565b0390a46040519081529081906020820190565b0390f35b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f536c6970706167653a20494e53554646494349454e545f50545f59545f4f55546044820152606490fd5b0390fd5b61036b929650803d10610373575b6103638183610427565b8101906129ec565b933880610284565b503d610359565b612215565b61038c9289339116613d87565b38828161021e565b6103b5919350883d8a116103bc575b6103ad8183610427565b810190612200565b9138610217565b503d6103a3565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040810190811067ffffffffffffffff82111761040e57604052565b6103c3565b67ffffffffffffffff811161040e57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761040e57604052565b6040519061015a826103f2565b67ffffffffffffffff811161040e5760051b60200190565b3461014a576020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261014a5760043567ffffffffffffffff811161014a573660238201121561014a578060040135906104e982610475565b916104f76040519384610427565b8083526024602084019160051b8301019136831161014a57602401905b8282106105265761052484612288565b005b84809183356105348161012c565b815201910190610514565b908160a091031261014a5790565b9060807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc83011261014a576004356105848161012c565b916024356105918161012c565b91604435916064359067ffffffffffffffff821161014a576105b59160040161053f565b90565b60206106126105c63661054d565b8094916105d96080839695960183612b2c565b356105e381612b5f565b6105ec81612b69565b8061068657506105fb82612378565b61060b88840135809233906135a3565b8585613751565b927f71c7a44161eb32e4640f6c8f0586db5f1d2e03306e2c63bb2e0f7cd0a8fc690c8135936106408561012c565b6040805173ffffffffffffffffffffffffffffffffffffffff9586168152938801356020850152830186905283169390921691339180606081015b0390a4604051908152f35b80610692600392612b69565b036106d4576106a082612378565b6106b088840135809233906135a3565b6106cf816106bd85612378565b6106c960408701612378565b906135e1565b61060b565b6106dd82612edd565b6106cf60408301356106ee8161012c565b612fea565b3461014a576107013661015c565b91929073ffffffffffffffffffffffffffffffffffffffff91828516916040938451967fd94073d40000000000000000000000000000000000000000000000000000000088526020978881600481895afa801561037a5782859161077193600091610914575b508533911661351c565b85517f2f13b60c0000000000000000000000000000000000000000000000000000000081528881600481895afa801561037a5784916000916108e7575b50156108d5575b505084517fbcb7ea5d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201529587876024816000895af196871561037a576000976108b6575b50861061085857845191825260208201869052919091169033907f31af33f80f4b396e3d4e42b38ecd3e022883a9bf689fd63f47afbe1d389cb6e790604090a451908152f35b84517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f536c6970706167653a20494e53554646494349454e545f53595f4f55540000006044820152606490fd5b6108ce919750883d8a11610373576103638183610427565b9538610812565b6108e091338761351c565b38826107b5565b61090791508a3d8c1161090d575b6108ff8183610427565b810190612273565b386107ae565b503d6108f5565b61092b91508c8d3d106103bc576103ad8183610427565b38610767565b3461014a5761093f3661054d565b92919060006080850161095a6109558288612b2c565b612ba2565b61096381612b69565b80610a665750505061097784828486613805565b925b60208501358410610a07577fcd34b6ac7e4b72ab30845649aef2f4fd41945ae2dc08f625be69738bbd0f9aa960209535936109b38561012c565b73ffffffffffffffffffffffffffffffffffffffff9061067b87836040519485941698169633968460409194939273ffffffffffffffffffffffffffffffffffffffff606083019616825260208201520152565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f536c6970706167653a20494e53554646494349454e545f544f4b454e5f4f55546044820152606490fd5b80610a72600392612b69565b03610ab7575050610a8584828430613805565b92610a9f84610a9660408801612378565b6106c988612378565b610ab28482610aad88612378565b61306c565b610979565b60608601610af7610ade610ade610ad88a888a610ad388612378565b613805565b93612378565b73ffffffffffffffffffffffffffffffffffffffff1690565b90610b0e610b0760408a01612378565b9389612b2c565b92823b15610b98576040517f2bdb823c0000000000000000000000000000000000000000000000000000000081529493859392849286928492610b549260048501612cfc565b03925af1801561037a57610b7f575b50610b706106ee85612378565b92610ab28482610aad88612378565b80610b8c610b9292610413565b80612c57565b38610b63565b8480fd5b3461014a57610baa3661054d565b909273ffffffffffffffffffffffffffffffffffffffff938484169060409283517fafd27bf50000000000000000000000000000000000000000000000000000000081526020968782600481885afa91821561037a57600092610e02575b5085517fd94073d40000000000000000000000000000000000000000000000000000000081528881600481895afa801561037a57828691610c5593600091610de5575b508c33911661351c565b85517f2f13b60c0000000000000000000000000000000000000000000000000000000081528881600481895afa801561037a578591600091610dc8575b5015610db6575b505084517fbcb7ea5d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216600482015287816024816000895af197881561037a57600098610d97575b505060018710610858578697610d32876102e498997f5f2e0499a3b6a21fd5e1fac44ac47c9aa7c3afa39076d67162a4993411d496da9486612d89565b9735610d3d8161012c565b610d7e8a8a895194859416973397859094939260609273ffffffffffffffffffffffffffffffffffffffff6080840197168352602083015260408201520152565b0390a45191825260208201929092529081906040820190565b610dae929850803d10610373576103638183610427565b953880610cf5565b610dc191338761351c565b3883610c99565b610ddf91508a3d8c1161090d576108ff8183610427565b38610c92565b610dfc91508c8d3d106103bc576103ad8183610427565b38610c4b565b610e1a919250883d8a116103bc576103ad8183610427565b9038610c08565b60607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261014a57600435610e578161012c565b60443567ffffffffffffffff811161014a57610e79604091369060040161053f565b610e8281612edd565b013590610e8e8261012c565b610e9782612fea565b906024358210610a075781610eb29184610aad60209661012c565b604051908152f35b9181601f8401121561014a5782359167ffffffffffffffff831161014a576020808501948460051b01011161014a57565b60005b838110610efe5750506000910152565b8181015183820152602001610eee565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602093610f4a81518092818752878088019101610eeb565b0116010190565b6020808201908083528351809252604092604081018260408560051b8401019601946000925b858410610f88575050505050505090565b909192939495968580610fd7837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0866001960301885286838d5180511515845201519181858201520190610f0e565b990194019401929594939190610f77565b6020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261014a5760043567ffffffffffffffff811161014a57611033903690600401610eba565b9161103d83610475565b92604061104d6040519586610427565b8185527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061107a83610475565b01906000908460005b84811061111b57505050505060005b8181106110a757604051806102e48782610f51565b806110e96110e46110c76110be600195878a612382565b878101906123c2565b91906110dc6110d786898c612382565b612413565b923691612457565b6131cc565b6110fb6110f4610468565b9215158352565b858201526111098288612250565b526111148187612250565b5001611092565b8251611126816103f2565b84815260608382015282828b010152018590611083565b91602061015a92949361014081019581520190805182526020810151602083015260408101516040830152606081015160608301526080810151608083015260a081015160a083015260c081015160c083015260e081015160e083015261010080910151910152565b3461014a5760e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261014a576004356111e18161012c565b6024356111ed8161012c565b67ffffffffffffffff9160a43583811161014a5761120f90369060040161053f565b9060c43593841161014a5761122b61123d94369060040161053f565b926084359160643591604435916124e5565b906102e46040519283928361113d565b61015a90929192610120810193805182526020810151602083015260408101516040830152606081015160608301526080810151608083015260a081015160a083015260c081015160c083015260e081015160e083015261010080910151910152565b3461014a5760e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261014a576004356112eb8161012c565b6024356112f78161012c565b6044359160843560c43567ffffffffffffffff811161014a5761131e90369060040161053f565b9061132761248e565b5061133061248e565b9373ffffffffffffffffffffffffffffffffffffffff9081811693604051917f2c8ce6bc000000000000000000000000000000000000000000000000000000008352606083600481895afa92831561037a576000936000916000916116db575b5086611626575b8a611614575b6113b36064356113ae8d8d51613274565b61393e565b9a60408b019b808d5280611514575b50918a916114186102e49d608061140a6114027f5d98132a999dd75863cdd284a57d3eb44c9b14d38240d22576dea4f09a73626e9c9b9a99988851613274565b835190613286565b950194855251606435613286565b60a08d018181528451919791156114c757505050611450945061143b8484613bd1565b9030878316036114b2575b5050519088613c08565b60e088015260c08701525b61149061147f611474602089015160608a015190613274565b60c089015190613274565b8061010089015260a4351115612986565b604051941693806114a38733958361113d565b0390a46040519182918261124d565b6114c091878451921661306c565b3880611446565b9193509150856114dd575b50505050505061145b565b6114f76114ff966114ee8786613950565b338a871661351c565b51928a613995565b60e088015260c08701523880808080806114d2565b916020611594898f6115439061153a60009884989e889e9d9c9b999e1680958a1661306c565b5182338161351c565b6040517fbcb7ea5d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8f16600482015295869283919082906024820190565b03925af192831561037a576102e49d608061140a8f967f5d98132a999dd75863cdd284a57d3eb44c9b14d38240d22576dea4f09a73626e9c61140291611418966000916115f5575b5060608a01529698999a9b9c505050509d5050916113c2565b61160e915060203d602011610373576103638183610427565b386115dc565b6116218b338885166135a3565b61139d565b6116328784338b61351c565b604080517ff6b911bc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b16600482015230602482015260448101899052908160648160008d5af1801561037a576000916000916116aa575b508b5260208b0152611397565b90506116ce915060403d6040116116d4575b6116c68183610427565b81019061322f565b3861169d565b503d6116bc565b91505061170191935060603d60601161170a575b6116f98183610427565b8101906131fc565b91939138611390565b503d6116ef565b9181601f8401121561014a5782359167ffffffffffffffff831161014a576020838186019501011161014a57565b916117689061175a6105b59593606086526060860190610f0e565b908482036020860152610f0e565b916040818403910152610f0e565b60807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261014a576004356117ac8161012c565b67ffffffffffffffff9060243582811161014a576117ce903690600401611711565b92909160443582811161014a576117e9903690600401611711565b93906064359084821161014a5761181c61180a611817933690600401611711565b9390946060993691612457565b613196565b968091506118f2575b505073ffffffffffffffffffffffffffffffffffffffff939261184f60009361188d933691612457565b836040519687809581947fef409363000000000000000000000000000000000000000000000000000000008352602060048401526024830190610f0e565b0393165af191821561037a576000926118b3575b50506102e4906040519384938461173f565b3d8084833e6118c28183610427565b8101926020828503126118ef5781519283116118ef5750916118e8916102e49301613293565b90386118a1565b80fd5b61188d92975060009361192461181773ffffffffffffffffffffffffffffffffffffffff98979461184f943691612457565b9050989350935081949550611825565b60a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261014a5760043561196a8161012c565b6024356119768161012c565b60443567ffffffffffffffff811161014a57611998602091369060040161053f565b9160a46119b2606435946119ab8661012c565b8380612bac565b94600073ffffffffffffffffffffffffffffffffffffffff80948160405198899788967f769f8e5d0000000000000000000000000000000000000000000000000000000088521660048701528a6024870152166044850152608435606485015260016084850152165af190811561037a57600091611a3d575b50604080519182526020820192909252f35b611a56915060203d602011610373576103638183610427565b38611a2b565b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261014a57600435611a928161012c565b60243567ffffffffffffffff811161014a57600091611ab683923690600401611711565b90816040519283928337810184815203915af4611ad16129fb565b906103476040519283927f1934afc800000000000000000000000000000000000000000000000000000000845215156004840152604060248401526044830190610f0e565b61015a9092919260a081019360808091805184526020810151602085015260408101516040850152606081015160608501520151910152565b3461014a5760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261014a576102e4600435611b8d8161012c565b602435611b998161012c565b60643591611ba5612a2b565b50611bb48360443584846132d5565b939050611bc960843560808601511015612986565b7f19ded113217988ae612547683a5154518a667a51ba409520760f26303a8a6f5873ffffffffffffffffffffffffffffffffffffffff80604051941694169280611c1587339583611dc6565b0390a460405191829182611b16565b611c2d3661054d565b92909173ffffffffffffffffffffffffffffffffffffffff9384821692604051927fafd27bf50000000000000000000000000000000000000000000000000000000084526020938481600481895afa801561037a57611c96928592600092611da7575b50612bac565b6040517fdb74aa1500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201819052602482015290969095848760448160008a5af196871561037a57600097611d88575b5086106102e8577f3193c546cf854c6a4c63afa03b04d35e4242c2761af34a4093fc5daa88dd530891611d748888611d3387612378565b9360405195869516983398013590859094939260609273ffffffffffffffffffffffffffffffffffffffff6080840197168352602083015260408201520152565b0390a4604080519182526020820192909252f35b611da0919750853d8711610373576103638183610427565b9538611cfc565b611dbf919250873d89116103bc576103ad8183610427565b9038611c90565b91602061015a92949360c08101958152019060808091805184526020810151602085015260408101516040850152606081015160608501520151910152565b3461014a5760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261014a57600435611e408161012c565b60243590611e4d8261012c565b6064359160843567ffffffffffffffff811161014a57611e7190369060040161053f565b91611e7a612a2b565b5082611e8a8560443585856132d5565b95611eb473ffffffffffffffffffffffffffffffffffffffff9384938460808b0151911687612d89565b953590611ec08261012c565b82604051951685526020850152856040850152611f08606085018860808091805184526020810151602085015260408101516040850152606081015160608501520151910152565b169216907f6a5433209d35fd4b489a9e43d2bc02e9d1a24430d39be6fff13b4bb52a72a7e06101003392a46102e460405192839283611dc6565b3461014a5760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261014a576004803590611f7f8261012c565b67ffffffffffffffff60243581811161014a57611f9f9036908401610eba565b93909160443581811161014a57611fb99036908601610eba565b909160643590811161014a57611fd29036908701610eba565b94909660005b81811061215e5750505060005b8181106120a85750505060005b828110611ffb57005b612014610ade610ade61200f84878a612a67565b612378565b90600060405180937f9262187b00000000000000000000000000000000000000000000000000000000825281838161206b898c830191909173ffffffffffffffffffffffffffffffffffffffff6020820193169052565b03925af191821561037a57600192612085575b5001611ff2565b6120a1903d806000833e6120998183610427565b810190612ad8565b503861207e565b806000856120c3610ade610ade61200f61212297898b612a67565b89836040518097819582947f7d24da4d0000000000000000000000000000000000000000000000000000000084528301604060019193929373ffffffffffffffffffffffffffffffffffffffff60608201951681528260208201520152565b03925af191821561037a5760019261213c575b5001611fe5565b612158903d806000833e6121508183610427565b810190612afe565b50612135565b80600087612179610ade610ade61200f6121cb97898b612a67565b8b836040518097819582947fef5cfb8c000000000000000000000000000000000000000000000000000000008452830191909173ffffffffffffffffffffffffffffffffffffffff6020820193169052565b03925af191821561037a576001926121e5575b5001611fd8565b6121f9903d806000833e6120998183610427565b50386121de565b9081602091031261014a57516105b58161012c565b6040513d6000823e3d90fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b80518210156122645760209160051b010190565b612221565b8015150361014a57565b9081602091031261014a57516105b581612269565b906000805b8351811015612372576122c3610ade610ade6122a98488612250565b5173ffffffffffffffffffffffffffffffffffffffff1690565b906123396122d46122a98388612250565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff90911660248201526000604482015292602091829185918290889082906064820190565b03925af192831561037a57600193612354575b50500161228d565b8161236a92903d1061090d576108ff8183610427565b50388061234c565b50509050565b356105b58161012c565b91908110156122645760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc18136030182121561014a570190565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561014a570180359067ffffffffffffffff821161014a5760200191813603831361014a57565b356105b581612269565b67ffffffffffffffff811161040e57601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b9291926124638261241d565b916124716040519384610427565b82948184528183011161014a578281602093846000960137010152565b60405190610120820182811067ffffffffffffffff82111761040e57604052816101006000918281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e08201520152565b9291959694969390936124f661248e565b506124ff61248e565b90604051907f2c8ce6bc00000000000000000000000000000000000000000000000000000000825260608260048173ffffffffffffffffffffffffffffffffffffffff8b165afa91821561037a5760009960009160009461295e575b50888b878061288b575b50505080612865575b8a61257e886113ae848951613274565b8060408801528061275c575b50509173ffffffffffffffffffffffffffffffffffffffff966126ce94926125da6125c76125bc89978c9b9a51613274565b604088015190613286565b9260808701938452604087015190613286565b60a0860181815283519195911561271057505061261393506125fc838c613bd1565b9030898316036126fb575b50505189878d16613c08565b60e083015260c08201525b6126548a6126436126386020850151606086015190613274565b60c085015190613274565b8061010085015286849c1689612d89565b9935926126608461012c565b846040519716875260208701528960408701526060860190805182526020810151602083015260408101516040830152606081015160608301526080810151608083015260a081015160a083015260c081015160c083015260e081015160e083015261010080910151910152565b169216907fe2e505a9d93e4a8a524a95c07024bbe068fa9972f10bb08f51fd0d0c4e11834a6101803392a4565b61270991898451921661306c565b3880612607565b9150915083612723575b5050505061261e565b61273d612749946127348585613950565b338b861661351c565b51908c8b898216613995565b60e083015260c08201523880808061271a565b73ffffffffffffffffffffffffffffffffffffffff8085999896949a936127906020948a98846127f59c169485911661306c565b6127a0604089015183338161351c565b6000604051809a819582947fbcb7ea5d000000000000000000000000000000000000000000000000000000008452166004830191909173ffffffffffffffffffffffffffffffffffffffff6020820193169052565b03925af196871561037a576125da6125c76125bc73ffffffffffffffffffffffffffffffffffffffff9b8c9b6126ce9a600091612846575b5060608a01529597999a5050505092948c91985061258a565b61285f915060203d602011610373576103638183610427565b3861282d565b612886813373ffffffffffffffffffffffffffffffffffffffff85166135a3565b61256e565b826040926128b483612917963373ffffffffffffffffffffffffffffffffffffffff821661351c565b83517ff6b911bc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015230602482015260448101939093529193849283916000919083906064820190565b0393165af1801561037a5760009160009161293d575b5086526020860152888b87612565565b9050612958915060403d6040116116d4576116c68183610427565b3861292d565b9150925061297c91995060603d60601161170a576116f98183610427565b919991923861255b565b1561298d57565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f536c6970706167653a20494e53554646494349454e545f53595f4f55540000006044820152606490fd5b9081602091031261014a575190565b3d15612a26573d90612a0c8261241d565b91612a1a6040519384610427565b82523d6000602084013e565b606090565b6040519060a0820182811067ffffffffffffffff82111761040e5760405260006080838281528260208201528260408201528260608201520152565b91908110156122645760051b0190565b9080601f8301121561014a57815190602091612a9281610475565b93612aa06040519586610427565b81855260208086019260051b82010192831161014a57602001905b828210612ac9575050505090565b81518152908301908301612abb565b9060208282031261014a57815167ffffffffffffffff811161014a576105b59201612a77565b91909160408184031261014a57805192602082015167ffffffffffffffff811161014a576105b59201612a77565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff818136030182121561014a570190565b6004111561014a57565b60041115612b7357565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b356105b581612b5f565b6105b59291612bbe6080840184612b2c565b35612bc881612b5f565b612bd181612b69565b80612bf75750612be083612378565b612bf16020850135809233906135a3565b91613699565b80612c03600392612b69565b03612c3d578235612c138161012c565b612bf160208501358092612c288233836135a3565b612c318161012c565b6106c960408801612378565b612c4683612edd565b612bf160408401356106ee8161012c565b600091031261014a57565b359061015a82612b5f565b90357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18236030181121561014a57016020813591019167ffffffffffffffff821161014a57813603831361014a57565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b9173ffffffffffffffffffffffffffffffffffffffff80921683526020830152606060408301528235612d2e81612b5f565b612d3781612b69565b60608301526020830135612d4a8161012c565b16608082015260c06060612d75612d646040860186612c6d565b608060a087015260e0860191612cbd565b930135612d8181612269565b151591015290565b93929360808501612d9d6109558288612b2c565b612da681612b69565b80612dc7575050602092612dbb9286926138b0565b925b01358210610a0757565b80612dd86003929895969498612b69565b03612e185750612def82612e1392602095306138b0565b8095612e0a82612e0160408701612378565b6106c987612378565b610aad84612378565b612dbd565b90610ade610ade612e3a85612e40946060820198612e358a612378565b6138b0565b95612378565b612e56612e4f60408501612378565b9284612b2c565b90803b1561014a57612e9c9460008094604051978895869485937f2bdb823c00000000000000000000000000000000000000000000000000000000855260048501612cfc565b03925af191821561037a57602092612eca575b50612e13612ebf6106ee83612378565b8095610aad84612378565b80610b8c612ed792610413565b38612eaf565b73ffffffffffffffffffffffffffffffffffffffff612efb82612378565b16612fbd57612f0d602082013561353d565b612f1f610ade610ade60608401612378565b612f2b610ade83612378565b612fb5576020820135905b612f3f83612378565b90612f4d6080850185612b2c565b93813b1561014a57600093602091612f97604051978896879586947f2bdb823c00000000000000000000000000000000000000000000000000000000865201359060048501612cfc565b03925af1801561037a57612fa85750565b80610b8c61015a92610413565b600090612f36565b612fe5612fcc610ade83612378565b612fd860608401612378565b602084013591339061351c565b612f0d565b73ffffffffffffffffffffffffffffffffffffffff168061300a57504790565b6020602491604051928380927f70a082310000000000000000000000000000000000000000000000000000000082523060048301525afa90811561037a57600091613053575090565b6105b5915060203d602011610373576103638183610427565b82156131915773ffffffffffffffffffffffffffffffffffffffff16806131055750600080809381935af161309f6129fb565b50156130a757565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f6574682073656e64206661696c656400000000000000000000000000000000006044820152fd5b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff9092166024830152604482019290925261015a9161318c82606481015b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101845283610427565b613fed565b505050565b60008091602081519101305af4906131ac6129fb565b908215806131c4575b6131bb57565b50805190602001fd5b5060016131b5565b60008091602081519101305af4916131e26129fb565b91831590816131f3575b506131bb57565b905015386131ec565b9081606091031261014a5780516132128161012c565b91604060208301516132238161012c565b9201516105b58161012c565b919082604091031261014a576020825192015190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b9190820180921161328157565b613245565b9190820391821161328157565b81601f8201121561014a5780516132a98161241d565b926132b76040519485610427565b8184526020828401011161014a576105b59160208085019101610eeb565b9093916132e0612a2b565b9373ffffffffffffffffffffffffffffffffffffffff92838716916040908151907f2c8ce6bc000000000000000000000000000000000000000000000000000000008252606082600481885afa94851561037a57600080936000976134f4575b509a82613424575b5050506133be93929161336a866000938160209961340c575b50508a51613274565b818a0152519586809581947fbcb7ea5d0000000000000000000000000000000000000000000000000000000083526004830191909173ffffffffffffffffffffffffffffffffffffffff6020820193169052565b0393165af1801561037a576133e6916000916133ed575b508060608501526020840151613274565b6080830152565b613406915060203d602011610373576103638183610427565b386133d5565b61341d918b8916908c33911661351c565b3881613361565b9184929161343b826134a09699989794338461351c565b89600084518097819582947ff6b911bc0000000000000000000000000000000000000000000000000000000084528c168b6004850160409194939294606082019573ffffffffffffffffffffffffffffffffffffffff80921683521660208201520152565b03925af1801561037a576020966133be9660009461336a93869187916134d5575b508d52898d01529350968294959650613348565b90506134ee9150853d87116116d4576116c68183610427565b386134c1565b9196505061351291925060603d60601161170a576116f98183610427565b9590929138613340565b9291908261352b575b50505050565b61353493613d87565b38808080613525565b340361354557565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f657468206d69736d6174636800000000000000000000000000000000000000006044820152fd5b90919073ffffffffffffffffffffffffffffffffffffffff16806135cc57509050340361354557565b816135d657505050565b61015a923091613d87565b73ffffffffffffffffffffffffffffffffffffffff9190821680613646575016803b1561014a576000906004604051809481937fd0e30db00000000000000000000000000000000000000000000000000000000083525af1801561037a57612fa85750565b915050803b1561014a576040517f2e1a7d4d00000000000000000000000000000000000000000000000000000000815260048101929092526000908290602490829084905af1801561037a57612fa85750565b60849060406020949501356136ad8161012c565b73ffffffffffffffffffffffffffffffffffffffff8094818316978815600014613746576136ef81945b6136e08161012c565b6136ea8482613def565b61012c565b60405198899788967f20e8c5650000000000000000000000000000000000000000000000000000000088521660048701526024860152604485015260006064850152165af190811561037a57600091613053575090565b6136ef6000946136d7565b602093604060849394960135906137678261012c565b73ffffffffffffffffffffffffffffffffffffffff9485918284169889156000146137fa576137a581955b61379b8161012c565b6136ea8582613def565b604051998a9889977f20e8c565000000000000000000000000000000000000000000000000000000008952166004880152602487015260448601526064850152165af190811561037a57600091613053575090565b6137a5600095613792565b60a49060006040936020959673ffffffffffffffffffffffffffffffffffffffff958691828416938a8061389e575b505001356138418161012c565b60405198899788967f769f8e5d0000000000000000000000000000000000000000000000000000000088521660048701526024860152166044840152816064840152600160848401525af190811561037a57600091613053575090565b6138a9913387613d87565b388a613834565b60a49060006020949560409473ffffffffffffffffffffffffffffffffffffffff8096819301356138e08161012c565b604051998a9889977f769f8e5d000000000000000000000000000000000000000000000000000000008952166004880152602487015216604485015282606485015260016084850152165af190811561037a57600091613053575090565b908082101561394b575090565b905090565b9061395a90614161565b610ade57503090565b6105b5939273ffffffffffffffffffffffffffffffffffffffff60609316825260208201528160408201520190610f0e565b959391600096600096846001916139b26139ae82614161565b1590565b613b85575b50506139c5575b5050505050565b73ffffffffffffffffffffffffffffffffffffffff979496919293959780931660409788517f70a082310000000000000000000000000000000000000000000000000000000091828252602097888380613a3f896004830191909173ffffffffffffffffffffffffffffffffffffffff6020820193169052565b0381885afa97881561037a578c93600099613b66575b5080613a618489614a5a565b9385519d8e95869485937f5b709f1700000000000000000000000000000000000000000000000000000000855216916004840192613a9e93613963565b0392165a90600091f197881561037a57613af6988795613ac692600092613b45575b50613274565b985180988194829383526004830191909173ffffffffffffffffffffffffffffffffffffffff6020820193169052565b03915afa801561037a57613b1d94613b1793600092613b28575b5050613286565b90613274565b9138808080806139be565b613b3e9250803d10610373576103638183610427565b3880613b10565b613b5d9192508c8d3d106116d4576116c68183610427565b90509038613ac0565b613b7e9199508a3d8c11610373576103638183610427565b9738613a55565b929950975050613bb091935073ffffffffffffffffffffffffffffffffffffffff85169687896147b0565b9492989197859198998096156139b75781613bca9261306c565b38806139b7565b90613bdb90614161565b6105b557503090565b604051600081526020810181811067ffffffffffffffff82111761040e5760405290565b90939160009460009473ffffffffffffffffffffffffffffffffffffffff9182811693604051927f2c8ce6bc000000000000000000000000000000000000000000000000000000008452606084600481895afa93841561037a57600094613d63575b508194600194613c7c6139ae84614161565b613d28575b5050505050613c8f57505050565b91604091613cda949596936000613ca4613be4565b938551978895869485937f29910b1100000000000000000000000000000000000000000000000000000000855260048501613963565b03925af1801561037a576105b592600090600092613d04575b50613cfe9192613274565b93613274565b613cfe9250613d22915060403d6040116116d4576116c68183610427565b91613cf3565b9299509299509250613d3e9350169586856147b0565b9197909690839083613d52575b8080613c81565b613d5b9261306c565b388080613d4b565b613d7d91945060603d60601161170a576116f98183610427565b5090509238613c6a565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff9283166024820152929091166044830152606482019290925261015a9161318c8260848101613160565b919073ffffffffffffffffffffffffffffffffffffffff8316928315612372576040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff831660248201526020948590829060449082905afa801561037a576b7fffffffffffffffffffffff91600091613fd0575b5010613e8d5750509050565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000085820190815273ffffffffffffffffffffffffffffffffffffffff8416602483015260006044830181905291829190613f1581606481015b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610427565b519082855af1613f236129fb565b81613fa0575b5015613f4257613f3a929350614a97565b803880612372565b606484604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152600c60248201527f5361666520417070726f766500000000000000000000000000000000000000006044820152fd5b80518015925086908315613fb8575b50505038613f29565b613fc89350820181019101612273565b388581613faf565b613fe79150863d8811610373576103638183610427565b38613e81565b6040516140589173ffffffffffffffffffffffffffffffffffffffff16614013826103f2565b6000806020958685527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656487860152868151910182855af16140526129fb565b91614bdf565b8051908282159283156140f5575b505050156140715750565b608490604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152fd5b6141059350820181019101612273565b388281614066565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561014a570180359067ffffffffffffffff821161014a57602001918160051b3603831361014a57565b61416e604082018261410d565b905015908161417b575090565b61418a9150606081019061410d565b90501590565b9060808282031261014a57815192602083015192604081015192606082015167ffffffffffffffff811161014a576105b59201613293565b906141d282612b69565b52565b9594929093919360a0948060a0890160a08a525260c09560c089019260c08360051b8b01019781946000925b85841061427e5750505050505050918594939161423d6142709460206105b599019073ffffffffffffffffffffffffffffffffffffffff169052565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60408701528583036060870152612cbd565b916080818403910152610f0e565b909192939495997fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff408d82030183528a357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa18336030181121561014a57820160609080357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe818236030181121561014a578101928281528335838201526020938493608091858101358385015260409283928d8484013590870152820161434290612c62565b8b860161434e916141c8565b81016143599061014f565b9060e09182860161437e9173ffffffffffffffffffffffffffffffffffffffff169052565b614389818e0161014f565b610100908187016143ae9173ffffffffffffffffffffffffffffffffffffffff169052565b6143b9828d0161014f565b92610120938488016143df9173ffffffffffffffffffffffffffffffffffffffff169052565b82016143ea9061014f565b6101409081880161440f9173ffffffffffffffffffffffffffffffffffffffff169052565b610160918301358288015261018093830135848801528201356101a0870152810161443991612c6d565b90916101c08601526101e085019061445092612cbd565b61445c85870186612c6d565b8583038887015261446d9291612cbd565b9301359101529b0196959460010193920190614201565b959391979694929060a0988060a0890160a08a525260c09960c089019260c08360051b8b01019b81946000925b8584106144ff57505050505050509161427093916144ed6105b5989994602089019073ffffffffffffffffffffffffffffffffffffffff169052565b60408701528583036060870152612cbd565b9091929394959d8e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff408e8303018452357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa18336030181121561014a57820160609080357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe818236030181121561014a578101928281528335838201526020938493608091858101358385015260409283928d848401359087015282016145c390612c62565b8b86016145cf916141c8565b81016145da9061014f565b9060e0918286016145ff9173ffffffffffffffffffffffffffffffffffffffff169052565b61460a818e0161014f565b6101009081870161462f9173ffffffffffffffffffffffffffffffffffffffff169052565b61463a828d0161014f565b92610120938488016146609173ffffffffffffffffffffffffffffffffffffffff169052565b820161466b9061014f565b610140908188016146909173ffffffffffffffffffffffffffffffffffffffff169052565b610160918301358288015261018093830135848801528201356101a087015281016146ba91612c6d565b90916101c08601526101e08501906146d192612cbd565b6146dd85870186612c6d565b858303888701526146ee9291612cbd565b9301359101529f01969594600101939201906144b1565b9015612264578035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa18136030182121561014a570190565b9035907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe818136030182121561014a570190565b60808101959490936060939261478681612b69565b855273ffffffffffffffffffffffffffffffffffffffff8093166020860152604085015216910152565b91939093600093600080946147c7610ade84612378565b908498604085016147d8818761410d565b905061496d575b505060608401906147f0828661410d565b905061480f575b5050505090602061480a92013590614bc1565b841190565b89989395949799926148998773ffffffffffffffffffffffffffffffffffffffff8b6148e1876148ab9761486160a061485b61485561484f8a9e8961410d565b90614705565b8061473e565b01612378565b98899261316061488c614885606061487f61485561484f878d61410d565b01612ba2565b928861410d565b9a909760808101906123c2565b94909e60405196879460208601614771565b6040519a8b998a9889967f6122b173000000000000000000000000000000000000000000000000000000008852600488016141d5565b0393165af1801561037a578460209361492e9361480a97928094614938575b505061492261491b848780614928969751830101910161322f565b9092613274565b99613286565b98613274565b94919238806147f7565b61491b9450614928935061492291614961913d8091833e6149598183610427565b810190614190565b96925090509350614900565b84995084939a5082985091869273ffffffffffffffffffffffffffffffffffffffff928361499a89612378565b9116906149a691613def565b6149b0908761410d565b909a906149c060808901896123c2565b6149cb9d919d613be4565b906040519e8f98899788967f6122b1730000000000000000000000000000000000000000000000000000000088526004880196614a0797614484565b03928c165af196871561037a578182978399614a33575b50614a2a909785613286565b979538806147df565b9050614a2a9850614a4f9197503d8084833e6149598183610427565b509890979190614a1e565b9190604051608081019080821067ffffffffffffffff83111761040e57606091604052818152602081019482368737600182965260408201520152565b6040517f095ea7b3000000000000000000000000000000000000000000000000000000006020820190815273ffffffffffffffffffffffffffffffffffffffff90931660248201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60448201526000928392918390614b1a8160648101613ee9565b51925af1614b266129fb565b81614b92575b5015614b3457565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f5361666520417070726f766500000000000000000000000000000000000000006044820152fd5b8051801592508215614ba7575b505038614b2c565b614bba9250602080918301019101612273565b3880614b9f565b81810291818304149015171561328157670de0b6b3a7640000900490565b91929015614c5a5750815115614bf3575090565b3b15614bfc5790565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152fd5b825190915015614c6d5750805190602001fd5b610347906040519182917f08c379a0000000000000000000000000000000000000000000000000000000008352602060048401526024830190610f0e56fea264697066735822122084bea1e7b3e796d73f2d2a9d6b7d93e96ffb5b6cfb30d9057079da2726ca877364736f6c63430008170033";
2126
2136
 
2127
2137
  type ActionMiscV3ConstructorParams =
2128
2138
  | [signer?: Signer]