@allbridge/bridge-core-sdk 3.26.0-alpha.3 → 3.26.0-alpha.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.
- package/dist/browser/index.js +2 -2
- package/dist/browser/index.js.map +3 -3
- package/dist/cjs/index.js +2 -2
- package/dist/cjs/index.js.map +3 -3
- package/dist/esm/index.js +2 -2
- package/dist/esm/index.js.map +3 -3
- package/dist/src/services/bridge/alg/index.js +3 -3
- package/dist/src/services/bridge/alg/index.js.map +1 -1
- package/dist/src/services/liquidity-pool/alg/index.js +4 -0
- package/dist/src/services/liquidity-pool/alg/index.js.map +1 -1
- package/dist/src/services/utils/alg/index.d.ts +5 -2
- package/dist/src/services/utils/alg/index.js +27 -2
- package/dist/src/services/utils/alg/index.js.map +1 -1
- package/dist/src/utils/alg/index.d.ts +1 -1
- package/dist/src/utils/alg/index.js +4 -13
- package/dist/src/utils/alg/index.js.map +1 -1
- package/dist/src/version.d.ts +1 -1
- package/dist/src/version.js +1 -1
- package/dist/src/version.js.map +1 -1
- package/package.json +1 -1
package/dist/cjs/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
"use strict";var Gc=Object.create;var qi=Object.defineProperty;var Fc=Object.getOwnPropertyDescriptor;var Nc=Object.getOwnPropertyNames;var Tc=Object.getPrototypeOf,Zc=Object.prototype.hasOwnProperty;var Rn=(a,n)=>()=>(a&&(n=a(a=0)),n);var yo=(a,n)=>()=>(n||a((n={exports:{}}).exports,n),n.exports),wc=(a,n)=>{for(var i in n)qi(a,i,{get:n[i],enumerable:!0})},es=(a,n,i,o)=>{if(n&&typeof n=="object"||typeof n=="function")for(let r of Nc(n))!Zc.call(a,r)&&r!==i&&qi(a,r,{get:()=>n[r],enumerable:!(o=Fc(n,r))||o.enumerable});return a};var ge=(a,n,i)=>(i=a!=null?Gc(Tc(a)):{},es(n||!a||!a.__esModule?qi(i,"default",{value:a,enumerable:!0}):i,a)),Sc=a=>es(qi({},"__esModule",{value:!0}),a);function Ba(a){try{return(0,Ra.fromBase58)(a).length===iA}catch{return!1}}function xe(a){return oA(a)&&rA(a)===Gi}function jn(a){return xe(a)}function aA(a){return a.includes("::")?Lo(a):a}function Lo(a){let[n,i]=a.split("::"),o=a.slice(n.length+i.length+4),r=o.includes("<")?o.slice(0,o.indexOf("<")):o,s=o.includes("<")?(0,Ra.splitGenericParameters)(o.slice(o.indexOf("<")+1,o.lastIndexOf(">"))).map(d=>aA(d.trim())):[];return{address:j(n),module:i,name:r,typeParams:s}}function Fi(a){let{address:n,module:i,name:o,typeParams:r}=typeof a=="string"?Lo(a):a,s=r?.length>0?`<${r.map(d=>typeof d=="string"?d:Fi(d)).join(",")}>`:"";return`${n}::${i}::${o}${s}`}function j(a,n=!1){let i=a.toLowerCase();return!n&&i.startsWith("0x")&&(i=i.slice(2)),`0x${i.padStart(Gi*2,"0")}`}function Ve(a,n=!1){return j(a,n)}function oA(a){return/^(0x|0X)?[a-fA-F0-9]+$/.test(a)&&a.length%2===0}function rA(a){return/^(0x|0X)/.test(a)?(a.length-2)/2:a.length/2}var Ra,iA,Gi,Xe=Rn(()=>{Ra=require("@mysten/bcs"),iA=32;Gi=32});var Ds,sA,dA,Xt,Ho=Rn(()=>{Ds=require("@mysten/bcs");Xe();sA=/^vector<(.+)>$/,dA=/^([^:]+)::([^:]+)::([^<]+)(<(.+)>)?/,Xt=class a{static parseFromStr(n,i=!1){if(n==="address")return{address:null};if(n==="bool")return{bool:null};if(n==="u8")return{u8:null};if(n==="u16")return{u16:null};if(n==="u32")return{u32:null};if(n==="u64")return{u64:null};if(n==="u128")return{u128:null};if(n==="u256")return{u256:null};if(n==="signer")return{signer:null};let o=n.match(sA);if(o)return{vector:a.parseFromStr(o[1],i)};let r=n.match(dA);if(r)return{struct:{address:i?j(r[1]):r[1],module:r[2],name:r[3],typeParams:r[5]===void 0?[]:a.parseStructTypeArgs(r[5],i)}};throw new Error(`Encountered unexpected token when parsing type args for ${n}`)}static parseStructTypeArgs(n,i=!1){return(0,Ds.splitGenericParameters)(n).map(o=>a.parseFromStr(o,i))}static tagToString(n){if("bool"in n)return"bool";if("u8"in n)return"u8";if("u16"in n)return"u16";if("u32"in n)return"u32";if("u64"in n)return"u64";if("u128"in n)return"u128";if("u256"in n)return"u256";if("address"in n)return"address";if("signer"in n)return"signer";if("vector"in n)return`vector<${a.tagToString(n.vector)}>`;if("struct"in n){let i=n.struct,o=i.typeParams.map(a.tagToString).join(", ");return`${i.address}::${i.module}::${i.name}${o?`<${o}>`:""}`}throw new Error("Invalid TypeTag")}}});function cA(a){return C.bcs.u64({name:"unsafe_u64",...a}).transform({input:n=>n,output:n=>Number(n)})}function AA(a){return C.bcs.enum("Option",{None:null,Some:a})}function ar(a){return C.bcs.struct(`IntentMessage<${a.name}>`,{intent:ir,value:a})}var C,ae,Oe,Me,Jo,ko,zo,xo,Ya,rt,Oo,Qo,Ko,Uo,Do,Eo,_o,$o,qo,er,tr,nr,ir,or,rr,sr,dr,Es,gA,cr,_s,$s,Ar=Rn(()=>{C=require("@mysten/bcs");Xe();Ho();ae=C.bcs.bytes(Gi).transform({validate:a=>{let n=typeof a=="string"?a:(0,C.toHex)(a);if(!n||!xe(j(n)))throw new Error(`Invalid Sui address ${n}`)},input:a=>typeof a=="string"?(0,C.fromHex)(j(a)):a,output:a=>j((0,C.toHex)(a))}),Oe=C.bcs.vector(C.bcs.u8()).transform({name:"ObjectDigest",input:a=>(0,C.fromBase58)(a),output:a=>(0,C.toBase58)(new Uint8Array(a)),validate:a=>{if((0,C.fromBase58)(a).length!==32)throw new Error("ObjectDigest must be 32 bytes")}}),Me=C.bcs.struct("SuiObjectRef",{objectId:ae,version:C.bcs.u64(),digest:Oe}),Jo=C.bcs.struct("SharedObjectRef",{objectId:ae,initialSharedVersion:C.bcs.u64(),mutable:C.bcs.bool()}),ko=C.bcs.enum("ObjectArg",{ImmOrOwnedObject:Me,SharedObject:Jo,Receiving:Me}),zo=C.bcs.enum("CallArg",{Pure:C.bcs.struct("Pure",{bytes:C.bcs.vector(C.bcs.u8()).transform({input:a=>typeof a=="string"?(0,C.fromBase64)(a):a,output:a=>(0,C.toBase64)(new Uint8Array(a))})}),Object:ko}),xo=C.bcs.enum("TypeTag",{bool:null,u8:null,u64:null,u128:null,address:null,signer:null,vector:C.bcs.lazy(()=>xo),struct:C.bcs.lazy(()=>Eo),u16:null,u32:null,u256:null}),Ya=xo.transform({input:a=>typeof a=="string"?Xt.parseFromStr(a,!0):a,output:a=>Xt.tagToString(a)}),rt=C.bcs.enum("Argument",{GasCoin:null,Input:C.bcs.u16(),Result:C.bcs.u16(),NestedResult:C.bcs.tuple([C.bcs.u16(),C.bcs.u16()])}),Oo=C.bcs.struct("ProgrammableMoveCall",{package:ae,module:C.bcs.string(),function:C.bcs.string(),typeArguments:C.bcs.vector(Ya),arguments:C.bcs.vector(rt)}),Qo=C.bcs.enum("Command",{MoveCall:Oo,TransferObjects:C.bcs.struct("TransferObjects",{objects:C.bcs.vector(rt),address:rt}),SplitCoins:C.bcs.struct("SplitCoins",{coin:rt,amounts:C.bcs.vector(rt)}),MergeCoins:C.bcs.struct("MergeCoins",{destination:rt,sources:C.bcs.vector(rt)}),Publish:C.bcs.struct("Publish",{modules:C.bcs.vector(C.bcs.vector(C.bcs.u8()).transform({input:a=>typeof a=="string"?(0,C.fromBase64)(a):a,output:a=>(0,C.toBase64)(new Uint8Array(a))})),dependencies:C.bcs.vector(ae)}),MakeMoveVec:C.bcs.struct("MakeMoveVec",{type:AA(Ya).transform({input:a=>a===null?{None:!0}:{Some:a},output:a=>a.Some??null}),elements:C.bcs.vector(rt)}),Upgrade:C.bcs.struct("Upgrade",{modules:C.bcs.vector(C.bcs.vector(C.bcs.u8()).transform({input:a=>typeof a=="string"?(0,C.fromBase64)(a):a,output:a=>(0,C.toBase64)(new Uint8Array(a))})),dependencies:C.bcs.vector(ae),package:ae,ticket:rt})}),Ko=C.bcs.struct("ProgrammableTransaction",{inputs:C.bcs.vector(zo),commands:C.bcs.vector(Qo)}),Uo=C.bcs.enum("TransactionKind",{ProgrammableTransaction:Ko,ChangeEpoch:null,Genesis:null,ConsensusCommitPrologue:null}),Do=C.bcs.enum("TransactionExpiration",{None:null,Epoch:cA()}),Eo=C.bcs.struct("StructTag",{address:ae,module:C.bcs.string(),name:C.bcs.string(),typeParams:C.bcs.vector(xo)}),_o=C.bcs.struct("GasData",{payment:C.bcs.vector(Me),owner:ae,price:C.bcs.u64(),budget:C.bcs.u64()}),$o=C.bcs.struct("TransactionDataV1",{kind:Uo,sender:ae,gasData:_o,expiration:Do}),qo=C.bcs.enum("TransactionData",{V1:$o}),er=C.bcs.enum("IntentScope",{TransactionData:null,TransactionEffects:null,CheckpointSummary:null,PersonalMessage:null}),tr=C.bcs.enum("IntentVersion",{V0:null}),nr=C.bcs.enum("AppId",{Sui:null}),ir=C.bcs.struct("Intent",{scope:er,version:tr,appId:nr});or=C.bcs.enum("CompressedSignature",{ED25519:C.bcs.fixedArray(64,C.bcs.u8()),Secp256k1:C.bcs.fixedArray(64,C.bcs.u8()),Secp256r1:C.bcs.fixedArray(64,C.bcs.u8()),ZkLogin:C.bcs.vector(C.bcs.u8())}),rr=C.bcs.enum("PublicKey",{ED25519:C.bcs.fixedArray(32,C.bcs.u8()),Secp256k1:C.bcs.fixedArray(33,C.bcs.u8()),Secp256r1:C.bcs.fixedArray(33,C.bcs.u8()),ZkLogin:C.bcs.vector(C.bcs.u8())}),sr=C.bcs.struct("MultiSigPkMap",{pubKey:rr,weight:C.bcs.u8()}),dr=C.bcs.struct("MultiSigPublicKey",{pk_map:C.bcs.vector(sr),threshold:C.bcs.u16()}),Es=C.bcs.struct("MultiSig",{sigs:C.bcs.vector(or),bitmap:C.bcs.u16(),multisig_pk:dr}),gA=C.bcs.vector(C.bcs.u8()).transform({input:a=>typeof a=="string"?(0,C.fromBase64)(a):a,output:a=>(0,C.toBase64)(new Uint8Array(a))}),cr=C.bcs.struct("SenderSignedTransaction",{intentMessage:ar(qo),txSignatures:C.bcs.vector(gA)}),_s=C.bcs.vector(cr,{name:"SenderSignedData"}),$s=C.bcs.struct("PasskeyAuthenticator",{authenticatorData:C.bcs.vector(C.bcs.u8()),clientDataJson:C.bcs.string(),userSignature:C.bcs.vector(C.bcs.u8())})});var b,lA,uA,qs,mA,pA,CA,ed,td,Pn,bA,gr,IA,yA,hA,vA,RA,BA,nd,id=Rn(()=>{b=require("@mysten/bcs");Ar();lA=b.bcs.enum("PackageUpgradeError",{UnableToFetchPackage:b.bcs.struct("UnableToFetchPackage",{packageId:ae}),NotAPackage:b.bcs.struct("NotAPackage",{objectId:ae}),IncompatibleUpgrade:null,DigestDoesNotMatch:b.bcs.struct("DigestDoesNotMatch",{digest:b.bcs.vector(b.bcs.u8())}),UnknownUpgradePolicy:b.bcs.struct("UnknownUpgradePolicy",{policy:b.bcs.u8()}),PackageIDDoesNotMatch:b.bcs.struct("PackageIDDoesNotMatch",{packageId:ae,ticketId:ae})}),uA=b.bcs.struct("ModuleId",{address:ae,name:b.bcs.string()}),qs=b.bcs.struct("MoveLocation",{module:uA,function:b.bcs.u16(),instruction:b.bcs.u16(),functionName:b.bcs.option(b.bcs.string())}),mA=b.bcs.enum("CommandArgumentError",{TypeMismatch:null,InvalidBCSBytes:null,InvalidUsageOfPureArg:null,InvalidArgumentToPrivateEntryFunction:null,IndexOutOfBounds:b.bcs.struct("IndexOutOfBounds",{idx:b.bcs.u16()}),SecondaryIndexOutOfBounds:b.bcs.struct("SecondaryIndexOutOfBounds",{resultIdx:b.bcs.u16(),secondaryIdx:b.bcs.u16()}),InvalidResultArity:b.bcs.struct("InvalidResultArity",{resultIdx:b.bcs.u16()}),InvalidGasCoinUsage:null,InvalidValueUsage:null,InvalidObjectByValue:null,InvalidObjectByMutRef:null,SharedObjectOperationNotAllowed:null}),pA=b.bcs.enum("TypeArgumentError",{TypeNotFound:null,ConstraintNotSatisfied:null}),CA=b.bcs.enum("ExecutionFailureStatus",{InsufficientGas:null,InvalidGasObject:null,InvariantViolation:null,FeatureNotYetSupported:null,MoveObjectTooBig:b.bcs.struct("MoveObjectTooBig",{objectSize:b.bcs.u64(),maxObjectSize:b.bcs.u64()}),MovePackageTooBig:b.bcs.struct("MovePackageTooBig",{objectSize:b.bcs.u64(),maxObjectSize:b.bcs.u64()}),CircularObjectOwnership:b.bcs.struct("CircularObjectOwnership",{object:ae}),InsufficientCoinBalance:null,CoinBalanceOverflow:null,PublishErrorNonZeroAddress:null,SuiMoveVerificationError:null,MovePrimitiveRuntimeError:b.bcs.option(qs),MoveAbort:b.bcs.tuple([qs,b.bcs.u64()]),VMVerificationOrDeserializationError:null,VMInvariantViolation:null,FunctionNotFound:null,ArityMismatch:null,TypeArityMismatch:null,NonEntryFunctionInvoked:null,CommandArgumentError:b.bcs.struct("CommandArgumentError",{argIdx:b.bcs.u16(),kind:mA}),TypeArgumentError:b.bcs.struct("TypeArgumentError",{argumentIdx:b.bcs.u16(),kind:pA}),UnusedValueWithoutDrop:b.bcs.struct("UnusedValueWithoutDrop",{resultIdx:b.bcs.u16(),secondaryIdx:b.bcs.u16()}),InvalidPublicFunctionReturnType:b.bcs.struct("InvalidPublicFunctionReturnType",{idx:b.bcs.u16()}),InvalidTransferObject:null,EffectsTooLarge:b.bcs.struct("EffectsTooLarge",{currentSize:b.bcs.u64(),maxSize:b.bcs.u64()}),PublishUpgradeMissingDependency:null,PublishUpgradeDependencyDowngrade:null,PackageUpgradeError:b.bcs.struct("PackageUpgradeError",{upgradeError:lA}),WrittenObjectsTooLarge:b.bcs.struct("WrittenObjectsTooLarge",{currentSize:b.bcs.u64(),maxSize:b.bcs.u64()}),CertificateDenied:null,SuiMoveVerificationTimedout:null,SharedObjectOperationNotAllowed:null,InputObjectDeleted:null,ExecutionCancelledDueToSharedObjectCongestion:b.bcs.struct("ExecutionCancelledDueToSharedObjectCongestion",{congestedObjects:b.bcs.vector(ae)}),AddressDeniedForCoin:b.bcs.struct("AddressDeniedForCoin",{address:ae,coinType:b.bcs.string()}),CoinTypeGlobalPause:b.bcs.struct("CoinTypeGlobalPause",{coinType:b.bcs.string()}),ExecutionCancelledDueToRandomnessUnavailable:null}),ed=b.bcs.enum("ExecutionStatus",{Success:null,Failed:b.bcs.struct("ExecutionFailed",{error:CA,command:b.bcs.option(b.bcs.u64())})}),td=b.bcs.struct("GasCostSummary",{computationCost:b.bcs.u64(),storageCost:b.bcs.u64(),storageRebate:b.bcs.u64(),nonRefundableStorageFee:b.bcs.u64()}),Pn=b.bcs.enum("Owner",{AddressOwner:ae,ObjectOwner:ae,Shared:b.bcs.struct("Shared",{initialSharedVersion:b.bcs.u64()}),Immutable:null}),bA=b.bcs.struct("TransactionEffectsV1",{status:ed,executedEpoch:b.bcs.u64(),gasUsed:td,modifiedAtVersions:b.bcs.vector(b.bcs.tuple([ae,b.bcs.u64()])),sharedObjects:b.bcs.vector(Me),transactionDigest:Oe,created:b.bcs.vector(b.bcs.tuple([Me,Pn])),mutated:b.bcs.vector(b.bcs.tuple([Me,Pn])),unwrapped:b.bcs.vector(b.bcs.tuple([Me,Pn])),deleted:b.bcs.vector(Me),unwrappedThenDeleted:b.bcs.vector(Me),wrapped:b.bcs.vector(Me),gasObject:b.bcs.tuple([Me,Pn]),eventsDigest:b.bcs.option(Oe),dependencies:b.bcs.vector(Oe)}),gr=b.bcs.tuple([b.bcs.u64(),Oe]),IA=b.bcs.enum("ObjectIn",{NotExist:null,Exist:b.bcs.tuple([gr,Pn])}),yA=b.bcs.enum("ObjectOut",{NotExist:null,ObjectWrite:b.bcs.tuple([Oe,Pn]),PackageWrite:gr}),hA=b.bcs.enum("IDOperation",{None:null,Created:null,Deleted:null}),vA=b.bcs.struct("EffectsObjectChange",{inputState:IA,outputState:yA,idOperation:hA}),RA=b.bcs.enum("UnchangedSharedKind",{ReadOnlyRoot:gr,MutateDeleted:b.bcs.u64(),ReadDeleted:b.bcs.u64(),Cancelled:b.bcs.u64(),PerEpochConfig:null}),BA=b.bcs.struct("TransactionEffectsV2",{status:ed,executedEpoch:b.bcs.u64(),gasUsed:td,transactionDigest:Oe,gasObjectIndex:b.bcs.option(b.bcs.u32()),eventsDigest:b.bcs.option(Oe),dependencies:b.bcs.vector(Oe),lamportVersion:b.bcs.u64(),changedObjects:b.bcs.vector(b.bcs.tuple([ae,vA])),unchangedSharedObjects:b.bcs.vector(b.bcs.tuple([ae,RA])),auxDataDigest:b.bcs.option(Oe)}),nd=b.bcs.enum("TransactionEffects",{V1:bA,V2:BA})});var st,YA,y,Ie=Rn(()=>{st=require("@mysten/bcs");Ar();id();Ho();YA=require("@mysten/bcs"),y={...st.bcs,U8:st.bcs.u8(),U16:st.bcs.u16(),U32:st.bcs.u32(),U64:st.bcs.u64(),U128:st.bcs.u128(),U256:st.bcs.u256(),ULEB128:st.bcs.uleb128(),Bool:st.bcs.bool(),String:st.bcs.string(),Address:ae,AppId:nr,Argument:rt,CallArg:zo,CompressedSignature:or,GasData:_o,Intent:ir,IntentMessage:ar,IntentScope:er,IntentVersion:tr,MultiSig:Es,MultiSigPkMap:sr,MultiSigPublicKey:dr,ObjectArg:ko,ObjectDigest:Oe,ProgrammableMoveCall:Oo,ProgrammableTransaction:Ko,PublicKey:rr,SenderSignedData:_s,SenderSignedTransaction:cr,SharedObjectRef:Jo,StructTag:Eo,SuiObjectRef:Me,Command:Qo,TransactionData:qo,TransactionDataV1:$o,TransactionExpiration:Do,TransactionKind:Uo,TypeTag:Ya,TransactionEffects:nd,PasskeyAuthenticator:$s}});function Ng(a,n=["<",">"]){let[i,o]=n,r=[],s="",d=0;for(let c=0;c<a.length;c++){let A=a[c];if(A===i&&d++,A===o&&d--,d===0&&A===","){r.push(s.trim()),s="";continue}s+=A}return r.push(s.trim()),r}function We(a){if(typeof a!="string")throw new Error(`Illegal type passed as a name of the type: ${a}`);let[n,i]=["<",">"],o=a.indexOf(n),r=Array.from(a).reverse().indexOf(i);if(o===-1&&r===-1)return{typeName:a,typeArgs:[]};if(o===-1||r===-1)throw new Error(`Unclosed generic in name '${a}'`);let s=a.slice(0,o),d=Ng(a.slice(o+1,a.length-r-1),[n,i]);return{typeName:s,typeArgs:d}}function Nd(a){return!a||typeof a!="object"||Array.isArray(a)?!1:"GasCoin"in a||"Input"in a||"Result"in a||"NestedResult"in a}function X(a,n){return Nd(n)?n:a.object(n)}function $e(a,n,i){if(Nd(n))return X(a,n);function o(g){let{typeName:l,typeArgs:m}=We(g);switch(l){case"bool":return y.Bool;case"u8":return y.U8;case"u16":return y.U16;case"u32":return y.U32;case"u64":return y.U64;case"u128":return y.U128;case"u256":return y.U256;case"address":return y.Address;case"0x1::string::String":case"0x1::ascii::String":return y.String;case"0x2::object::ID":return y.Address;case"0x1::option::Option":return y.option(o(m[0]));case"vector":return y.vector(o(m[0]));default:throw new Error(`invalid primitive type ${g}`)}}function r(g){for(let l of g){if(typeof l>"u"||l===null)return!0;if(Array.isArray(l))return r(l)}return!1}function s(g){for(let l of g){if(!Array.isArray(l)){if(l===null)continue;switch(typeof l){case"string":case"number":case"bigint":case"boolean":continue;default:return!1}}return s(l)}return!0}function d(g){for(let l of g){if(!Array.isArray(l))switch(typeof l){case"string":case"number":case"bigint":case"boolean":return!0;default:continue}return d(l)}return!1}let{typeName:c,typeArgs:A}=We(i);switch(c){case"0x1::option::Option":if(n===null)return a.pure.option("bool",null);if(s([n]))return a.pure(o(i).serialize(n));if(d([n]))throw new Error("mixing primitive and TransactionArgument values is not supported");return a.moveCall({target:"0x1::option::some",typeArguments:[A[0]],arguments:[$e(a,n,A[0])]});case"vector":if(!Array.isArray(n))throw new Error("expected an array for vector type");if(n.length===0)return a.pure(y.vector(y.Bool).serialize([]));if(r(n))throw new Error("the provided array contains undefined or null values");if(s(n))return a.pure(o(i).serialize(n));if(d(n))throw new Error("mixing primitive and TransactionArgument values is not supported");return a.makeMoveVec({type:A[0],elements:n});default:return a.pure(o(i).serialize(n))}}function Tg(a){let n=a.split("0x").join("");for(let i=0;i<n.length;i++)if(n[i]!=="0")return`0x${n.substring(i)}`;return"0x0"}function w(a){let{typeName:n,typeArgs:i}=We(a);switch(n){case"bool":case"u8":case"u16":case"u32":case"u64":case"u128":case"u256":case"address":case"signer":return n;case"vector":return`vector<${w(i[0])}>`;default:{let o=n.split("::");o[0]=Tg(o[0]);let r=o.join("::");return i.length>0?`${r}<${i.map(s=>w(s)).join(",")}>`:r}}}function D(a,...n){return n.length>0?`${a}<${n.join(", ")}>`:a}var ye=Rn(()=>{"use strict";Ie()});var qt=yo((ib,Td)=>{"use strict";ye();var Fr=class a{static $PACKAGE_ID="";static $PUBLISHED_AT="";static $PKG_V=[];get PACKAGE_ID(){return w(a.$PACKAGE_ID)}get PUBLISHED_AT(){return w(a.$PUBLISHED_AT)}get PKG_V1(){return w(a.$PKG_V[1])}setPackageId(n){a.$PACKAGE_ID=n}setPublishedAt(n){a.$PUBLISHED_AT=n}setPkgV(n,i){a.$PKG_V[n]=i}setAddress(n,i){a.$PACKAGE_ID=n,a.$PUBLISHED_AT=n,a.$PKG_V[1]=i||n}},Zg=new Fr;Td.exports=Zg});var wr=yo((sb,jd)=>{"use strict";ye();var Zr=class a{static $PACKAGE_ID="";static $PUBLISHED_AT="";static $PKG_V=[];get PACKAGE_ID(){return w(a.$PACKAGE_ID)}get PUBLISHED_AT(){return w(a.$PUBLISHED_AT)}get PKG_V1(){return w(a.$PKG_V[1])}setPackageId(n){a.$PACKAGE_ID=n}setPublishedAt(n){a.$PUBLISHED_AT=n}setPkgV(n,i){a.$PKG_V[n]=i}setAddress(n,i){a.$PACKAGE_ID=n,a.$PUBLISHED_AT=n,a.$PKG_V[1]=i||n}},wg=new Zr;jd.exports=wg});var Xr=yo((gb,Ld)=>{"use strict";ye();var Vr=class a{static $PACKAGE_ID="";static $PUBLISHED_AT="";static $PKG_V=[];get PACKAGE_ID(){return w(a.$PACKAGE_ID)}get PUBLISHED_AT(){return w(a.$PUBLISHED_AT)}get PKG_V1(){return w(a.$PKG_V[1])}setPackageId(n){a.$PACKAGE_ID=n}setPublishedAt(n){a.$PUBLISHED_AT=n}setPkgV(n,i){a.$PKG_V[n]=i}setAddress(n,i){a.$PACKAGE_ID=n,a.$PUBLISHED_AT=n,a.$PKG_V[1]=i||n}},Sg=new Vr;Ld.exports=Sg});var gl={};wc(gl,{AddressStatus:()=>ea,AllbridgeCoreSdk:()=>qr,AmountFormat:()=>pi,AmountNotEnoughError:()=>tn,ArgumentInvalidDecimalsError:()=>si,CCTPDoesNotSupportedError:()=>he,ChainSymbol:()=>we,ChainType:()=>$,ErrorCode:()=>ts,ExtraGasMaxLimitExceededError:()=>ri,FeePaymentMethod:()=>St,InsufficientPoolLiquidityError:()=>vt,InvalidAmountError:()=>ht,InvalidGasFeePaymentOptionError:()=>Bn,InvalidMessengerOptionError:()=>oi,InvalidTxError:()=>nn,JupiterError:()=>Ce,Messenger:()=>He,MethodNotSupportedError:()=>_,NodeRpcUrlNotInitializedError:()=>di,OFTDoesNotSupportedError:()=>ve,SdkError:()=>B,SdkRootError:()=>re,SolanaAutoTxFee:()=>ga,TimeoutError:()=>Wn,TxTooLargeError:()=>Ai,VerifyTxError:()=>Yn,YieldDoesNotSupportedError:()=>ci,assertYieldIsSupported:()=>dc,isYieldSupported:()=>Qi,mainnet:()=>ai,nodeRpcUrlsDefault:()=>Xc,nodeUrlsDefault:()=>Vc});module.exports=Sc(gl);var ai={coreApiUrl:"https://core.api.allbridgecoreapi.net",coreApiQueryParams:{},coreApiHeaders:{},jupiterUrl:"https://lite-api.jup.ag/swap/v1",wormholeMessengerProgramId:"worm2ZoG2kUd4vFXhvjh93UUH596ayRfgQ2MgjNMTth",solanaLookUpTable:"2JcBAEVnAwVo4u8d61iqgHPrzZuugur7cVTjWubsVLHj",sorobanNetworkPassphrase:"Public Global Stellar Network ; September 2015",tronJsonRpc:"https://api.trongrid.io/jsonrpc",cctpParams:{cctpTransmitterProgramId:"CCTPmbSD7gX1bxKPAmg77w8oFzNFpaQiQUWD43TKaecd",cctpTokenMessengerMinter:"CCTPiPYPc6AsJuwueEnWgSgucamXDZwBd53dQ11YiKX3",cctpDomains:{ETH:0,AVA:1,OPT:2,ARB:3,SOL:5,BAS:6,POL:7,SUI:8}},cachePoolInfoChainSec:20},Vc={solanaRpcUrl:"https://api.mainnet-beta.solana.com",tronRpcUrl:"https://api.trongrid.io"},Xc={SOL:"https://api.mainnet-beta.solana.com",TRX:"https://api.trongrid.io",SRB:"https://rpc.stellar.org:443",STLR:"https://horizon.stellar.org",SUI:"https://fullnode.mainnet.sui.io"};var Pr=require("@algorandfoundation/algokit-utils"),Kd=require("tronweb"),Ud=require("web3");var re=class extends Error{errorCode;constructor(n,i){super(i),this.errorCode=n}},B=class extends re{constructor(n){super("SdkError",n)}},ht=class extends re{constructor(n){super("InvalidAmountError",n)}},tn=class extends re{constructor(n){super("AmountNotEnoughError",n)}},vt=class extends re{constructor(n){super("InsufficientPoolLiquidityError",n)}},Ce=class extends re{constructor(n){super("JupiterError",n)}},Bn=class extends re{constructor(n){super("InvalidGasFeePaymentOptionError",n)}},oi=class extends re{constructor(n){super("InvalidMessengerOptionError",n)}},_=class extends re{constructor(n){super("MethodNotSupportedError",n)}},Yn=class extends re{constructor(n){super("VerifyTxError",n)}},nn=class extends re{constructor(n){super("InvalidTxError",n)}},ri=class extends re{constructor(n){super("ExtraGasMaxLimitExceededError",n)}},si=class extends re{constructor(n,i,o){super("ArgumentInvalidDecimalsError",`Argument '${n}' decimals '${i}' cannot be greater than '${o}'`)}},Wn=class extends re{constructor(n){super("TimeoutError",n)}},di=class extends re{constructor(n){super("NodeRpcUrlNotInitializedError",`For chain '${n}' Node RPC URL not initialized`)}},he=class extends re{constructor(n){super("CCTPDoesNotSupportedError",n)}},ve=class extends re{constructor(n){super("OFTDoesNotSupportedError",n)}},ci=class extends re{constructor(n){super("YieldDoesNotSupportedError",n)}},Ai=class extends re{constructor(){super("TxTooLargeError","Transaction too large: try again later or switch to another messenger or pay relayer fee in native gas currency")}},ts=(G=>(G.SDK_ERROR="SdkError",G.INVALID_AMOUNT_ERROR="InvalidAmountError",G.AMOUNT_NOT_ENOUGH_ERROR="AmountNotEnoughError",G.INSUFFICIENT_POOL_LIQUIDITY_ERROR="InsufficientPoolLiquidityError",G.JUPITER_ERROR="JupiterError",G.INVALID_GAS_FEE_PAYMENT_OPTION_ERROR="InvalidGasFeePaymentOptionError",G.INVALID_MESSENGER_OPTION_ERROR="InvalidMessengerOptionError",G.METHOD_NOT_SUPPORTED_ERROR="MethodNotSupportedError",G.VERIFY_TX_ERROR="VerifyTxError",G.INVALID_TX_ERROR="InvalidTxError",G.EXTRA_GAS_MAX_LIMIT_EXCEEDED_ERROR="ExtraGasMaxLimitExceededError",G.ARGUMENT_INVALID_DECIMALS_ERROR="ArgumentInvalidDecimalsError",G.TIMEOUT_ERROR="TimeoutError",G.NODE_RPC_URL_NOT_INITIALIZED_ERROR="NodeRpcUrlNotInitializedError",G.CCTP_DOES_NOT_SUPPORTED_ERROR="CCTPDoesNotSupportedError",G.OFT_DOES_NOT_SUPPORTED_ERROR="OFTDoesNotSupportedError",G.YIELD_DOES_NOT_SUPPORTED_ERROR="YieldDoesNotSupportedError",G.TX_TOO_LARGE="TxTooLargeError",G))(ts||{});var we=(f=>(f.BSC="BSC",f.ETH="ETH",f.BAS="BAS",f.SOL="SOL",f.TRX="TRX",f.POL="POL",f.ARB="ARB",f.CEL="CEL",f.AVA="AVA",f.SRB="SRB",f.STLR="STLR",f.OPT="OPT",f.SUI="SUI",f.SNC="SNC",f.UNI="UNI",f.ALG="ALG",f))(we||{}),$=(d=>(d.EVM="EVM",d.SOLANA="SOLANA",d.TRX="TRX",d.SRB="SRB",d.SUI="SUI",d.ALG="ALG",d))($||{});var Mc={EVM:18,SOLANA:9,TRX:6,SRB:7,SUI:9,ALG:6},jc={BSC:{chainSymbol:"BSC",chainId:"0x38",name:"BNB Chain",chainType:"EVM"},ETH:{chainSymbol:"ETH",chainId:"0x1",name:"Ethereum",chainType:"EVM"},BAS:{chainSymbol:"BAS",chainId:"0x2105",name:"Base",chainType:"EVM"},ARB:{chainSymbol:"ARB",chainId:"0xa4b1",name:"Arbitrum",chainType:"EVM"},AVA:{chainSymbol:"AVA",chainId:"0xa86a",name:"Avalanche",chainType:"EVM"},CEL:{chainSymbol:"CEL",chainId:"0xa4ec",name:"Celo",chainType:"EVM"},POL:{chainSymbol:"POL",chainId:"0x89",name:"Polygon",chainType:"EVM"},OPT:{chainSymbol:"OPT",chainId:"0xa",name:"OP Mainnet",chainType:"EVM"},SNC:{chainSymbol:"SNC",chainId:"0x92",name:"Sonic",chainType:"EVM"},UNI:{chainSymbol:"UNI",chainId:"0x82",name:"Unichain",chainType:"EVM"},SOL:{chainSymbol:"SOL",name:"Solana",chainType:"SOLANA"},TRX:{chainSymbol:"TRX",name:"Tron",chainType:"TRX"},SRB:{chainSymbol:"SRB",name:"Stellar",chainType:"SRB"},STLR:{chainSymbol:"STLR",name:"Stellar",chainType:"SRB"},SUI:{chainSymbol:"SUI",name:"Sui",chainType:"SUI"},ALG:{chainSymbol:"ALG",name:"Algorand",chainType:"ALG"}},L=(()=>{let a={...jc};return{addChainsProperties(n){a={...a,...n}},getChainProperty(n){let i=a[n];if(!i)throw new B(`Cannot find chain properties for ${n}`);return i},getChainsProperties(){return a},getChainDecimalsByType(n){return Mc[n]}}})();var ea=(d=>(d.OK="OK",d.INVALID="INVALID",d.FORBIDDEN="FORBIDDEN",d.UNINITIALIZED="UNINITIALIZED",d.CONTRACT_ADDRESS="CONTRACT_ADDRESS",d.WRONG_ASSOCIATED_ACCOUNT_OWNER="WRONG_ASSOCIATED_ACCOUNT_OWNER",d))(ea||{});var He=(s=>(s[s.ALLBRIDGE=1]="ALLBRIDGE",s[s.WORMHOLE=2]="WORMHOLE",s[s.CCTP=3]="CCTP",s[s.CCTP_V2=4]="CCTP_V2",s[s.OFT=5]="OFT",s))(He||{});var ho=require("big.js");async function me(a,n){return await a.getPoolInfoByKey({chainSymbol:n.chainSymbol,poolAddress:n.poolAddress})}function H(a){if((0,ho.Big)(a).lte(0))throw new ht("Amount must be greater than zero")}function z(a,n,i){let o=(0,ho.Big)(n).toFixed(),[r,s]=o.split(".");if(s&&s.length>i)throw new si(a,s.length,i)}async function ta(a,n,i){return await Promise.race([a,new Promise((o,r)=>{setTimeout(()=>r(new Wn(n)),i)})])}async function vo(a,n,i,o){if(i<1)throw new Error(`Bad argument: 'maxRetries' must be greater than 0, but ${i} was received.`);let r=0;for(;;)try{return await ta(a(),n,o)}catch{if(++r>=i)throw new Wn(n)}}async function ns(a,n,i,o=1.5,r=!1){let s=[],d=0,c=await a();if(s.push(c),!n(c))return s;let A=new Date(Date.now()+i*1e3).valueOf(),g=1e3,l=g;for(;Date.now()<A;){let m=s[s.length-1];if(m===void 0||!n(m))break;d++,r&&console.info(`Waiting ${g}ms before trying again (bringing the total wait time to ${l}ms so far, of total ${i*1e3}ms)`),await new Promise(h=>setTimeout(h,g)),g=g*o,new Date(Date.now()+g).valueOf()>A&&(g=A-Date.now(),r&&console.info(`was gonna wait too long; new waitTime: ${g}ms`)),l=g+l;let I=await a(m);s.push(I),r&&n(I)&&console.info(`${d}. Called ${a.name}; ${s.length} prev attempts. Most recent: ${JSON.stringify(s[s.length-1],null,2)}`)}return s}var Cs=require("@algorandfoundation/algokit-utils/types/amount"),Fn=ge(require("algosdk"));var is=require("@algorandfoundation/algokit-utils/types/app-arc56"),gi=require("@algorandfoundation/algokit-utils/types/app-client"),Pc=require("@algorandfoundation/algokit-utils/types/app-factory"),na={name:"Bridge",structs:{},methods:[{name:"createApplication",args:[{type:"address",name:"owner"},{type:"byte",name:"chainId"},{type:"application",name:"messenger"},{type:"application",name:"gasOracle"}],returns:{type:"void"},actions:{create:["NoOp"],call:[]},readonly:!1,events:[],recommendations:{}},{name:"optInAsset",args:[{type:"uint64",name:"assetId"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"noop",args:[],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"swapAndBridge",args:[{type:"uint64",name:"tokenId"},{type:"byte[32]",name:"recipient"},{type:"byte",name:"destinationChainId"},{type:"byte[32]",name:"receiveToken"},{type:"byte[32]",name:"nonce"},{type:"uint64",name:"feeTokenAmount",defaultValue:{source:"literal",data:"AAAAAAAAAAA=",type:"uint64"}}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[{name:"BridgingFeeFromTokens",args:[{type:"uint64",name:"fee"}]},{name:"ReceiveFee",args:[{type:"uint64",name:"bridgeTransactionCost"},{type:"uint64",name:"messageTransactionCost"}]},{name:"TokensSent",args:[{type:"uint64",name:"amount"},{type:"byte[32]",name:"recipient"},{type:"byte",name:"destinationChainId"},{type:"byte[32]",name:"receiveToken"},{type:"byte[32]",name:"nonce"},{type:"byte",name:"messenger"}]}],recommendations:{}},{name:"receiveTokens",args:[{type:"uint64",name:"amount"},{type:"byte[32]",name:"recipient"},{type:"byte",name:"sourceChainId"},{type:"byte[32]",name:"receiveToken"},{type:"byte[32]",name:"nonce"},{type:"uint64",name:"receiveAmountMin"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[{name:"TokensReceived",args:[{type:"uint64",name:"receiveAmount"},{type:"address",name:"recipient"},{type:"byte[32]",name:"nonce"},{type:"byte",name:"messenger"},{type:"byte[32]",name:"message"}]}],recommendations:{}},{name:"registerBridge",args:[{type:"byte",name:"chainId"},{type:"byte[32]",name:"bridgeAddress"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"addBridgeToken",args:[{type:"byte",name:"chainId"},{type:"byte[32]",name:"tokenAddress"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"removeBridgeToken",args:[{type:"byte",name:"chainId"},{type:"byte[32]",name:"tokenAddress"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"withdrawGasTokens",args:[{type:"uint64",name:"amount"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"withdrawBridgingFeeInTokens",args:[{type:"uint64",name:"assetId"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"getBridgingCostInTokens",args:[{type:"byte",name:"destinationChainId"},{type:"uint64",name:"tokenId"}],returns:{type:"uint64"},actions:{create:[],call:["NoOp"]},readonly:!0,events:[],recommendations:{}},{name:"hashMessage",args:[{type:"uint64",name:"amount"},{type:"byte[32]",name:"recipient"},{type:"byte",name:"sourceChainId"},{type:"byte",name:"destinationChainId"},{type:"byte[32]",name:"receiveToken"},{type:"byte[32]",name:"nonce"}],returns:{type:"byte[32]"},actions:{create:[],call:["NoOp"]},readonly:!0,events:[],recommendations:{}},{name:"isOtherBridgeTokenSupported",args:[{type:"byte",name:"chainId"},{type:"byte[32]",name:"token"}],returns:{type:"bool"},actions:{create:[],call:["NoOp"]},readonly:!0,events:[],recommendations:{}},{name:"getTransactionCost",args:[{type:"byte",name:"chainId"}],returns:{type:"uint64"},actions:{create:[],call:["NoOp"]},readonly:!0,events:[],recommendations:{}},{name:"getReceiveTokensCost",args:[],returns:{type:"uint64"},actions:{create:[],call:["NoOp"]},readonly:!0,events:[],recommendations:{}},{name:"getSendTransactionStorageCost",args:[],returns:{type:"uint64"},actions:{create:[],call:["NoOp"]},readonly:!0,events:[],recommendations:{}},{name:"swap",args:[{type:"uint64",name:"tokenId",desc:"The token to be swapped."},{type:"uint64",name:"receiveTokenId",desc:"The token to receive in exchange for the swapped token."},{type:"address",name:"recipient",desc:"The address to receive the tokens."},{type:"uint64",name:"receiveAmountMin",desc:"The minimum amount of tokens required to receive during the swap."}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[{name:"Swapped",args:[{type:"address",name:"sender"},{type:"address",name:"recipient"},{type:"uint64",name:"tokenId"},{type:"uint64",name:"receiveTokenId"},{type:"uint64",name:"amount"},{type:"uint64",name:"receivedAmount"}]}],recommendations:{}},{name:"addPool",args:[{type:"uint64",name:"poolId",desc:"The address of the `Pool` contract."},{type:"uint64",name:"tokenId",desc:"The address of the token in the liquidity pool."}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"removePool",args:[{type:"uint64",name:"tokenId"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"stopSwap",args:[],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"startSwap",args:[],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"setStopAuthority",args:[{type:"address",name:"stopAuthority"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"setRebalancer",args:[{type:"address",name:"rebalancer"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"getGasUsage",args:[{type:"byte",name:"chainId"}],returns:{type:"uint64"},actions:{create:[],call:["NoOp"]},readonly:!0,events:[],recommendations:{}},{name:"setGasUsage",args:[{type:"byte",name:"chainId"},{type:"uint64",name:"gasAmount"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"setGasOracle",args:[{type:"application",name:"gasOracle"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"getTransactionRelayerCost",args:[{type:"byte",name:"chainId"}],returns:{type:"uint64"},actions:{create:[],call:["NoOp"]},readonly:!0,events:[],recommendations:{}},{name:"transferOwnership",args:[{type:"address",name:"newOwner"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}}],arcs:[22,28],networks:{},state:{schema:{global:{ints:3,bytes:4},local:{ints:0,bytes:0}},keys:{global:{chainId:{keyType:"AVMString",valueType:"byte",key:"Y2hhaW5JZA=="},messenger:{keyType:"AVMString",valueType:"AVMUint64",key:"bWVzc2VuZ2Vy"},stopAuthority:{keyType:"AVMString",valueType:"address",key:"c3RvcEF1dGhvcml0eQ=="},rebalancer:{keyType:"AVMString",valueType:"address",key:"cmViYWxhbmNlcg=="},canSwap:{keyType:"AVMString",valueType:"AVMUint64",key:"Y2FuU3dhcA=="},gasOracle:{keyType:"AVMString",valueType:"AVMUint64",key:"Z2FzT3JhY2xl"},owner:{keyType:"AVMString",valueType:"address",key:"b3duZXI="}},local:{},box:{}},maps:{global:{},local:{},box:{processedMessages:{keyType:"byte[32]",valueType:"byte[0]",prefix:"bQ=="},sentMessages:{keyType:"byte[32]",valueType:"byte[0]",prefix:"cw=="},otherBridges:{keyType:"byte",valueType:"byte[32]",prefix:"Yg=="},otherBridgeTokens:{keyType:"AVMBytes",valueType:"byte[0]",prefix:"dA=="},pools:{keyType:"uint64",valueType:"uint64",prefix:"cA=="},fromGasOracleScalingFactor:{keyType:"uint64",valueType:"uint64",prefix:"ZQ=="},bridgingFeeConversionScalingFactor:{keyType:"uint64",valueType:"uint64",prefix:"Zg=="},gasUsage:{keyType:"byte",valueType:"uint64",prefix:"Zw=="}}}},bareActions:{create:[],call:[]},sourceInfo:{approval:{sourceInfo:[{pc:[906],errorMessage:"Asset must go to app"},{pc:[889],errorMessage:"Asset txn missing"},{pc:[1366,1844,2135,2221,2315,2357],errorMessage:"Box must have value"},{pc:[1122],errorMessage:"Bridge: amount too low for fee"},{pc:[1130],errorMessage:"Bridge: bridge to the zero address"},{pc:[1504],errorMessage:"Bridge: message processed"},{pc:[1547],errorMessage:"Bridge: no message"},{pc:[1327,1455],errorMessage:"Bridge: not enough fee"},{pc:[1446],errorMessage:"Bridge: source not registered"},{pc:[1217],errorMessage:"Bridge: tokens already sent"},{pc:[1180],errorMessage:"Bridge: unknown chain or token"},{pc:[1167],errorMessage:"Bridge: wrong destination chain"},{pc:[1258,1412,1544,1783,1830,2199,2300,2401],errorMessage:"Bytes has valid prefix"},{pc:[927],errorMessage:"CloseTo not allowed"},{pc:[1223],errorMessage:"Index access is out of bounds"},{pc:[341,356,376,394,413,433,448,463,475,487,503,523,550,562,574,594,622,657,681,697,713,731,749,767,799,831,840,856],errorMessage:"OnCompletion is not NoOp"},{pc:[2411],errorMessage:"Only owner"},{pc:[920],errorMessage:"Rekey not allowed"},{pc:[2080],errorMessage:"Router: is not stopAuthority"},{pc:[2216],errorMessage:"Router: no pool"},{pc:[2130],errorMessage:"Router: no receive pool"},{pc:[1112,1436,1933],errorMessage:"Router: swap prohibited"},{pc:[913],errorMessage:"Wrong asset"},{pc:[1710],errorMessage:"account opted into asset"},{pc:[1266,2226],errorMessage:"application exists"},{pc:[2021],errorMessage:"asset exists"},{pc:[860],errorMessage:"can only call when creating"},{pc:[344,359,379,397,416,436,451,466,478,490,506,526,553,565,577,597,625,660,684,700,716,734,752,770,802,834,843],errorMessage:"can only call when not creating"},{pc:[1111,1163,1185,1230,1263,1270,1375,1380,1435,1460,1512,1678,1718,1753,1790,1932,2078,2147,2252,2363,2409],errorMessage:"check GlobalState exists"},{pc:[1896],errorMessage:"invalid size"},{pc:[899],errorMessage:"transaction type is axfer"},{pc:[975],errorMessage:"transaction type is pay"}],pcOffsetMethod:"none"},clear:{sourceInfo:[],pcOffsetMethod:"none"}},source:{approval:"I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxIDYgNCAxNTcwMAogICAgYnl0ZWNibG9jayAweDE1MWY3Yzc1ICJjYW5Td2FwIiAibWVzc2VuZ2VyIiAib3duZXIiICJnYXNPcmFjbGUiICJjaGFpbklkIiAicmViYWxhbmNlciIgInQiICJwIiAweDAwICJzdG9wQXV0aG9yaXR5IiAweDAxICJnIiAweDQzNDE3YWEzIDB4Zjc0NzViODIgMHgxNTFmN2M3NTAwMDAwMDAwMDAwMDNkNTQKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6NDkKICAgIC8vIHByaXZhdGUgcmViYWxhbmNlciA9IEdsb2JhbFN0YXRlPEFkZHJlc3M+KHsgaW5pdGlhbFZhbHVlOiBuZXcgQWRkcmVzcyhiemVybygwKSkgfSk7Ly8gY2FuIHJlc3RyaWN0IGRlcG9zaXQgb3Igd2l0aGRyYXcgb3BlcmF0aW9ucwogICAgaW50Y18wIC8vIDAKICAgIGJ6ZXJvCiAgICBieXRlYyA2IC8vICJyZWJhbGFuY2VyIgogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6NTAKICAgIC8vIGNhblN3YXAgPSBHbG9iYWxTdGF0ZTxib29sZWFuPih7IGluaXRpYWxWYWx1ZTogdHJ1ZSB9KTsKICAgIGJ5dGVjXzEgLy8gImNhblN3YXAiCiAgICBpbnRjXzEgLy8gMQogICAgYXBwX2dsb2JhbF9wdXQKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo1NAogICAgLy8gZXhwb3J0IGNsYXNzIEJyaWRnZSBleHRlbmRzIFJvdXRlciBpbXBsZW1lbnRzIENvbnZlbnRpb25hbFJvdXRpbmcsIElCcmlkZ2UgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fYWZ0ZXJfaWZfZWxzZUAzNgogICAgcHVzaGJ5dGVzcyAweGZmZjgyODQxIDB4NjVmNzA1NzMgMHhlODNhODdhYiAweDJjOWY2ODQ3IDB4MzE5MTliMjggMHg0ZWJhMDcyMSAweGM2MTdlZDczIDB4NTc1MzE1NjAgMHg2MzgwODI3OCAweDA2NTA3YzZhIDB4ZjVmOTZlYjMgMHg0YjA2MmNhMCAweGMzY2RkOTJhIC8vIG1ldGhvZCAiY3JlYXRlQXBwbGljYXRpb24oYWRkcmVzcyxieXRlLGFwcGxpY2F0aW9uLGFwcGxpY2F0aW9uKXZvaWQiLCBtZXRob2QgIm9wdEluQXNzZXQodWludDY0KXZvaWQiLCBtZXRob2QgIm5vb3AoKXZvaWQiLCBtZXRob2QgInN3YXBBbmRCcmlkZ2UodWludDY0LGJ5dGVbMzJdLGJ5dGUsYnl0ZVszMl0sYnl0ZVszMl0sdWludDY0KXZvaWQiLCBtZXRob2QgInJlY2VpdmVUb2tlbnModWludDY0LGJ5dGVbMzJdLGJ5dGUsYnl0ZVszMl0sYnl0ZVszMl0sdWludDY0KXZvaWQiLCBtZXRob2QgInJlZ2lzdGVyQnJpZGdlKGJ5dGUsYnl0ZVszMl0pdm9pZCIsIG1ldGhvZCAiYWRkQnJpZGdlVG9rZW4oYnl0ZSxieXRlWzMyXSl2b2lkIiwgbWV0aG9kICJyZW1vdmVCcmlkZ2VUb2tlbihieXRlLGJ5dGVbMzJdKXZvaWQiLCBtZXRob2QgIndpdGhkcmF3R2FzVG9rZW5zKHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJ3aXRoZHJhd0JyaWRnaW5nRmVlSW5Ub2tlbnModWludDY0KXZvaWQiLCBtZXRob2QgImdldEJyaWRnaW5nQ29zdEluVG9rZW5zKGJ5dGUsdWludDY0KXVpbnQ2NCIsIG1ldGhvZCAiaGFzaE1lc3NhZ2UodWludDY0LGJ5dGVbMzJdLGJ5dGUsYnl0ZSxieXRlWzMyXSxieXRlWzMyXSlieXRlWzMyXSIsIG1ldGhvZCAiaXNPdGhlckJyaWRnZVRva2VuU3VwcG9ydGVkKGJ5dGUsYnl0ZVszMl0pYm9vbCIKICAgIGJ5dGVjIDEzIC8vIG1ldGhvZCAiZ2V0VHJhbnNhY3Rpb25Db3N0KGJ5dGUpdWludDY0IgogICAgcHVzaGJ5dGVzcyAweDA3ZGY4NDI5IDB4ODBjNWM3MGYgMHhmYWIxMTFhMiAweGVmMTVmODU1IDB4NmIxZWUyMjMgMHgxODcwYTQ5MiAweDM1NTczMjRkIDB4MDRiMTYxZjEgMHhkMmIzNTdlYiAvLyBtZXRob2QgImdldFJlY2VpdmVUb2tlbnNDb3N0KCl1aW50NjQiLCBtZXRob2QgImdldFNlbmRUcmFuc2FjdGlvblN0b3JhZ2VDb3N0KCl1aW50NjQiLCBtZXRob2QgInN3YXAodWludDY0LHVpbnQ2NCxhZGRyZXNzLHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJhZGRQb29sKHVpbnQ2NCx1aW50NjQpdm9pZCIsIG1ldGhvZCAicmVtb3ZlUG9vbCh1aW50NjQpdm9pZCIsIG1ldGhvZCAic3RvcFN3YXAoKXZvaWQiLCBtZXRob2QgInN0YXJ0U3dhcCgpdm9pZCIsIG1ldGhvZCAic2V0U3RvcEF1dGhvcml0eShhZGRyZXNzKXZvaWQiLCBtZXRob2QgInNldFJlYmFsYW5jZXIoYWRkcmVzcyl2b2lkIgogICAgYnl0ZWMgMTQgLy8gbWV0aG9kICJnZXRHYXNVc2FnZShieXRlKXVpbnQ2NCIKICAgIHB1c2hieXRlc3MgMHgwY2E1YWU3YSAweDM5N2I5MThiIDB4Y2JmYzZkMDIgMHhlMTdiYWZiNCAvLyBtZXRob2QgInNldEdhc1VzYWdlKGJ5dGUsdWludDY0KXZvaWQiLCBtZXRob2QgInNldEdhc09yYWNsZShhcHBsaWNhdGlvbil2b2lkIiwgbWV0aG9kICJnZXRUcmFuc2FjdGlvblJlbGF5ZXJDb3N0KGJ5dGUpdWludDY0IiwgbWV0aG9kICJ0cmFuc2Zlck93bmVyc2hpcChhZGRyZXNzKXZvaWQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBtYWluX2NyZWF0ZUFwcGxpY2F0aW9uX3JvdXRlQDUgbWFpbl9vcHRJbkFzc2V0X3JvdXRlQDYgbWFpbl9ub29wX3JvdXRlQDcgbWFpbl9zd2FwQW5kQnJpZGdlX3JvdXRlQDggbWFpbl9yZWNlaXZlVG9rZW5zX3JvdXRlQDkgbWFpbl9yZWdpc3RlckJyaWRnZV9yb3V0ZUAxMCBtYWluX2FkZEJyaWRnZVRva2VuX3JvdXRlQDExIG1haW5fcmVtb3ZlQnJpZGdlVG9rZW5fcm91dGVAMTIgbWFpbl93aXRoZHJhd0dhc1Rva2Vuc19yb3V0ZUAxMyBtYWluX3dpdGhkcmF3QnJpZGdpbmdGZWVJblRva2Vuc19yb3V0ZUAxNCBtYWluX2dldEJyaWRnaW5nQ29zdEluVG9rZW5zX3JvdXRlQDE1IG1haW5faGFzaE1lc3NhZ2Vfcm91dGVAMTYgbWFpbl9pc090aGVyQnJpZGdlVG9rZW5TdXBwb3J0ZWRfcm91dGVAMTcgbWFpbl9nZXRUcmFuc2FjdGlvbkNvc3Rfcm91dGVAMTggbWFpbl9nZXRSZWNlaXZlVG9rZW5zQ29zdF9yb3V0ZUAxOSBtYWluX2dldFNlbmRUcmFuc2FjdGlvblN0b3JhZ2VDb3N0X3JvdXRlQDIwIG1haW5fc3dhcF9yb3V0ZUAyMSBtYWluX2FkZFBvb2xfcm91dGVAMjIgbWFpbl9yZW1vdmVQb29sX3JvdXRlQDIzIG1haW5fc3RvcFN3YXBfcm91dGVAMjQgbWFpbl9zdGFydFN3YXBfcm91dGVAMjUgbWFpbl9zZXRTdG9wQXV0aG9yaXR5X3JvdXRlQDI2IG1haW5fc2V0UmViYWxhbmNlcl9yb3V0ZUAyNyBtYWluX2dldEdhc1VzYWdlX3JvdXRlQDI4IG1haW5fc2V0R2FzVXNhZ2Vfcm91dGVAMjkgbWFpbl9zZXRHYXNPcmFjbGVfcm91dGVAMzAgbWFpbl9nZXRUcmFuc2FjdGlvblJlbGF5ZXJDb3N0X3JvdXRlQDMxIG1haW5fdHJhbnNmZXJPd25lcnNoaXBfcm91dGVAMzIKCm1haW5fYWZ0ZXJfaWZfZWxzZUAzNjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NTQKICAgIC8vIGV4cG9ydCBjbGFzcyBCcmlkZ2UgZXh0ZW5kcyBSb3V0ZXIgaW1wbGVtZW50cyBDb252ZW50aW9uYWxSb3V0aW5nLCBJQnJpZGdlIHsKICAgIGludGNfMCAvLyAwCiAgICByZXR1cm4KCm1haW5fdHJhbnNmZXJPd25lcnNoaXBfcm91dGVAMzI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czoxNgogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NTQKICAgIC8vIGV4cG9ydCBjbGFzcyBCcmlkZ2UgZXh0ZW5kcyBSb3V0ZXIgaW1wbGVtZW50cyBDb252ZW50aW9uYWxSb3V0aW5nLCBJQnJpZGdlIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjE2CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdHJhbnNmZXJPd25lcnNoaXAKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0VHJhbnNhY3Rpb25SZWxheWVyQ29zdF9yb3V0ZUAzMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MzQKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjU0CiAgICAvLyBleHBvcnQgY2xhc3MgQnJpZGdlIGV4dGVuZHMgUm91dGVyIGltcGxlbWVudHMgQ29udmVudGlvbmFsUm91dGluZywgSUJyaWRnZSB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjM0CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIGNhbGxzdWIgZ2V0VHJhbnNhY3Rpb25SZWxheWVyQ29zdAogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9zZXRHYXNPcmFjbGVfcm91dGVAMzA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjI4CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo1NAogICAgLy8gZXhwb3J0IGNsYXNzIEJyaWRnZSBleHRlbmRzIFJvdXRlciBpbXBsZW1lbnRzIENvbnZlbnRpb25hbFJvdXRpbmcsIElCcmlkZ2UgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXBwbGljYXRpb25zCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjI4CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgc2V0R2FzT3JhY2xlCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX3NldEdhc1VzYWdlX3JvdXRlQDI5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czoyMgogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NTQKICAgIC8vIGV4cG9ydCBjbGFzcyBCcmlkZ2UgZXh0ZW5kcyBSb3V0ZXIgaW1wbGVtZW50cyBDb252ZW50aW9uYWxSb3V0aW5nLCBJQnJpZGdlIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MjIKICAgIC8vIEBhYmltZXRob2QoKQogICAgY2FsbHN1YiBzZXRHYXNVc2FnZQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRHYXNVc2FnZV9yb3V0ZUAyODoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MTcKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjU0CiAgICAvLyBleHBvcnQgY2xhc3MgQnJpZGdlIGV4dGVuZHMgUm91dGVyIGltcGxlbWVudHMgQ29udmVudGlvbmFsUm91dGluZywgSUJyaWRnZSB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjE3CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIGNhbGxzdWIgZ2V0R2FzVXNhZ2UKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fc2V0UmViYWxhbmNlcl9yb3V0ZUAyNzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTQ2CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo1NAogICAgLy8gZXhwb3J0IGNsYXNzIEJyaWRnZSBleHRlbmRzIFJvdXRlciBpbXBsZW1lbnRzIENvbnZlbnRpb25hbFJvdXRpbmcsIElCcmlkZ2UgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNDYKICAgIC8vIEBhYmltZXRob2QoKQogICAgY2FsbHN1YiBzZXRSZWJhbGFuY2VyCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX3NldFN0b3BBdXRob3JpdHlfcm91dGVAMjY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjEzNwogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NTQKICAgIC8vIGV4cG9ydCBjbGFzcyBCcmlkZ2UgZXh0ZW5kcyBSb3V0ZXIgaW1wbGVtZW50cyBDb252ZW50aW9uYWxSb3V0aW5nLCBJQnJpZGdlIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTM3CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgc2V0U3RvcEF1dGhvcml0eQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9zdGFydFN3YXBfcm91dGVAMjU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjEyOAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgc3RhcnRTd2FwCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX3N0b3BTd2FwX3JvdXRlQDI0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxMTkKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIHN0b3BTd2FwCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX3JlbW92ZVBvb2xfcm91dGVAMjM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjExMAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NTQKICAgIC8vIGV4cG9ydCBjbGFzcyBCcmlkZ2UgZXh0ZW5kcyBSb3V0ZXIgaW1wbGVtZW50cyBDb252ZW50aW9uYWxSb3V0aW5nLCBJQnJpZGdlIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTEwCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgcmVtb3ZlUG9vbAogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9hZGRQb29sX3JvdXRlQDIyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxMDAKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjU0CiAgICAvLyBleHBvcnQgY2xhc3MgQnJpZGdlIGV4dGVuZHMgUm91dGVyIGltcGxlbWVudHMgQ29udmVudGlvbmFsUm91dGluZywgSUJyaWRnZSB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjEwMAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIGFkZFBvb2wKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fc3dhcF9yb3V0ZUAyMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6NzgKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjU0CiAgICAvLyBleHBvcnQgY2xhc3MgQnJpZGdlIGV4dGVuZHMgUm91dGVyIGltcGxlbWVudHMgQ29udmVudGlvbmFsUm91dGluZywgSUJyaWRnZSB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjc4CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgc3dhcAogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRTZW5kVHJhbnNhY3Rpb25TdG9yYWdlQ29zdF9yb3V0ZUAyMDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzIzCiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgYnl0ZWMgMTUgLy8gMHgxNTFmN2M3NTAwMDAwMDAwMDAwMDNkNTQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRSZWNlaXZlVG9rZW5zQ29zdF9yb3V0ZUAxOToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzE2CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgYnl0ZWMgMTUgLy8gMHgxNTFmN2M3NTAwMDAwMDAwMDAwMDNkNTQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRUcmFuc2FjdGlvbkNvc3Rfcm91dGVAMTg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMxMQogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NTQKICAgIC8vIGV4cG9ydCBjbGFzcyBCcmlkZ2UgZXh0ZW5kcyBSb3V0ZXIgaW1wbGVtZW50cyBDb252ZW50aW9uYWxSb3V0aW5nLCBJQnJpZGdlIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzExCiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIGNhbGxzdWIgZ2V0VHJhbnNhY3Rpb25Db3N0CiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2lzT3RoZXJCcmlkZ2VUb2tlblN1cHBvcnRlZF9yb3V0ZUAxNzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzA2CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo1NAogICAgLy8gZXhwb3J0IGNsYXNzIEJyaWRnZSBleHRlbmRzIFJvdXRlciBpbXBsZW1lbnRzIENvbnZlbnRpb25hbFJvdXRpbmcsIElCcmlkZ2UgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozMDYKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgY2FsbHN1YiBpc090aGVyQnJpZGdlVG9rZW5TdXBwb3J0ZWQKICAgIGJ5dGVjIDkgLy8gMHgwMAogICAgaW50Y18wIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2hhc2hNZXNzYWdlX3JvdXRlQDE2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyNzkKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjU0CiAgICAvLyBleHBvcnQgY2xhc3MgQnJpZGdlIGV4dGVuZHMgUm91dGVyIGltcGxlbWVudHMgQ29udmVudGlvbmFsUm91dGluZywgSUJyaWRnZSB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA0CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA1CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA2CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI3OQogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICBjYWxsc3ViIGhhc2hNZXNzYWdlCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2dldEJyaWRnaW5nQ29zdEluVG9rZW5zX3JvdXRlQDE1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyNjIKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjU0CiAgICAvLyBleHBvcnQgY2xhc3MgQnJpZGdlIGV4dGVuZHMgUm91dGVyIGltcGxlbWVudHMgQ29udmVudGlvbmFsUm91dGluZywgSUJyaWRnZSB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI2MgogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICBjYWxsc3ViIGdldEJyaWRnaW5nQ29zdEluVG9rZW5zCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX3dpdGhkcmF3QnJpZGdpbmdGZWVJblRva2Vuc19yb3V0ZUAxNDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjQ2CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo1NAogICAgLy8gZXhwb3J0IGNsYXNzIEJyaWRnZSBleHRlbmRzIFJvdXRlciBpbXBsZW1lbnRzIENvbnZlbnRpb25hbFJvdXRpbmcsIElCcmlkZ2UgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyNDYKICAgIC8vIEBhYmltZXRob2QoKQogICAgY2FsbHN1YiB3aXRoZHJhd0JyaWRnaW5nRmVlSW5Ub2tlbnMKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fd2l0aGRyYXdHYXNUb2tlbnNfcm91dGVAMTM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI0MAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NTQKICAgIC8vIGV4cG9ydCBjbGFzcyBCcmlkZ2UgZXh0ZW5kcyBSb3V0ZXIgaW1wbGVtZW50cyBDb252ZW50aW9uYWxSb3V0aW5nLCBJQnJpZGdlIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjQwCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgd2l0aGRyYXdHYXNUb2tlbnMKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fcmVtb3ZlQnJpZGdlVG9rZW5fcm91dGVAMTI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIzNAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NTQKICAgIC8vIGV4cG9ydCBjbGFzcyBCcmlkZ2UgZXh0ZW5kcyBSb3V0ZXIgaW1wbGVtZW50cyBDb252ZW50aW9uYWxSb3V0aW5nLCBJQnJpZGdlIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjM0CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgcmVtb3ZlQnJpZGdlVG9rZW4KICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fYWRkQnJpZGdlVG9rZW5fcm91dGVAMTE6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIyOAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NTQKICAgIC8vIGV4cG9ydCBjbGFzcyBCcmlkZ2UgZXh0ZW5kcyBSb3V0ZXIgaW1wbGVtZW50cyBDb252ZW50aW9uYWxSb3V0aW5nLCBJQnJpZGdlIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjI4CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgYWRkQnJpZGdlVG9rZW4KICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fcmVnaXN0ZXJCcmlkZ2Vfcm91dGVAMTA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIyMgogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NTQKICAgIC8vIGV4cG9ydCBjbGFzcyBCcmlkZ2UgZXh0ZW5kcyBSb3V0ZXIgaW1wbGVtZW50cyBDb252ZW50aW9uYWxSb3V0aW5nLCBJQnJpZGdlIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjIyCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgcmVnaXN0ZXJCcmlkZ2UKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fcmVjZWl2ZVRva2Vuc19yb3V0ZUA5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxNzQKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjU0CiAgICAvLyBleHBvcnQgY2xhc3MgQnJpZGdlIGV4dGVuZHMgUm91dGVyIGltcGxlbWVudHMgQ29udmVudGlvbmFsUm91dGluZywgSUJyaWRnZSB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA0CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA1CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA2CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjE3NAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHJlY2VpdmVUb2tlbnMKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fc3dhcEFuZEJyaWRnZV9yb3V0ZUA4OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo5My05NwogICAgLy8gQGFiaW1ldGhvZCh7CiAgICAvLyAgIGRlZmF1bHRBcmd1bWVudHM6IHsKICAgIC8vICAgICBmZWVUb2tlbkFtb3VudDogeyBjb25zdGFudDogMCB9LAogICAgLy8gICB9LAogICAgLy8gfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo1NAogICAgLy8gZXhwb3J0IGNsYXNzIEJyaWRnZSBleHRlbmRzIFJvdXRlciBpbXBsZW1lbnRzIENvbnZlbnRpb25hbFJvdXRpbmcsIElCcmlkZ2UgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNgogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo5My05NwogICAgLy8gQGFiaW1ldGhvZCh7CiAgICAvLyAgIGRlZmF1bHRBcmd1bWVudHM6IHsKICAgIC8vICAgICBmZWVUb2tlbkFtb3VudDogeyBjb25zdGFudDogMCB9LAogICAgLy8gICB9LAogICAgLy8gfSkKICAgIGNhbGxzdWIgc3dhcEFuZEJyaWRnZQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9ub29wX3JvdXRlQDc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjg5CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9vcHRJbkFzc2V0X3JvdXRlQDY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjc0CiAgICAvLyBvcHRJbkFzc2V0KGFzc2V0SWQ6IHVpbnQ2NCk6IHZvaWQgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjU0CiAgICAvLyBleHBvcnQgY2xhc3MgQnJpZGdlIGV4dGVuZHMgUm91dGVyIGltcGxlbWVudHMgQ29udmVudGlvbmFsUm91dGluZywgSUJyaWRnZSB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjc0CiAgICAvLyBvcHRJbkFzc2V0KGFzc2V0SWQ6IHVpbnQ2NCk6IHZvaWQgewogICAgY2FsbHN1YiBvcHRJbkFzc2V0CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2NyZWF0ZUFwcGxpY2F0aW9uX3JvdXRlQDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjY4CiAgICAvLyBjcmVhdGVBcHBsaWNhdGlvbihvd25lcjogQWRkcmVzcywgY2hhaW5JZDogQnl0ZSwgbWVzc2VuZ2VyOiBBcHBsaWNhdGlvbiwgZ2FzT3JhY2xlOiBBcHBsaWNhdGlvbik6IHZvaWQgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NTQKICAgIC8vIGV4cG9ydCBjbGFzcyBCcmlkZ2UgZXh0ZW5kcyBSb3V0ZXIgaW1wbGVtZW50cyBDb252ZW50aW9uYWxSb3V0aW5nLCBJQnJpZGdlIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGJ0b2kKICAgIHR4bmFzIEFwcGxpY2F0aW9ucwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNAogICAgYnRvaQogICAgdHhuYXMgQXBwbGljYXRpb25zCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjY4CiAgICAvLyBjcmVhdGVBcHBsaWNhdGlvbihvd25lcjogQWRkcmVzcywgY2hhaW5JZDogQnl0ZSwgbWVzc2VuZ2VyOiBBcHBsaWNhdGlvbiwgZ2FzT3JhY2xlOiBBcHBsaWNhdGlvbik6IHZvaWQgewogICAgY2FsbHN1YiBjcmVhdGVBcHBsaWNhdGlvbgogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czo6Z2V0UHJldkFzc2V0UGF5KGFzc2V0SWQ6IHVpbnQ2NCkgLT4gdWludDY0OgpnZXRQcmV2QXNzZXRQYXk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6MzQKICAgIC8vIGV4cG9ydCBmdW5jdGlvbiBnZXRQcmV2QXNzZXRQYXkoYXNzZXRJZDogdWludDY0KTogdWludDY0IHsKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjM2CiAgICAvLyBhc3NlcnQoVHhuLmdyb3VwSW5kZXggPiAwLCBgQXNzZXQgdHhuIG1pc3NpbmdgKTsKICAgIHR4biBHcm91cEluZGV4CiAgICBhc3NlcnQgLy8gQXNzZXQgdHhuIG1pc3NpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czozOQogICAgLy8gY29uc3QgcHJldklkeDogdWludDY0ID0gVHhuLmdyb3VwSW5kZXggLSAxOwogICAgdHhuIEdyb3VwSW5kZXgKICAgIGludGNfMSAvLyAxCiAgICAtCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6NDEKICAgIC8vIGNvbnN0IHBheSA9IGd0eG4uQXNzZXRUcmFuc2ZlclR4bihwcmV2SWR4KTsKICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIGludGNfMyAvLyBheGZlcgogICAgPT0KICAgIGFzc2VydCAvLyB0cmFuc2FjdGlvbiB0eXBlIGlzIGF4ZmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6NDQKICAgIC8vIGFzc2VydChwYXkuYXNzZXRSZWNlaXZlciA9PT0gR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsIGBBc3NldCBtdXN0IGdvIHRvIGFwcGApOwogICAgZHVwCiAgICBndHhucyBBc3NldFJlY2VpdmVyCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgPT0KICAgIGFzc2VydCAvLyBBc3NldCBtdXN0IGdvIHRvIGFwcAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjQ1CiAgICAvLyBhc3NlcnQocGF5LnhmZXJBc3NldC5pZCA9PT0gYXNzZXRJZCwgYFdyb25nIGFzc2V0YCk7CiAgICBkdXAKICAgIGd0eG5zIFhmZXJBc3NldAogICAgZnJhbWVfZGlnIC0xCiAgICA9PQogICAgYXNzZXJ0IC8vIFdyb25nIGFzc2V0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6NDgKICAgIC8vIGFzc2VydChwYXkucmVrZXlUbyA9PT0gR2xvYmFsLnplcm9BZGRyZXNzLCBgUmVrZXkgbm90IGFsbG93ZWRgKTsKICAgIGR1cAogICAgZ3R4bnMgUmVrZXlUbwogICAgZ2xvYmFsIFplcm9BZGRyZXNzCiAgICA9PQogICAgYXNzZXJ0IC8vIFJla2V5IG5vdCBhbGxvd2VkCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6NDkKICAgIC8vIGFzc2VydChwYXkuYXNzZXRDbG9zZVRvID09PSBHbG9iYWwuemVyb0FkZHJlc3MsIGBDbG9zZVRvIG5vdCBhbGxvd2VkYCk7CiAgICBkdXAKICAgIGd0eG5zIEFzc2V0Q2xvc2VUbwogICAgZ2xvYmFsIFplcm9BZGRyZXNzCiAgICA9PQogICAgYXNzZXJ0IC8vIENsb3NlVG8gbm90IGFsbG93ZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czo1MAogICAgLy8gcmV0dXJuIHBheS5hc3NldEFtb3VudDsKICAgIGd0eG5zIEFzc2V0QW1vdW50CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6OmdldFByZXZQYXkocmVsVHhJbmRleDogdWludDY0KSAtPiB1aW50NjQ6CmdldFByZXZQYXk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6NTMKICAgIC8vIGV4cG9ydCBmdW5jdGlvbiBnZXRQcmV2UGF5KHJlbFR4SW5kZXg6IHVpbnQ2NCk6IHVpbnQ2NCB7CiAgICBwcm90byAxIDEKICAgIHB1c2hieXRlcyAiIgogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6NTQKICAgIC8vIGlmIChUeG4uZ3JvdXBJbmRleCA8IHJlbFR4SW5kZXgpIHJldHVybiAwOwogICAgdHhuIEdyb3VwSW5kZXgKICAgIGZyYW1lX2RpZyAtMQogICAgPAogICAgYnogZ2V0UHJldlBheV9hZnRlcl9pZl9lbHNlQDIKICAgIGludGNfMCAvLyAwCiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1YgoKZ2V0UHJldlBheV9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6NTYKICAgIC8vIGNvbnN0IHR4SWR4OiB1aW50NjQgPSBUeG4uZ3JvdXBJbmRleCAtIHJlbFR4SW5kZXg7CiAgICB0eG4gR3JvdXBJbmRleAogICAgZnJhbWVfZGlnIC0xCiAgICAtCiAgICBkdXAKICAgIGZyYW1lX2J1cnkgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjU4CiAgICAvLyBpZiAoZ3R4bi5UcmFuc2FjdGlvbih0eElkeCkudHlwZSAhPT0gVHJhbnNhY3Rpb25UeXBlLlBheW1lbnQpIHJldHVybiAwOwogICAgZ3R4bnMgVHlwZUVudW0KICAgIGR1cAogICAgZnJhbWVfYnVyeSAwCiAgICBpbnRjXzEgLy8gMQogICAgIT0KICAgIGJ6IGdldFByZXZQYXlfYWZ0ZXJfaWZfZWxzZUA0CiAgICBpbnRjXzAgLy8gMAogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCmdldFByZXZQYXlfYWZ0ZXJfaWZfZWxzZUA0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjU5CiAgICAvLyBjb25zdCBwYXkgPSBndHhuLlBheW1lbnRUeG4odHhJZHgpOwogICAgZnJhbWVfZGlnIDAKICAgIGludGNfMSAvLyBwYXkKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBwYXkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czo2MQogICAgLy8gaWYgKHBheS5yZWNlaXZlciAhPT0gR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MpIHJldHVybiAwOwogICAgZnJhbWVfZGlnIDEKICAgIGd0eG5zIFJlY2VpdmVyCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgIT0KICAgIGJ6IGdldFByZXZQYXlfYWZ0ZXJfaWZfZWxzZUA2CiAgICBpbnRjXzAgLy8gMAogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCmdldFByZXZQYXlfYWZ0ZXJfaWZfZWxzZUA2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjYzCiAgICAvLyBpZiAocGF5LnJla2V5VG8gIT09IEdsb2JhbC56ZXJvQWRkcmVzcykgcmV0dXJuIDA7CiAgICBmcmFtZV9kaWcgMQogICAgZ3R4bnMgUmVrZXlUbwogICAgZ2xvYmFsIFplcm9BZGRyZXNzCiAgICAhPQogICAgYnogZ2V0UHJldlBheV9hZnRlcl9pZl9lbHNlQDgKICAgIGludGNfMCAvLyAwCiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1YgoKZ2V0UHJldlBheV9hZnRlcl9pZl9lbHNlQDg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6NjQKICAgIC8vIGlmIChwYXkuY2xvc2VSZW1haW5kZXJUbyAhPT0gR2xvYmFsLnplcm9BZGRyZXNzKSByZXR1cm4gMDsKICAgIGZyYW1lX2RpZyAxCiAgICBndHhucyBDbG9zZVJlbWFpbmRlclRvCiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKICAgICE9CiAgICBieiBnZXRQcmV2UGF5X2FmdGVyX2lmX2Vsc2VAMTAKICAgIGludGNfMCAvLyAwCiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1YgoKZ2V0UHJldlBheV9hZnRlcl9pZl9lbHNlQDEwOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjY2CiAgICAvLyByZXR1cm4gcGF5LmFtb3VudDsKICAgIGZyYW1lX2RpZyAxCiAgICBndHhucyBBbW91bnQKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo6QnJpZGdlLmNyZWF0ZUFwcGxpY2F0aW9uKG93bmVyOiBieXRlcywgY2hhaW5JZDogYnl0ZXMsIG1lc3NlbmdlcjogdWludDY0LCBnYXNPcmFjbGU6IHVpbnQ2NCkgLT4gdm9pZDoKY3JlYXRlQXBwbGljYXRpb246CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjY4CiAgICAvLyBjcmVhdGVBcHBsaWNhdGlvbihvd25lcjogQWRkcmVzcywgY2hhaW5JZDogQnl0ZSwgbWVzc2VuZ2VyOiBBcHBsaWNhdGlvbiwgZ2FzT3JhY2xlOiBBcHBsaWNhdGlvbik6IHZvaWQgewogICAgcHJvdG8gNCAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czo2CiAgICAvLyBwcm90ZWN0ZWQgb3duZXIgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPigpOwogICAgYnl0ZWNfMyAvLyAib3duZXIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czo5CiAgICAvLyB0aGlzLm93bmVyLnZhbHVlID0gb3duZXI7CiAgICBmcmFtZV9kaWcgLTQKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjkKICAgIC8vIGdhc09yYWNsZSA9IEdsb2JhbFN0YXRlPEFwcGxpY2F0aW9uPigpOwogICAgYnl0ZWMgNCAvLyAiZ2FzT3JhY2xlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czoxNAogICAgLy8gdGhpcy5nYXNPcmFjbGUudmFsdWUgPSBnYXNPcmFjbGU7CiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjM5CiAgICAvLyBwcml2YXRlIHN0b3BBdXRob3JpdHkgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPigpOy8vIGNhbiByZXN0cmljdCBkZXBvc2l0IG9yIHdpdGhkcmF3IG9wZXJhdGlvbnMKICAgIGJ5dGVjIDEwIC8vICJzdG9wQXV0aG9yaXR5IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo1NAogICAgLy8gdGhpcy5zdG9wQXV0aG9yaXR5LnZhbHVlID0gb3duZXI7CiAgICBmcmFtZV9kaWcgLTQKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjU2CiAgICAvLyBjaGFpbklkID0gR2xvYmFsU3RhdGU8Qnl0ZT4oKTsKICAgIGJ5dGVjIDUgLy8gImNoYWluSWQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjcwCiAgICAvLyB0aGlzLmNoYWluSWQudmFsdWUgPSBjaGFpbklkOwogICAgZnJhbWVfZGlnIC0zCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo1NwogICAgLy8gbWVzc2VuZ2VyID0gR2xvYmFsU3RhdGU8QXBwbGljYXRpb24+KCk7CiAgICBieXRlY18yIC8vICJtZXNzZW5nZXIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjcxCiAgICAvLyB0aGlzLm1lc3Nlbmdlci52YWx1ZSA9IG1lc3NlbmdlcjsKICAgIGZyYW1lX2RpZyAtMgogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6OkJyaWRnZS5vcHRJbkFzc2V0KGFzc2V0SWQ6IHVpbnQ2NCkgLT4gdm9pZDoKb3B0SW5Bc3NldDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NzQKICAgIC8vIG9wdEluQXNzZXQoYXNzZXRJZDogdWludDY0KTogdm9pZCB7CiAgICBwcm90byAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NzUKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo3OC04NAogICAgLy8gaXR4bgogICAgLy8gICAuYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgICAgeGZlckFzc2V0OiBBc3NldChhc3NldElkKSwKICAgIC8vICAgICBhc3NldEFtb3VudDogMCwKICAgIC8vICAgICBhc3NldFJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpOwogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo4MgogICAgLy8gYXNzZXRSZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjgxCiAgICAvLyBhc3NldEFtb3VudDogMCwKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjc4LTgzCiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICB4ZmVyQXNzZXQ6IEFzc2V0KGFzc2V0SWQpLAogICAgLy8gICAgIGFzc2V0QW1vdW50OiAwLAogICAgLy8gICAgIGFzc2V0UmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICB9KQogICAgaW50Y18zIC8vIDQKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo3OC04NAogICAgLy8gaXR4bgogICAgLy8gICAuYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgICAgeGZlckFzc2V0OiBBc3NldChhc3NldElkKSwKICAgIC8vICAgICBhc3NldEFtb3VudDogMCwKICAgIC8vICAgICBhc3NldFJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpOwogICAgaXR4bl9zdWJtaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6ODYKICAgIC8vIGxvZygnQnJpZGdlOiBvcHQtaW4gY29tcGxldGVkJyk7CiAgICBwdXNoYnl0ZXMgIkJyaWRnZTogb3B0LWluIGNvbXBsZXRlZCIKICAgIGxvZwogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo6QnJpZGdlLnN3YXBBbmRCcmlkZ2UodG9rZW5JZDogdWludDY0LCByZWNpcGllbnQ6IGJ5dGVzLCBkZXN0aW5hdGlvbkNoYWluSWQ6IGJ5dGVzLCByZWNlaXZlVG9rZW46IGJ5dGVzLCBub25jZTogYnl0ZXMsIGZlZVRva2VuQW1vdW50OiB1aW50NjQpIC0+IHZvaWQ6CnN3YXBBbmRCcmlkZ2U6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjkzLTEwNQogICAgLy8gQGFiaW1ldGhvZCh7CiAgICAvLyAgIGRlZmF1bHRBcmd1bWVudHM6IHsKICAgIC8vICAgICBmZWVUb2tlbkFtb3VudDogeyBjb25zdGFudDogMCB9LAogICAgLy8gICB9LAogICAgLy8gfSkKICAgIC8vIHN3YXBBbmRCcmlkZ2UoCiAgICAvLyAgIHRva2VuSWQ6IHVpbnQ2NCwKICAgIC8vICAgcmVjaXBpZW50OiBTdGF0aWNCeXRlczwzMj4sCiAgICAvLyAgIGRlc3RpbmF0aW9uQ2hhaW5JZDogQnl0ZSwKICAgIC8vICAgcmVjZWl2ZVRva2VuOiBTdGF0aWNCeXRlczwzMj4sCiAgICAvLyAgIG5vbmNlOiBTdGF0aWNCeXRlczwzMj4sCiAgICAvLyAgIGZlZVRva2VuQW1vdW50OiB1aW50NjQsCiAgICAvLyApOiB2b2lkIHsKICAgIHByb3RvIDYgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo1MAogICAgLy8gY2FuU3dhcCA9IEdsb2JhbFN0YXRlPGJvb2xlYW4+KHsgaW5pdGlhbFZhbHVlOiB0cnVlIH0pOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gImNhblN3YXAiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo2MQogICAgLy8gYXNzZXJ0KHRoaXMuY2FuU3dhcC52YWx1ZSwgJ1JvdXRlcjogc3dhcCBwcm9oaWJpdGVkJyk7CiAgICBhc3NlcnQgLy8gUm91dGVyOiBzd2FwIHByb2hpYml0ZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTA3CiAgICAvLyBjb25zdCBhbW91bnQgPSBnZXRQcmV2QXNzZXRQYXkodG9rZW5JZCk7CiAgICBmcmFtZV9kaWcgLTYKICAgIGNhbGxzdWIgZ2V0UHJldkFzc2V0UGF5CiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTA4CiAgICAvLyBhc3NlcnQoYW1vdW50ID4gZmVlVG9rZW5BbW91bnQsICdCcmlkZ2U6IGFtb3VudCB0b28gbG93IGZvciBmZWUnKTsKICAgIGZyYW1lX2RpZyAtMQogICAgPgogICAgYXNzZXJ0IC8vIEJyaWRnZTogYW1vdW50IHRvbyBsb3cgZm9yIGZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxMDkKICAgIC8vIGFzc2VydCghcmVjaXBpZW50LmJ5dGVzLmVxdWFscyhiemVybygzMikpLCAnQnJpZGdlOiBicmlkZ2UgdG8gdGhlIHplcm8gYWRkcmVzcycpOwogICAgcHVzaGludCAzMiAvLyAzMgogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtNQogICAgPT0KICAgICEKICAgIGFzc2VydCAvLyBCcmlkZ2U6IGJyaWRnZSB0byB0aGUgemVybyBhZGRyZXNzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjExMQogICAgLy8gY29uc3QgYnJpZGdpbmdGZWU6IHVpbnQ2NCA9IGdldFByZXZQYXkoMikgKyB0aGlzLl9jb252ZXJ0QnJpZGdpbmdGZWVJblRva2Vuc1RvTmF0aXZlVG9rZW4odG9rZW5JZCwgZmVlVG9rZW5BbW91bnQpOwogICAgcHVzaGludCAyIC8vIDIKICAgIGNhbGxzdWIgZ2V0UHJldlBheQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozMzcKICAgIC8vIGlmIChmZWVUb2tlbkFtb3VudCA9PT0gMCkgcmV0dXJuIDA7CiAgICBmcmFtZV9kaWcgLTEKICAgIGJueiBzd2FwQW5kQnJpZGdlX2FmdGVyX2lmX2Vsc2VAMwogICAgaW50Y18wIC8vIDAKCnN3YXBBbmRCcmlkZ2VfYWZ0ZXJfaW5saW5lZF9zbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2UuX2NvbnZlcnRCcmlkZ2luZ0ZlZUluVG9rZW5zVG9OYXRpdmVUb2tlbkA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxMTEKICAgIC8vIGNvbnN0IGJyaWRnaW5nRmVlOiB1aW50NjQgPSBnZXRQcmV2UGF5KDIpICsgdGhpcy5fY29udmVydEJyaWRnaW5nRmVlSW5Ub2tlbnNUb05hdGl2ZVRva2VuKHRva2VuSWQsIGZlZVRva2VuQW1vdW50KTsKICAgIGZyYW1lX2RpZyAxCiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjExMgogICAgLy8gY29uc3QgYW1vdW50QWZ0ZXJGZWU6IHVpbnQ2NCA9IGFtb3VudCAtIGZlZVRva2VuQW1vdW50OwogICAgZnJhbWVfZGlnIDAKICAgIGZyYW1lX2RpZyAtMQogICAgLQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxMTQKICAgIC8vIGNvbnN0IHZVc2RBbW91bnQgPSB0aGlzLnNlbmRBbmRTd2FwVG9WVXNkKHRva2VuSWQsIHNlbmRlciwgYW1vdW50QWZ0ZXJGZWUpOwogICAgZnJhbWVfZGlnIC02CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjExMwogICAgLy8gY29uc3Qgc2VuZGVyID0gbmV3IEFkZHJlc3MoVHhuLnNlbmRlcik7CiAgICB0eG4gU2VuZGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjExNAogICAgLy8gY29uc3QgdlVzZEFtb3VudCA9IHRoaXMuc2VuZEFuZFN3YXBUb1ZVc2QodG9rZW5JZCwgc2VuZGVyLCBhbW91bnRBZnRlckZlZSk7CiAgICB1bmNvdmVyIDIKICAgIGNhbGxzdWIgc2VuZEFuZFN3YXBUb1ZVc2QKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NTYKICAgIC8vIGNoYWluSWQgPSBHbG9iYWxTdGF0ZTxCeXRlPigpOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDUgLy8gImNoYWluSWQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxMjYKICAgIC8vIGFzc2VydChkZXN0aW5hdGlvbkNoYWluSWQgIT09IHRoaXMuY2hhaW5JZC52YWx1ZSwgJ0JyaWRnZTogd3JvbmcgZGVzdGluYXRpb24gY2hhaW4nKTsKICAgIGZyYW1lX2RpZyAtNAogICAgIT0KICAgIGFzc2VydCAvLyBCcmlkZ2U6IHdyb25nIGRlc3RpbmF0aW9uIGNoYWluCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMzMwogICAgLy8gcmV0dXJuIGNoYWluSWQuYnl0ZXMuY29uY2F0KHRva2VuLmJ5dGVzKTsKICAgIGZyYW1lX2RpZyAtNAogICAgZnJhbWVfZGlnIC0zCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NjYKICAgIC8vIG90aGVyQnJpZGdlVG9rZW5zID0gQm94TWFwPGJ5dGVzLCBTdGF0aWNCeXRlcz4oeyBrZXlQcmVmaXg6ICd0JyB9KTsKICAgIGJ5dGVjIDcgLy8gInQiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTI3CiAgICAvLyBhc3NlcnQodGhpcy5vdGhlckJyaWRnZVRva2Vucyh0aGlzLl9nZXRPdGhlckJyaWRnZVRva2Vuc0tleShkZXN0aW5hdGlvbkNoYWluSWQsIHJlY2VpdmVUb2tlbikpLmV4aXN0cywgJ0JyaWRnZTogdW5rbm93biBjaGFpbiBvciB0b2tlbicpOwogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gQnJpZGdlOiB1bmtub3duIGNoYWluIG9yIHRva2VuCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjU2CiAgICAvLyBjaGFpbklkID0gR2xvYmFsU3RhdGU8Qnl0ZT4oKTsKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA1IC8vICJjaGFpbklkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTI5CiAgICAvLyBjb25zdCBtZXNzYWdlID0gdGhpcy5oYXNoTWVzc2FnZShhbW91bnQsIHJlY2lwaWVudCwgdGhpcy5jaGFpbklkLnZhbHVlLCBkZXN0aW5hdGlvbkNoYWluSWQsIHJlY2VpdmVUb2tlbiwgbm9uY2UpOwogICAgZGlnIDEKICAgIGZyYW1lX2RpZyAtNQogICAgdW5jb3ZlciAyCiAgICBmcmFtZV9kaWcgLTQKICAgIGZyYW1lX2RpZyAtMwogICAgZnJhbWVfZGlnIC0yCiAgICBjYWxsc3ViIGhhc2hNZXNzYWdlCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjEzMAogICAgLy8gY29uc3QgYnJpZGdlVHJhbnNhY3Rpb25Db3N0ID0gdGhpcy5nZXRUcmFuc2FjdGlvbkNvc3QoZGVzdGluYXRpb25DaGFpbklkKTsKICAgIGZyYW1lX2RpZyAtNAogICAgY2FsbHN1YiBnZXRUcmFuc2FjdGlvbkNvc3QKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NjEKICAgIC8vIHNlbnRNZXNzYWdlcyA9IEJveE1hcDxTdGF0aWNCeXRlczwzMj4sIFN0YXRpY0J5dGVzPih7IGtleVByZWZpeDogJ3MnIH0pOwogICAgcHVzaGJ5dGVzICJzIgogICAgZGlnIDIKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxNDgKICAgIC8vIGFzc2VydCghdGhpcy5zZW50TWVzc2FnZXMobWVzc2FnZSkuZXhpc3RzLCAnQnJpZGdlOiB0b2tlbnMgYWxyZWFkeSBzZW50Jyk7CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgIQogICAgYXNzZXJ0IC8vIEJyaWRnZTogdG9rZW5zIGFscmVhZHkgc2VudAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxNTAKICAgIC8vIHRoaXMuc2VudE1lc3NhZ2VzKG1lc3NhZ2UpLnZhbHVlID0gbmV3IFN0YXRpY0J5dGVzKCk7CiAgICBwdXNoYnl0ZXMgMHgKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTUyCiAgICAvLyBjb25zdCBkZXN0aW5hdGlvbkNoYWluSWQgPSBtZXNzYWdlLmF0KDEpOwogICAgZGlnIDEKICAgIGV4dHJhY3QgMSAxIC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxNTMtMTU2CiAgICAvLyBjb25zdCBtZXNzYWdlQ29zdCA9IGFiaUNhbGwoTWVzc2VuZ2VyLnByb3RvdHlwZS5nZXRUcmFuc2FjdGlvbkNvc3QsIHsKICAgIC8vICAgYXBwSWQ6IHRoaXMubWVzc2VuZ2VyLnZhbHVlLmlkLAogICAgLy8gICBhcmdzOiBbZGVzdGluYXRpb25DaGFpbklkXSwKICAgIC8vIH0pLnJldHVyblZhbHVlOwogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo1NwogICAgLy8gbWVzc2VuZ2VyID0gR2xvYmFsU3RhdGU8QXBwbGljYXRpb24+KCk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMiAvLyAibWVzc2VuZ2VyIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTUzLTE1NgogICAgLy8gY29uc3QgbWVzc2FnZUNvc3QgPSBhYmlDYWxsKE1lc3Nlbmdlci5wcm90b3R5cGUuZ2V0VHJhbnNhY3Rpb25Db3N0LCB7CiAgICAvLyAgIGFwcElkOiB0aGlzLm1lc3Nlbmdlci52YWx1ZS5pZCwKICAgIC8vICAgYXJnczogW2Rlc3RpbmF0aW9uQ2hhaW5JZF0sCiAgICAvLyB9KS5yZXR1cm5WYWx1ZTsKICAgIGJ5dGVjIDEzIC8vIG1ldGhvZCAiZ2V0VHJhbnNhY3Rpb25Db3N0KGJ5dGUpdWludDY0IgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGludGNfMiAvLyBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIGR1cAogICAgZXh0cmFjdCA0IDAKICAgIHN3YXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQnl0ZXMgaGFzIHZhbGlkIHByZWZpeAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo1NwogICAgLy8gbWVzc2VuZ2VyID0gR2xvYmFsU3RhdGU8QXBwbGljYXRpb24+KCk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMiAvLyAibWVzc2VuZ2VyIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTYwCiAgICAvLyByZWNlaXZlcjogdGhpcy5tZXNzZW5nZXIudmFsdWUuYWRkcmVzcywKICAgIGFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKICAgIGFzc2VydCAvLyBhcHBsaWNhdGlvbiBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NTcKICAgIC8vIG1lc3NlbmdlciA9IEdsb2JhbFN0YXRlPEFwcGxpY2F0aW9uPigpOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzIgLy8gIm1lc3NlbmdlciIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjE3MAogICAgLy8gaXR4bi5zdWJtaXRHcm91cChwYXltZW50UGFyYW1zLCBhcHBDYWxsUGFyYW1zKTsKICAgIGl0eG5fYmVnaW4KICAgIHN3YXAKICAgIGl0eG5fZmllbGQgUmVjZWl2ZXIKICAgIGRpZyAxCiAgICBpdHhuX2ZpZWxkIEFtb3VudAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxNTgtMTYxCiAgICAvLyBjb25zdCBwYXltZW50UGFyYW1zID0gaXR4bi5wYXltZW50KHsKICAgIC8vICAgYW1vdW50OiBtZXNzYWdlQ29zdCwKICAgIC8vICAgcmVjZWl2ZXI6IHRoaXMubWVzc2VuZ2VyLnZhbHVlLmFkZHJlc3MsCiAgICAvLyB9KTsKICAgIGludGNfMSAvLyAxCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTcwCiAgICAvLyBpdHhuLnN1Ym1pdEdyb3VwKHBheW1lbnRQYXJhbXMsIGFwcENhbGxQYXJhbXMpOwogICAgaXR4bl9uZXh0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjE2NgogICAgLy8gYXJjNC5tZXRob2RTZWxlY3Rvcignc2VuZE1lc3NhZ2UoYnl0ZVszMl0pdm9pZCcpLAogICAgcHVzaGJ5dGVzIDB4YTMyNDk5ODkgLy8gbWV0aG9kICJzZW5kTWVzc2FnZShieXRlWzMyXSl2b2lkIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIHVuY292ZXIgMwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxNjMtMTY5CiAgICAvLyBjb25zdCBhcHBDYWxsUGFyYW1zID0gaXR4bi5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICBhcHBJZDogdGhpcy5tZXNzZW5nZXIudmFsdWUuaWQsCiAgICAvLyAgIGFwcEFyZ3M6IFsKICAgIC8vICAgICBhcmM0Lm1ldGhvZFNlbGVjdG9yKCdzZW5kTWVzc2FnZShieXRlWzMyXSl2b2lkJyksCiAgICAvLyAgICAgbWVzc2FnZSwKICAgIC8vICAgXSwKICAgIC8vIH0pOwogICAgaW50Y18yIC8vIDYKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxNzAKICAgIC8vIGl0eG4uc3VibWl0R3JvdXAocGF5bWVudFBhcmFtcywgYXBwQ2FsbFBhcmFtcyk7CiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxMzIKICAgIC8vIGVtaXQ8UmVjZWl2ZUZlZT4oeyBicmlkZ2VUcmFuc2FjdGlvbkNvc3QsIG1lc3NhZ2VUcmFuc2FjdGlvbkNvc3QgfSk7CiAgICBkaWcgMQogICAgaXRvYgogICAgZGlnIDEKICAgIGl0b2IKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4NGI1NTQxOWIgLy8gbWV0aG9kICJSZWNlaXZlRmVlKHVpbnQ2NCx1aW50NjQpIgogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTMzCiAgICAvLyBhc3NlcnQoYnJpZGdpbmdGZWUgPj0gYnJpZGdlVHJhbnNhY3Rpb25Db3N0ICsgbWVzc2FnZVRyYW5zYWN0aW9uQ29zdCwgJ0JyaWRnZTogbm90IGVub3VnaCBmZWUnKTsKICAgICsKICAgIHVuY292ZXIgMgogICAgPD0KICAgIGFzc2VydCAvLyBCcmlkZ2U6IG5vdCBlbm91Z2ggZmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjEzNQogICAgLy8gYW1vdW50LAogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxMzQtMTQxCiAgICAvLyBlbWl0PFRva2Vuc1NlbnQ+KHsKICAgIC8vICAgICBhbW91bnQsCiAgICAvLyAgICAgcmVjaXBpZW50LAogICAgLy8gICAgIGRlc3RpbmF0aW9uQ2hhaW5JZCwKICAgIC8vICAgICByZWNlaXZlVG9rZW4sCiAgICAvLyAgICAgbm9uY2UsCiAgICAvLyAgICAgbWVzc2VuZ2VyOiBBTExCUklER0VfTUVTU0VOR0VSLAogICAgLy8gICB9LAogICAgZnJhbWVfZGlnIC01CiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtNAogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTMKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC0yCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NTIKICAgIC8vIGNvbnN0IEFMTEJSSURHRV9NRVNTRU5HRVIgPSBuZXcgQnl0ZSgxKTsKICAgIGJ5dGVjIDExIC8vIDB4MDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTM0LTE0MQogICAgLy8gZW1pdDxUb2tlbnNTZW50Pih7CiAgICAvLyAgICAgYW1vdW50LAogICAgLy8gICAgIHJlY2lwaWVudCwKICAgIC8vICAgICBkZXN0aW5hdGlvbkNoYWluSWQsCiAgICAvLyAgICAgcmVjZWl2ZVRva2VuLAogICAgLy8gICAgIG5vbmNlLAogICAgLy8gICAgIG1lc3NlbmdlcjogQUxMQlJJREdFX01FU1NFTkdFUiwKICAgIC8vICAgfSwKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxMzQtMTQyCiAgICAvLyBlbWl0PFRva2Vuc1NlbnQ+KHsKICAgIC8vICAgICBhbW91bnQsCiAgICAvLyAgICAgcmVjaXBpZW50LAogICAgLy8gICAgIGRlc3RpbmF0aW9uQ2hhaW5JZCwKICAgIC8vICAgICByZWNlaXZlVG9rZW4sCiAgICAvLyAgICAgbm9uY2UsCiAgICAvLyAgICAgbWVzc2VuZ2VyOiBBTExCUklER0VfTUVTU0VOR0VSLAogICAgLy8gICB9LAogICAgLy8gKTsKICAgIHB1c2hieXRlcyAweDIyOWZiYWVjIC8vIG1ldGhvZCAiVG9rZW5zU2VudCh1aW50NjQsYnl0ZVszMl0sYnl0ZSxieXRlWzMyXSxieXRlWzMyXSxieXRlKSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICByZXRzdWIKCnN3YXBBbmRCcmlkZ2VfYWZ0ZXJfaWZfZWxzZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozMzkKICAgIC8vIGNvbnN0IGZlZTogdWludDY0ID0gdGhpcy5icmlkZ2luZ0ZlZUNvbnZlcnNpb25TY2FsaW5nRmFjdG9yKHRva2VuSWQpLnZhbHVlICogZmVlVG9rZW5BbW91bnQgLyBhYmlDYWxsKEdhc09yYWNsZS5wcm90b3R5cGUuZ2V0UHJpY2UsIHsKICAgIGZyYW1lX2RpZyAtNgogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czozNgogICAgLy8gcHJvdGVjdGVkIGJyaWRnaW5nRmVlQ29udmVyc2lvblNjYWxpbmdGYWN0b3IgPSBCb3hNYXA8dWludDY0LCB1aW50NjQ+KHsga2V5UHJlZml4OiAnZicgfSk7CiAgICBwdXNoYnl0ZXMgImYiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzM5CiAgICAvLyBjb25zdCBmZWU6IHVpbnQ2NCA9IHRoaXMuYnJpZGdpbmdGZWVDb252ZXJzaW9uU2NhbGluZ0ZhY3Rvcih0b2tlbklkKS52YWx1ZSAqIGZlZVRva2VuQW1vdW50IC8gYWJpQ2FsbChHYXNPcmFjbGUucHJvdG90eXBlLmdldFByaWNlLCB7CiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBidG9pCiAgICBzd2FwCiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgZnJhbWVfZGlnIC0xCiAgICAqCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMzOS0zNDIKICAgIC8vIGNvbnN0IGZlZTogdWludDY0ID0gdGhpcy5icmlkZ2luZ0ZlZUNvbnZlcnNpb25TY2FsaW5nRmFjdG9yKHRva2VuSWQpLnZhbHVlICogZmVlVG9rZW5BbW91bnQgLyBhYmlDYWxsKEdhc09yYWNsZS5wcm90b3R5cGUuZ2V0UHJpY2UsIHsKICAgIC8vICAgYXBwSWQ6IHRoaXMuZ2FzT3JhY2xlLnZhbHVlLmlkLAogICAgLy8gICBhcmdzOiBbdGhpcy5jaGFpbklkLnZhbHVlXSwKICAgIC8vIH0pLnJldHVyblZhbHVlOwogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czo5CiAgICAvLyBnYXNPcmFjbGUgPSBHbG9iYWxTdGF0ZTxBcHBsaWNhdGlvbj4oKTsKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA0IC8vICJnYXNPcmFjbGUiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo1NgogICAgLy8gY2hhaW5JZCA9IEdsb2JhbFN0YXRlPEJ5dGU+KCk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNSAvLyAiY2hhaW5JZCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMzOS0zNDIKICAgIC8vIGNvbnN0IGZlZTogdWludDY0ID0gdGhpcy5icmlkZ2luZ0ZlZUNvbnZlcnNpb25TY2FsaW5nRmFjdG9yKHRva2VuSWQpLnZhbHVlICogZmVlVG9rZW5BbW91bnQgLyBhYmlDYWxsKEdhc09yYWNsZS5wcm90b3R5cGUuZ2V0UHJpY2UsIHsKICAgIC8vICAgYXBwSWQ6IHRoaXMuZ2FzT3JhY2xlLnZhbHVlLmlkLAogICAgLy8gICBhcmdzOiBbdGhpcy5jaGFpbklkLnZhbHVlXSwKICAgIC8vIH0pLnJldHVyblZhbHVlOwogICAgcHVzaGJ5dGVzIDB4MWRiNzBjZGQgLy8gbWV0aG9kICJnZXRQcmljZShieXRlKXVpbnQ2NCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBpbnRjXzIgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEJ5dGVzIGhhcyB2YWxpZCBwcmVmaXgKICAgIGJ0b2kKICAgIC8KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzQ0CiAgICAvLyBlbWl0PEJyaWRnaW5nRmVlRnJvbVRva2Vucz4oeyBmZWUgfSk7CiAgICBkdXAKICAgIGl0b2IKICAgIHB1c2hieXRlcyAweGUwN2Y2YjM2IC8vIG1ldGhvZCAiQnJpZGdpbmdGZWVGcm9tVG9rZW5zKHVpbnQ2NCkiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxMTEKICAgIC8vIGNvbnN0IGJyaWRnaW5nRmVlOiB1aW50NjQgPSBnZXRQcmV2UGF5KDIpICsgdGhpcy5fY29udmVydEJyaWRnaW5nRmVlSW5Ub2tlbnNUb05hdGl2ZVRva2VuKHRva2VuSWQsIGZlZVRva2VuQW1vdW50KTsKICAgIGIgc3dhcEFuZEJyaWRnZV9hZnRlcl9pbmxpbmVkX3NtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6OkJyaWRnZS5fY29udmVydEJyaWRnaW5nRmVlSW5Ub2tlbnNUb05hdGl2ZVRva2VuQDUKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2UucmVjZWl2ZVRva2VucyhhbW91bnQ6IHVpbnQ2NCwgcmVjaXBpZW50OiBieXRlcywgc291cmNlQ2hhaW5JZDogYnl0ZXMsIHJlY2VpdmVUb2tlbjogYnl0ZXMsIG5vbmNlOiBieXRlcywgcmVjZWl2ZUFtb3VudE1pbjogdWludDY0KSAtPiB2b2lkOgpyZWNlaXZlVG9rZW5zOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxNzQtMTgyCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIC8vIHJlY2VpdmVUb2tlbnMoCiAgICAvLyAgIGFtb3VudDogdWludDY0LAogICAgLy8gICByZWNpcGllbnQ6IFN0YXRpY0J5dGVzPDMyPiwKICAgIC8vICAgc291cmNlQ2hhaW5JZDogQnl0ZSwKICAgIC8vICAgcmVjZWl2ZVRva2VuOiBTdGF0aWNCeXRlczwzMj4sCiAgICAvLyAgIG5vbmNlOiBTdGF0aWNCeXRlczwzMj4sCiAgICAvLyAgIHJlY2VpdmVBbW91bnRNaW46IHVpbnQ2NCwKICAgIC8vICk6IHZvaWQgewogICAgcHJvdG8gNiAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjUwCiAgICAvLyBjYW5Td2FwID0gR2xvYmFsU3RhdGU8Ym9vbGVhbj4oeyBpbml0aWFsVmFsdWU6IHRydWUgfSk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAiY2FuU3dhcCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjYxCiAgICAvLyBhc3NlcnQodGhpcy5jYW5Td2FwLnZhbHVlLCAnUm91dGVyOiBzd2FwIHByb2hpYml0ZWQnKTsKICAgIGFzc2VydCAvLyBSb3V0ZXI6IHN3YXAgcHJvaGliaXRlZAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo2MwogICAgLy8gb3RoZXJCcmlkZ2VzID0gQm94TWFwPEJ5dGUsIFN0YXRpY0J5dGVzPDMyPj4oeyBrZXlQcmVmaXg6ICdiJyB9KTsKICAgIHB1c2hieXRlcyAiYiIKICAgIGZyYW1lX2RpZyAtNAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjE4NAogICAgLy8gYXNzZXJ0KHRoaXMub3RoZXJCcmlkZ2VzKHNvdXJjZUNoYWluSWQpLmV4aXN0cywgJ0JyaWRnZTogc291cmNlIG5vdCByZWdpc3RlcmVkJyk7CiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBCcmlkZ2U6IHNvdXJjZSBub3QgcmVnaXN0ZXJlZAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxODUKICAgIC8vIGNvbnN0IHZhbHVlOiB1aW50NjQgPSBnZXRQcmV2UGF5KDEpOwogICAgaW50Y18xIC8vIDEKICAgIGNhbGxzdWIgZ2V0UHJldlBheQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxODcKICAgIC8vIGFzc2VydCh2YWx1ZSA+PSBzdG9yYWdlRmVlLCAnQnJpZGdlOiBub3QgZW5vdWdoIGZlZScpOwogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMyMAogICAgLy8gcmV0dXJuIDE1NzAwOwogICAgaW50YyA0IC8vIDE1NzAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjE4NwogICAgLy8gYXNzZXJ0KHZhbHVlID49IHN0b3JhZ2VGZWUsICdCcmlkZ2U6IG5vdCBlbm91Z2ggZmVlJyk7CiAgICA+PQogICAgYXNzZXJ0IC8vIEJyaWRnZTogbm90IGVub3VnaCBmZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NTYKICAgIC8vIGNoYWluSWQgPSBHbG9iYWxTdGF0ZTxCeXRlPigpOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDUgLy8gImNoYWluSWQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxODkKICAgIC8vIGNvbnN0IG1lc3NhZ2UgPSB0aGlzLmhhc2hNZXNzYWdlKGFtb3VudCwgcmVjaXBpZW50LCBzb3VyY2VDaGFpbklkLCB0aGlzLmNoYWluSWQudmFsdWUsIHJlY2VpdmVUb2tlbiwgbm9uY2UpOwogICAgZnJhbWVfZGlnIC02CiAgICBmcmFtZV9kaWcgLTUKICAgIGZyYW1lX2RpZyAtNAogICAgdW5jb3ZlciAzCiAgICBmcmFtZV9kaWcgLTMKICAgIGZyYW1lX2RpZyAtMgogICAgY2FsbHN1YiBoYXNoTWVzc2FnZQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjgwCiAgICAvLyBjb25zdCBoOiBieXRlcyA9IG9wLmtlY2NhazI1NihvcC5jb25jYXQobWVzc2FnZS5ieXRlcywgc2VuZGVyQWRkcmVzcykpOwogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjE5MAogICAgLy8gY29uc3QgbWVzc2FnZVdpdGhTZW5kZXIgPSBoYXNoV2l0aFNlbmRlckFkZHJlc3MobWVzc2FnZSwgVHhuLnNlbmRlci5ieXRlcyk7CiAgICB0eG4gU2VuZGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6ODAKICAgIC8vIGNvbnN0IGg6IGJ5dGVzID0gb3Aua2VjY2FrMjU2KG9wLmNvbmNhdChtZXNzYWdlLmJ5dGVzLCBzZW5kZXJBZGRyZXNzKSk7CiAgICBjb25jYXQKICAgIGtlY2NhazI1NgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjgzCiAgICAvLyBjb25zdCBmaXJzdDIgPSBvcC5zdWJzdHJpbmcobWVzc2FnZS5ieXRlcywgMCwgMik7CiAgICBzd2FwCiAgICBzdWJzdHJpbmcgMCAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6ODUKICAgIC8vIGNvbnN0IGxhc3QzMCA9IG9wLnN1YnN0cmluZyhoLCAyLCAzMik7CiAgICBzd2FwCiAgICBzdWJzdHJpbmcgMiAzMgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjg4CiAgICAvLyByZXR1cm4gbmV3IFN0YXRpY0J5dGVzPDMyPihvcC5jb25jYXQoZmlyc3QyLCBsYXN0MzApKTsKICAgIGNvbmNhdAogICAgZHVwCiAgICBjb3ZlciAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjU5CiAgICAvLyBwcm9jZXNzZWRNZXNzYWdlcyA9IEJveE1hcDxTdGF0aWNCeXRlczwzMj4sIFN0YXRpY0J5dGVzPih7IGtleVByZWZpeDogJ20nIH0pOwogICAgcHVzaGJ5dGVzICJtIgogICAgZGlnIDEKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxOTIKICAgIC8vIGFzc2VydCghdGhpcy5wcm9jZXNzZWRNZXNzYWdlcyhtZXNzYWdlV2l0aFNlbmRlcikuZXhpc3RzLCAnQnJpZGdlOiBtZXNzYWdlIHByb2Nlc3NlZCcpOwogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgICEKICAgIGFzc2VydCAvLyBCcmlkZ2U6IG1lc3NhZ2UgcHJvY2Vzc2VkCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjE5NAogICAgLy8gdGhpcy5wcm9jZXNzZWRNZXNzYWdlcyhtZXNzYWdlV2l0aFNlbmRlcikudmFsdWUgPSBuZXcgU3RhdGljQnl0ZXMoKTsKICAgIHB1c2hieXRlcyAweAogICAgYm94X3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxOTctMjAwCiAgICAvLyBhc3NlcnQoYWJpQ2FsbChNZXNzZW5nZXIucHJvdG90eXBlLnJlY2VpdmVkTWVzc2FnZXMsIHsKICAgIC8vICAgYXBwSWQ6IHRoaXMubWVzc2VuZ2VyLnZhbHVlLmlkLAogICAgLy8gICBhcmdzOiBbbWVzc2FnZVdpdGhTZW5kZXJdLAogICAgLy8gfSkucmV0dXJuVmFsdWUsICdCcmlkZ2U6IG5vIG1lc3NhZ2UnKTsKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NTcKICAgIC8vIG1lc3NlbmdlciA9IEdsb2JhbFN0YXRlPEFwcGxpY2F0aW9uPigpOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzIgLy8gIm1lc3NlbmdlciIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjE5Ny0yMDAKICAgIC8vIGFzc2VydChhYmlDYWxsKE1lc3Nlbmdlci5wcm90b3R5cGUucmVjZWl2ZWRNZXNzYWdlcywgewogICAgLy8gICBhcHBJZDogdGhpcy5tZXNzZW5nZXIudmFsdWUuaWQsCiAgICAvLyAgIGFyZ3M6IFttZXNzYWdlV2l0aFNlbmRlcl0sCiAgICAvLyB9KS5yZXR1cm5WYWx1ZSwgJ0JyaWRnZTogbm8gbWVzc2FnZScpOwogICAgcHVzaGJ5dGVzIDB4MzNlMTQ3YWEgLy8gbWV0aG9kICJyZWNlaXZlZE1lc3NhZ2VzKGJ5dGVbMzJdKWJvb2wiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaW50Y18yIC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBCeXRlcyBoYXMgdmFsaWQgcHJlZml4CiAgICBpbnRjXzAgLy8gMAogICAgZ2V0Yml0CiAgICBhc3NlcnQgLy8gQnJpZGdlOiBubyBtZXNzYWdlCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIwMgogICAgLy8gY29uc3QgdG9rZW5JZDogdWludDY0ID0gb3AuZXh0cmFjdFVpbnQ2NChyZWNlaXZlVG9rZW4uYnl0ZXMsIDI0KTsKICAgIGZyYW1lX2RpZyAtMwogICAgcHVzaGludCAyNCAvLyAyNAogICAgZXh0cmFjdF91aW50NjQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjA0LTIwOQogICAgLy8gY29uc3QgcmVjZWl2ZUFtb3VudCA9IHRoaXMucmVjZWl2ZUFuZFN3YXBGcm9tVlVzZCgKICAgIC8vICAgdG9rZW5JZCwKICAgIC8vICAgcmVjaXBpZW50QWRkcmVzcywKICAgIC8vICAgYW1vdW50LAogICAgLy8gICByZWNlaXZlQW1vdW50TWluLAogICAgLy8gKTsKICAgIGZyYW1lX2RpZyAtNQogICAgZnJhbWVfZGlnIC02CiAgICBmcmFtZV9kaWcgLTEKICAgIGNhbGxzdWIgcmVjZWl2ZUFuZFN3YXBGcm9tVlVzZAogICAgc3dhcAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyMTIKICAgIC8vIGNvbnN0IGV4dHJhR2FzOiB1aW50NjQgPSB2YWx1ZSAtIHN0b3JhZ2VGZWU7CiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzIwCiAgICAvLyByZXR1cm4gMTU3MDA7CiAgICBpbnRjIDQgLy8gMTU3MDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjEyCiAgICAvLyBjb25zdCBleHRyYUdhczogdWludDY0ID0gdmFsdWUgLSBzdG9yYWdlRmVlOwogICAgLQogICAgc3dhcAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozMjAKICAgIC8vIHJldHVybiAxNTcwMDsKICAgIGludGMgNCAvLyAxNTcwMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyMTMKICAgIC8vIGlmICh2YWx1ZSA+IHN0b3JhZ2VGZWUpIHsKICAgID4KICAgIGJ6IHJlY2VpdmVUb2tlbnNfYWZ0ZXJfaWZfZWxzZUA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIxNC0yMTcKICAgIC8vIHBheW1lbnQoewogICAgLy8gICBhbW91bnQ6IGV4dHJhR2FzLAogICAgLy8gICByZWNlaXZlcjogcmVjaXBpZW50QWRkcmVzcy5ieXRlcywKICAgIC8vIH0pLnN1Ym1pdCgpOwogICAgaXR4bl9iZWdpbgogICAgZnJhbWVfZGlnIC01CiAgICBpdHhuX2ZpZWxkIFJlY2VpdmVyCiAgICBmcmFtZV9kaWcgMgogICAgaXR4bl9maWVsZCBBbW91bnQKICAgIGludGNfMSAvLyAxCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CgpyZWNlaXZlVG9rZW5zX2FmdGVyX2lmX2Vsc2VANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjE5CiAgICAvLyBlbWl0PFRva2Vuc1JlY2VpdmVkPih7IHJlY2VpdmVBbW91bnQsIHJlY2lwaWVudDogcmVjaXBpZW50QWRkcmVzcywgbm9uY2UsIG1lc3NlbmdlcjogQUxMQlJJREdFX01FU1NFTkdFUiwgbWVzc2FnZTogbWVzc2FnZVdpdGhTZW5kZXIgfSk7CiAgICBmcmFtZV9kaWcgMQogICAgaXRvYgogICAgZnJhbWVfZGlnIC01CiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtMgogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjUyCiAgICAvLyBjb25zdCBBTExCUklER0VfTUVTU0VOR0VSID0gbmV3IEJ5dGUoMSk7CiAgICBieXRlYyAxMSAvLyAweDAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIxOQogICAgLy8gZW1pdDxUb2tlbnNSZWNlaXZlZD4oeyByZWNlaXZlQW1vdW50LCByZWNpcGllbnQ6IHJlY2lwaWVudEFkZHJlc3MsIG5vbmNlLCBtZXNzZW5nZXI6IEFMTEJSSURHRV9NRVNTRU5HRVIsIG1lc3NhZ2U6IG1lc3NhZ2VXaXRoU2VuZGVyIH0pOwogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgMAogICAgY29uY2F0CiAgICBwdXNoYnl0ZXMgMHg0NTgzNmFkNiAvLyBtZXRob2QgIlRva2Vuc1JlY2VpdmVkKHVpbnQ2NCxhZGRyZXNzLGJ5dGVbMzJdLGJ5dGUsYnl0ZVszMl0pIgogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6OkJyaWRnZS5yZWdpc3RlckJyaWRnZShjaGFpbklkOiBieXRlcywgYnJpZGdlQWRkcmVzczogYnl0ZXMpIC0+IHZvaWQ6CnJlZ2lzdGVyQnJpZGdlOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyMjItMjIzCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIC8vIHJlZ2lzdGVyQnJpZGdlKGNoYWluSWQ6IEJ5dGUsIGJyaWRnZUFkZHJlc3M6IFN0YXRpY0J5dGVzPDMyPik6IHZvaWQgewogICAgcHJvdG8gMiAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIyNAogICAgLy8gdGhpcy5vbmx5T3duZXIoKTsKICAgIGNhbGxzdWIgb25seU93bmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjYzCiAgICAvLyBvdGhlckJyaWRnZXMgPSBCb3hNYXA8Qnl0ZSwgU3RhdGljQnl0ZXM8MzI+Pih7IGtleVByZWZpeDogJ2InIH0pOwogICAgcHVzaGJ5dGVzICJiIgogICAgZnJhbWVfZGlnIC0yCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjI1CiAgICAvLyB0aGlzLm90aGVyQnJpZGdlcyhjaGFpbklkKS52YWx1ZSA9IGJyaWRnZUFkZHJlc3M7CiAgICBmcmFtZV9kaWcgLTEKICAgIGJveF9wdXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6OkJyaWRnZS5hZGRCcmlkZ2VUb2tlbihjaGFpbklkOiBieXRlcywgdG9rZW5BZGRyZXNzOiBieXRlcykgLT4gdm9pZDoKYWRkQnJpZGdlVG9rZW46CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIyOC0yMjkKICAgIC8vIEBhYmltZXRob2QoKQogICAgLy8gYWRkQnJpZGdlVG9rZW4oY2hhaW5JZDogQnl0ZSwgdG9rZW5BZGRyZXNzOiBTdGF0aWNCeXRlczwzMj4pOiB2b2lkIHsKICAgIHByb3RvIDIgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyMzAKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozMzMKICAgIC8vIHJldHVybiBjaGFpbklkLmJ5dGVzLmNvbmNhdCh0b2tlbi5ieXRlcyk7CiAgICBmcmFtZV9kaWcgLTIKICAgIGZyYW1lX2RpZyAtMQogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjY2CiAgICAvLyBvdGhlckJyaWRnZVRva2VucyA9IEJveE1hcDxieXRlcywgU3RhdGljQnl0ZXM+KHsga2V5UHJlZml4OiAndCcgfSk7CiAgICBieXRlYyA3IC8vICJ0IgogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIzMQogICAgLy8gdGhpcy5vdGhlckJyaWRnZVRva2Vucyh0aGlzLl9nZXRPdGhlckJyaWRnZVRva2Vuc0tleShjaGFpbklkLCB0b2tlbkFkZHJlc3MpKS52YWx1ZSA9IG5ldyBTdGF0aWNCeXRlcygpOwogICAgcHVzaGJ5dGVzIDB4CiAgICBib3hfcHV0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2UucmVtb3ZlQnJpZGdlVG9rZW4oY2hhaW5JZDogYnl0ZXMsIHRva2VuQWRkcmVzczogYnl0ZXMpIC0+IHZvaWQ6CnJlbW92ZUJyaWRnZVRva2VuOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyMzQtMjM1CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIC8vIHJlbW92ZUJyaWRnZVRva2VuKGNoYWluSWQ6IEJ5dGUsIHRva2VuQWRkcmVzczogU3RhdGljQnl0ZXM8MzI+KTogdm9pZCB7CiAgICBwcm90byAyIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjM2CiAgICAvLyB0aGlzLm9ubHlPd25lcigpOwogICAgY2FsbHN1YiBvbmx5T3duZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzMzCiAgICAvLyByZXR1cm4gY2hhaW5JZC5ieXRlcy5jb25jYXQodG9rZW4uYnl0ZXMpOwogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo2NgogICAgLy8gb3RoZXJCcmlkZ2VUb2tlbnMgPSBCb3hNYXA8Ynl0ZXMsIFN0YXRpY0J5dGVzPih7IGtleVByZWZpeDogJ3QnIH0pOwogICAgYnl0ZWMgNyAvLyAidCIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyMzcKICAgIC8vIHRoaXMub3RoZXJCcmlkZ2VUb2tlbnModGhpcy5fZ2V0T3RoZXJCcmlkZ2VUb2tlbnNLZXkoY2hhaW5JZCwgdG9rZW5BZGRyZXNzKSkuZGVsZXRlKCk7CiAgICBib3hfZGVsCiAgICBwb3AKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6OkJyaWRnZS53aXRoZHJhd0dhc1Rva2VucyhhbW91bnQ6IHVpbnQ2NCkgLT4gdm9pZDoKd2l0aGRyYXdHYXNUb2tlbnM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI0MC0yNDEKICAgIC8vIEBhYmltZXRob2QoKQogICAgLy8gd2l0aGRyYXdHYXNUb2tlbnMoYW1vdW50OiB1aW50NjQpOiB2b2lkIHsKICAgIHByb3RvIDEgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyNDIKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyNDMKICAgIC8vIHBheW1lbnQoeyBhbW91bnQ6IGFtb3VudCwgcmVjZWl2ZXI6IHRoaXMub3duZXIudmFsdWUuYnl0ZXMgfSkuc3VibWl0KCk7CiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czo2CiAgICAvLyBwcm90ZWN0ZWQgb3duZXIgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPigpOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzMgLy8gIm93bmVyIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGl0eG5fZmllbGQgUmVjZWl2ZXIKICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBBbW91bnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjQzCiAgICAvLyBwYXltZW50KHsgYW1vdW50OiBhbW91bnQsIHJlY2VpdmVyOiB0aGlzLm93bmVyLnZhbHVlLmJ5dGVzIH0pLnN1Ym1pdCgpOwogICAgaW50Y18xIC8vIDEKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6OkJyaWRnZS53aXRoZHJhd0JyaWRnaW5nRmVlSW5Ub2tlbnMoYXNzZXRJZDogdWludDY0KSAtPiB2b2lkOgp3aXRoZHJhd0JyaWRnaW5nRmVlSW5Ub2tlbnM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI0Ni0yNDcKICAgIC8vIEBhYmltZXRob2QoKQogICAgLy8gd2l0aGRyYXdCcmlkZ2luZ0ZlZUluVG9rZW5zKGFzc2V0SWQ6IHVpbnQ2NCk6IHZvaWQgewogICAgcHJvdG8gMSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI0OAogICAgLy8gdGhpcy5vbmx5T3duZXIoKTsKICAgIGNhbGxzdWIgb25seU93bmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI1MAogICAgLy8gY29uc3QgYXBwQWNjdDogQWNjb3VudCA9IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzOwogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyNTEKICAgIC8vIGNvbnN0IGJhbGFuY2UgPSBhc3NldC5iYWxhbmNlKGFwcEFjY3QpOwogICAgZnJhbWVfZGlnIC0xCiAgICBhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKICAgIHN3YXAKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBhc3NlcnQgLy8gYWNjb3VudCBvcHRlZCBpbnRvIGFzc2V0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI1MgogICAgLy8gaWYgKGJhbGFuY2UgPiBVaW50NjQoMCkpIHsKICAgIGJ6IHdpdGhkcmF3QnJpZGdpbmdGZWVJblRva2Vuc19hZnRlcl9pZl9lbHNlQDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjUzLTI1OAogICAgLy8gYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgIHNlbmRlcjogYXBwQWNjdCwKICAgIC8vICAgeGZlckFzc2V0OiBhc3NldCwKICAgIC8vICAgYXNzZXRBbW91bnQ6IGJhbGFuY2UsCiAgICAvLyAgIGFzc2V0UmVjZWl2ZXI6IHRoaXMub3duZXIudmFsdWUuYnl0ZXMKICAgIC8vIH0pLnN1Ym1pdCgpOwogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6NgogICAgLy8gcHJvdGVjdGVkIG93bmVyID0gR2xvYmFsU3RhdGU8QWRkcmVzcz4oKTsKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18zIC8vICJvd25lciIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIGZyYW1lX2RpZyAxCiAgICBpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICBmcmFtZV9kaWcgMAogICAgaXR4bl9maWVsZCBTZW5kZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjUzLTI1OAogICAgLy8gYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgIHNlbmRlcjogYXBwQWNjdCwKICAgIC8vICAgeGZlckFzc2V0OiBhc3NldCwKICAgIC8vICAgYXNzZXRBbW91bnQ6IGJhbGFuY2UsCiAgICAvLyAgIGFzc2V0UmVjZWl2ZXI6IHRoaXMub3duZXIudmFsdWUuYnl0ZXMKICAgIC8vIH0pLnN1Ym1pdCgpOwogICAgaW50Y18zIC8vIDQKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKCndpdGhkcmF3QnJpZGdpbmdGZWVJblRva2Vuc19hZnRlcl9pZl9lbHNlQDM6CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2UuZ2V0QnJpZGdpbmdDb3N0SW5Ub2tlbnMoZGVzdGluYXRpb25DaGFpbklkOiBieXRlcywgdG9rZW5JZDogdWludDY0KSAtPiB1aW50NjQ6CmdldEJyaWRnaW5nQ29zdEluVG9rZW5zOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyNjItMjY2CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIC8vIGdldEJyaWRnaW5nQ29zdEluVG9rZW5zKAogICAgLy8gICBkZXN0aW5hdGlvbkNoYWluSWQ6IEJ5dGUsCiAgICAvLyAgIHRva2VuSWQ6IHVpbnQ2NCwKICAgIC8vICk6IHVpbnQ2NCB7CiAgICBwcm90byAyIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjY3CiAgICAvLyBjb25zdCBicmlkZ2VHYXNBbW91bnQ6IHVpbnQ2NCA9IHRoaXMuZ2V0R2FzVXNhZ2UoZGVzdGluYXRpb25DaGFpbklkKTsKICAgIGZyYW1lX2RpZyAtMgogICAgY2FsbHN1YiBnZXRHYXNVc2FnZQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyNjgtMjcxCiAgICAvLyBjb25zdCBtZXNzZW5nZXJHYXNBbW91bnQ6IHVpbnQ2NCA9IGFiaUNhbGwoTWVzc2VuZ2VyLnByb3RvdHlwZS5nZXRHYXNVc2FnZSwgewogICAgLy8gICBhcHBJZDogdGhpcy5tZXNzZW5nZXIudmFsdWUuaWQsCiAgICAvLyAgIGFyZ3M6IFtkZXN0aW5hdGlvbkNoYWluSWRdLAogICAgLy8gfSkucmV0dXJuVmFsdWU7CiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjU3CiAgICAvLyBtZXNzZW5nZXIgPSBHbG9iYWxTdGF0ZTxBcHBsaWNhdGlvbj4oKTsKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18yIC8vICJtZXNzZW5nZXIiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyNjgtMjcxCiAgICAvLyBjb25zdCBtZXNzZW5nZXJHYXNBbW91bnQ6IHVpbnQ2NCA9IGFiaUNhbGwoTWVzc2VuZ2VyLnByb3RvdHlwZS5nZXRHYXNVc2FnZSwgewogICAgLy8gICBhcHBJZDogdGhpcy5tZXNzZW5nZXIudmFsdWUuaWQsCiAgICAvLyAgIGFyZ3M6IFtkZXN0aW5hdGlvbkNoYWluSWRdLAogICAgLy8gfSkucmV0dXJuVmFsdWU7CiAgICBieXRlYyAxNCAvLyBtZXRob2QgImdldEdhc1VzYWdlKGJ5dGUpdWludDY0IgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGZyYW1lX2RpZyAtMgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgaW50Y18yIC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBCeXRlcyBoYXMgdmFsaWQgcHJlZml4CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI3My0yNzYKICAgIC8vIHJldHVybiBhYmlDYWxsKEdhc09yYWNsZS5wcm90b3R5cGUuZ2V0VHJhbnNhY3Rpb25HYXNDb3N0SW5VU0QsIHsKICAgIC8vICAgYXBwSWQ6IHRoaXMuZ2FzT3JhY2xlLnZhbHVlLmlkLAogICAgLy8gICBhcmdzOiBbZGVzdGluYXRpb25DaGFpbklkLCBicmlkZ2VHYXNBbW91bnQgKyBtZXNzZW5nZXJHYXNBbW91bnRdLAogICAgLy8gfSkucmV0dXJuVmFsdWUgLyB0aGlzLmZyb21HYXNPcmFjbGVTY2FsaW5nRmFjdG9yKHRva2VuSWQpLnZhbHVlOwogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czo5CiAgICAvLyBnYXNPcmFjbGUgPSBHbG9iYWxTdGF0ZTxBcHBsaWNhdGlvbj4oKTsKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA0IC8vICJnYXNPcmFjbGUiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyNzUKICAgIC8vIGFyZ3M6IFtkZXN0aW5hdGlvbkNoYWluSWQsIGJyaWRnZUdhc0Ftb3VudCArIG1lc3Nlbmdlckdhc0Ftb3VudF0sCiAgICBjb3ZlciAyCiAgICArCiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI3My0yNzYKICAgIC8vIHJldHVybiBhYmlDYWxsKEdhc09yYWNsZS5wcm90b3R5cGUuZ2V0VHJhbnNhY3Rpb25HYXNDb3N0SW5VU0QsIHsKICAgIC8vICAgYXBwSWQ6IHRoaXMuZ2FzT3JhY2xlLnZhbHVlLmlkLAogICAgLy8gICBhcmdzOiBbZGVzdGluYXRpb25DaGFpbklkLCBicmlkZ2VHYXNBbW91bnQgKyBtZXNzZW5nZXJHYXNBbW91bnRdLAogICAgLy8gfSkucmV0dXJuVmFsdWUgLyB0aGlzLmZyb21HYXNPcmFjbGVTY2FsaW5nRmFjdG9yKHRva2VuSWQpLnZhbHVlOwogICAgcHVzaGJ5dGVzIDB4N2JmN2Q1MGMgLy8gbWV0aG9kICJnZXRUcmFuc2FjdGlvbkdhc0Nvc3RJblVTRChieXRlLHVpbnQ2NCl1aW50NjQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgZnJhbWVfZGlnIC0yCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgaW50Y18yIC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBCeXRlcyBoYXMgdmFsaWQgcHJlZml4CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI3NgogICAgLy8gfSkucmV0dXJuVmFsdWUgLyB0aGlzLmZyb21HYXNPcmFjbGVTY2FsaW5nRmFjdG9yKHRva2VuSWQpLnZhbHVlOwogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjMzCiAgICAvLyBwcm90ZWN0ZWQgZnJvbUdhc09yYWNsZVNjYWxpbmdGYWN0b3IgPSBCb3hNYXA8dWludDY0LCB1aW50NjQ+KHsga2V5UHJlZml4OiAnZScgfSk7CiAgICBwdXNoYnl0ZXMgImUiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6Mjc2CiAgICAvLyB9KS5yZXR1cm5WYWx1ZSAvIHRoaXMuZnJvbUdhc09yYWNsZVNjYWxpbmdGYWN0b3IodG9rZW5JZCkudmFsdWU7CiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBidG9pCiAgICBzd2FwCiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyNzMtMjc2CiAgICAvLyByZXR1cm4gYWJpQ2FsbChHYXNPcmFjbGUucHJvdG90eXBlLmdldFRyYW5zYWN0aW9uR2FzQ29zdEluVVNELCB7CiAgICAvLyAgIGFwcElkOiB0aGlzLmdhc09yYWNsZS52YWx1ZS5pZCwKICAgIC8vICAgYXJnczogW2Rlc3RpbmF0aW9uQ2hhaW5JZCwgYnJpZGdlR2FzQW1vdW50ICsgbWVzc2VuZ2VyR2FzQW1vdW50XSwKICAgIC8vIH0pLnJldHVyblZhbHVlIC8gdGhpcy5mcm9tR2FzT3JhY2xlU2NhbGluZ0ZhY3Rvcih0b2tlbklkKS52YWx1ZTsKICAgIC8KICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6OkJyaWRnZS5oYXNoTWVzc2FnZShhbW91bnQ6IHVpbnQ2NCwgcmVjaXBpZW50OiBieXRlcywgc291cmNlQ2hhaW5JZDogYnl0ZXMsIGRlc3RpbmF0aW9uQ2hhaW5JZDogYnl0ZXMsIHJlY2VpdmVUb2tlbjogYnl0ZXMsIG5vbmNlOiBieXRlcykgLT4gYnl0ZXM6Cmhhc2hNZXNzYWdlOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyNzktMjg3CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIC8vIGhhc2hNZXNzYWdlKAogICAgLy8gICBhbW91bnQ6IHVpbnQ2NCwKICAgIC8vICAgcmVjaXBpZW50OiBTdGF0aWNCeXRlczwzMj4sCiAgICAvLyAgIHNvdXJjZUNoYWluSWQ6IEJ5dGUsCiAgICAvLyAgIGRlc3RpbmF0aW9uQ2hhaW5JZDogQnl0ZSwKICAgIC8vICAgcmVjZWl2ZVRva2VuOiBTdGF0aWNCeXRlczwzMj4sCiAgICAvLyAgIG5vbmNlOiBTdGF0aWNCeXRlczwzMj4sCiAgICAvLyApOiBTdGF0aWNCeXRlczwzMj4gewogICAgcHJvdG8gNiAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI4OAogICAgLy8gY29uc3QgYW1vdW50MzIgPSBiemVybygyNCkuY29uY2F0KG9wLml0b2IoYW1vdW50KSk7CiAgICBwdXNoaW50IDI0IC8vIDI0CiAgICBiemVybwogICAgZnJhbWVfZGlnIC02CiAgICBpdG9iCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6Mjg5CiAgICAvLyBjb25zdCBzb3VyY2VDaGFpbklkMzIgPSBiemVybygzMSkuY29uY2F0KHNvdXJjZUNoYWluSWQuYnl0ZXMpOwogICAgcHVzaGludCAzMSAvLyAzMQogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtNAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI5MC0yOTEKICAgIC8vIGNvbnN0IHBhY2tlZCA9IGFtb3VudDMyCiAgICAvLyAgIC5jb25jYXQocmVjaXBpZW50LmJ5dGVzKQogICAgc3dhcAogICAgZnJhbWVfZGlnIC01CiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjkwLTI5MgogICAgLy8gY29uc3QgcGFja2VkID0gYW1vdW50MzIKICAgIC8vICAgLmNvbmNhdChyZWNpcGllbnQuYnl0ZXMpCiAgICAvLyAgIC5jb25jYXQoc291cmNlQ2hhaW5JZDMyKQogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI5MC0yOTMKICAgIC8vIGNvbnN0IHBhY2tlZCA9IGFtb3VudDMyCiAgICAvLyAgIC5jb25jYXQocmVjaXBpZW50LmJ5dGVzKQogICAgLy8gICAuY29uY2F0KHNvdXJjZUNoYWluSWQzMikKICAgIC8vICAgLmNvbmNhdChyZWNlaXZlVG9rZW4uYnl0ZXMpCiAgICBmcmFtZV9kaWcgLTIKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyOTAtMjk0CiAgICAvLyBjb25zdCBwYWNrZWQgPSBhbW91bnQzMgogICAgLy8gICAuY29uY2F0KHJlY2lwaWVudC5ieXRlcykKICAgIC8vICAgLmNvbmNhdChzb3VyY2VDaGFpbklkMzIpCiAgICAvLyAgIC5jb25jYXQocmVjZWl2ZVRva2VuLmJ5dGVzKQogICAgLy8gICAuY29uY2F0KG5vbmNlLmJ5dGVzKQogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NTIKICAgIC8vIGNvbnN0IEFMTEJSSURHRV9NRVNTRU5HRVIgPSBuZXcgQnl0ZSgxKTsKICAgIGJ5dGVjIDExIC8vIDB4MDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjkwLTI5NQogICAgLy8gY29uc3QgcGFja2VkID0gYW1vdW50MzIKICAgIC8vICAgLmNvbmNhdChyZWNpcGllbnQuYnl0ZXMpCiAgICAvLyAgIC5jb25jYXQoc291cmNlQ2hhaW5JZDMyKQogICAgLy8gICAuY29uY2F0KHJlY2VpdmVUb2tlbi5ieXRlcykKICAgIC8vICAgLmNvbmNhdChub25jZS5ieXRlcykKICAgIC8vICAgLmNvbmNhdChBTExCUklER0VfTUVTU0VOR0VSLmJ5dGVzKTsKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyOTcKICAgIC8vIGNvbnN0IGhhc2ggPSBvcC5rZWNjYWsyNTYocGFja2VkKTsgLy8gMzIgYnl0ZXMKICAgIGtlY2NhazI1NgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozMDAKICAgIC8vIGNvbnN0IHdpdGhTcmMgPSBvcC5zZXRCeXRlKGhhc2gsIDAsIG9wLmJ0b2koc291cmNlQ2hhaW5JZC5ieXRlcykpOwogICAgZnJhbWVfZGlnIC00CiAgICBidG9pCiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgc2V0Ynl0ZQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozMDEKICAgIC8vIGNvbnN0IHdpdGhEc3QgPSBvcC5zZXRCeXRlKHdpdGhTcmMsIDEsIG9wLmJ0b2koZGVzdGluYXRpb25DaGFpbklkLmJ5dGVzKSk7CiAgICBmcmFtZV9kaWcgLTMKICAgIGJ0b2kKICAgIGludGNfMSAvLyAxCiAgICBzd2FwCiAgICBzZXRieXRlCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMwMwogICAgLy8gcmV0dXJuIG5ldyBTdGF0aWNCeXRlczwzMj4od2l0aERzdCk7CiAgICBkdXAKICAgIGxlbgogICAgcHVzaGludCAzMiAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIHNpemUKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6OkJyaWRnZS5pc090aGVyQnJpZGdlVG9rZW5TdXBwb3J0ZWQoY2hhaW5JZDogYnl0ZXMsIHRva2VuOiBieXRlcykgLT4gdWludDY0Ogppc090aGVyQnJpZGdlVG9rZW5TdXBwb3J0ZWQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMwNi0zMDcKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgLy8gaXNPdGhlckJyaWRnZVRva2VuU3VwcG9ydGVkKGNoYWluSWQ6IEJ5dGUsIHRva2VuOiBTdGF0aWNCeXRlczwzMj4pOiBib29sZWFuIHsKICAgIHByb3RvIDIgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozMzMKICAgIC8vIHJldHVybiBjaGFpbklkLmJ5dGVzLmNvbmNhdCh0b2tlbi5ieXRlcyk7CiAgICBmcmFtZV9kaWcgLTIKICAgIGZyYW1lX2RpZyAtMQogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjY2CiAgICAvLyBvdGhlckJyaWRnZVRva2VucyA9IEJveE1hcDxieXRlcywgU3RhdGljQnl0ZXM+KHsga2V5UHJlZml4OiAndCcgfSk7CiAgICBieXRlYyA3IC8vICJ0IgogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMwOAogICAgLy8gcmV0dXJuIHRoaXMub3RoZXJCcmlkZ2VUb2tlbnModGhpcy5fZ2V0T3RoZXJCcmlkZ2VUb2tlbnNLZXkoY2hhaW5JZCwgdG9rZW4pKS5leGlzdHM7CiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6OkJyaWRnZS5nZXRUcmFuc2FjdGlvbkNvc3QoY2hhaW5JZDogYnl0ZXMpIC0+IHVpbnQ2NDoKZ2V0VHJhbnNhY3Rpb25Db3N0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozMTEtMzEyCiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIC8vIGdldFRyYW5zYWN0aW9uQ29zdChjaGFpbklkOiBCeXRlKTogdWludDY0IHsKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozMTMKICAgIC8vIHJldHVybiB0aGlzLmdldFRyYW5zYWN0aW9uUmVsYXllckNvc3QoY2hhaW5JZCkgKyB0aGlzLmdldFNlbmRUcmFuc2FjdGlvblN0b3JhZ2VDb3N0KCk7CiAgICBmcmFtZV9kaWcgLTEKICAgIGNhbGxzdWIgZ2V0VHJhbnNhY3Rpb25SZWxheWVyQ29zdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozMjcKICAgIC8vIHJldHVybiAxNTcwMDsKICAgIGludGMgNCAvLyAxNTcwMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozMTMKICAgIC8vIHJldHVybiB0aGlzLmdldFRyYW5zYWN0aW9uUmVsYXllckNvc3QoY2hhaW5JZCkgKyB0aGlzLmdldFNlbmRUcmFuc2FjdGlvblN0b3JhZ2VDb3N0KCk7CiAgICArCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjpSb3V0ZXIuc3dhcCh0b2tlbklkOiB1aW50NjQsIHJlY2VpdmVUb2tlbklkOiB1aW50NjQsIHJlY2lwaWVudDogYnl0ZXMsIHJlY2VpdmVBbW91bnRNaW46IHVpbnQ2NCkgLT4gdm9pZDoKc3dhcDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6NzgtODQKICAgIC8vIEBhYmltZXRob2QoKQogICAgLy8gc3dhcCgKICAgIC8vICAgdG9rZW5JZDogdWludDY0LAogICAgLy8gICByZWNlaXZlVG9rZW5JZDogdWludDY0LAogICAgLy8gICByZWNpcGllbnQ6IEFkZHJlc3MsCiAgICAvLyAgIHJlY2VpdmVBbW91bnRNaW46IHVpbnQ2NCwKICAgIC8vICk6IHZvaWQgewogICAgcHJvdG8gNCAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjUwCiAgICAvLyBjYW5Td2FwID0gR2xvYmFsU3RhdGU8Ym9vbGVhbj4oeyBpbml0aWFsVmFsdWU6IHRydWUgfSk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAiY2FuU3dhcCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjYxCiAgICAvLyBhc3NlcnQodGhpcy5jYW5Td2FwLnZhbHVlLCAnUm91dGVyOiBzd2FwIHByb2hpYml0ZWQnKTsKICAgIGFzc2VydCAvLyBSb3V0ZXI6IHN3YXAgcHJvaGliaXRlZAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo4NgogICAgLy8gY29uc3Qgc2VuZGVyID0gbmV3IEFkZHJlc3MoVHhuLnNlbmRlcik7CiAgICB0eG4gU2VuZGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjg3CiAgICAvLyBjb25zdCBhbW91bnQgPSBnZXRQcmV2QXNzZXRQYXkodG9rZW5JZCk7CiAgICBmcmFtZV9kaWcgLTQKICAgIGNhbGxzdWIgZ2V0UHJldkFzc2V0UGF5CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjg4CiAgICAvLyBjb25zdCB2VXNkQW1vdW50ID0gdGhpcy5zZW5kQW5kU3dhcFRvVlVzZCh0b2tlbklkLCBzZW5kZXIsIGFtb3VudCk7CiAgICBmcmFtZV9kaWcgLTQKICAgIGRpZyAyCiAgICBkaWcgMgogICAgY2FsbHN1YiBzZW5kQW5kU3dhcFRvVlVzZAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo4OQogICAgLy8gY29uc3QgcmVjZWl2ZWRBbW91bnQgPSB0aGlzLnJlY2VpdmVBbmRTd2FwRnJvbVZVc2QocmVjZWl2ZVRva2VuSWQsIHJlY2lwaWVudCwgdlVzZEFtb3VudCwgcmVjZWl2ZUFtb3VudE1pbik7CiAgICBmcmFtZV9kaWcgLTMKICAgIGZyYW1lX2RpZyAtMgogICAgdW5jb3ZlciAyCiAgICBmcmFtZV9kaWcgLTEKICAgIGNhbGxzdWIgcmVjZWl2ZUFuZFN3YXBGcm9tVlVzZAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo5MAogICAgLy8gZW1pdDxTd2FwcGVkPih7IHNlbmRlciwgcmVjaXBpZW50LCB0b2tlbklkLCByZWNlaXZlVG9rZW5JZCwgYW1vdW50LCByZWNlaXZlZEFtb3VudCB9KTsKICAgIGZyYW1lX2RpZyAtNAogICAgaXRvYgogICAgZnJhbWVfZGlnIC0zCiAgICBpdG9iCiAgICB1bmNvdmVyIDMKICAgIGl0b2IKICAgIHVuY292ZXIgMwogICAgaXRvYgogICAgdW5jb3ZlciA0CiAgICBmcmFtZV9kaWcgLTIKICAgIGNvbmNhdAogICAgdW5jb3ZlciA0CiAgICBjb25jYXQKICAgIHVuY292ZXIgMwogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBwdXNoYnl0ZXMgMHgxNTQwNDRiMyAvLyBtZXRob2QgIlN3YXBwZWQoYWRkcmVzcyxhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo6Um91dGVyLmFkZFBvb2wocG9vbElkOiB1aW50NjQsIHRva2VuSWQ6IHVpbnQ2NCkgLT4gdm9pZDoKYWRkUG9vbDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTAwLTEwMQogICAgLy8gQGFiaW1ldGhvZCgpCiAgICAvLyBhZGRQb29sKHBvb2xJZDogdWludDY0LCB0b2tlbklkOiB1aW50NjQpOiB2b2lkIHsKICAgIHByb3RvIDIgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxMDIKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxMDMKICAgIC8vIHRoaXMucG9vbHModG9rZW5JZCkudmFsdWUgPSBwb29sSWQ7CiAgICBmcmFtZV9kaWcgLTEKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MzEKICAgIC8vIHBvb2xzID0gQm94TWFwPHVpbnQ2NCwgdWludDY0Pih7IGtleVByZWZpeDogJ3AnIH0pOwogICAgYnl0ZWMgOCAvLyAicCIKICAgIGRpZyAxCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTAzCiAgICAvLyB0aGlzLnBvb2xzKHRva2VuSWQpLnZhbHVlID0gcG9vbElkOwogICAgZnJhbWVfZGlnIC0yCiAgICBpdG9iCiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjEwNQogICAgLy8gY29uc3QgdG9rZW5EZWNpbWFscyA9IGFzc2V0LmRlY2ltYWxzOwogICAgZnJhbWVfZGlnIC0xCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0RGVjaW1hbHMKICAgIGFzc2VydCAvLyBhc3NldCBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLW9yYWNsZS5jb250cmFjdC5hbGdvLnRzOjgKICAgIC8vIGV4cG9ydCBjb25zdCBPUkFDTEVfUFJJQ0VfUFJFQ0lTSU9OOiB1aW50NjQgPSA5OwogICAgcHVzaGludCA5IC8vIDkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTA2CiAgICAvLyB0aGlzLmJyaWRnaW5nRmVlQ29udmVyc2lvblNjYWxpbmdGYWN0b3IodG9rZW5JZCkudmFsdWUgPSAxMCAqKiAoT1JBQ0xFX1BSSUNFX1BSRUNJU0lPTiAtIHRva2VuRGVjaW1hbHMgKyBDSEFJTl9QUkVDSVNJT04pOwogICAgc3dhcAogICAgLQogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy1vcmFjbGUuY29udHJhY3QuYWxnby50czo3CiAgICAvLyBleHBvcnQgY29uc3QgQ0hBSU5fUFJFQ0lTSU9OOiB1aW50NjQgPSA2OwogICAgaW50Y18yIC8vIDYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTA2CiAgICAvLyB0aGlzLmJyaWRnaW5nRmVlQ29udmVyc2lvblNjYWxpbmdGYWN0b3IodG9rZW5JZCkudmFsdWUgPSAxMCAqKiAoT1JBQ0xFX1BSSUNFX1BSRUNJU0lPTiAtIHRva2VuRGVjaW1hbHMgKyBDSEFJTl9QUkVDSVNJT04pOwogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czozNgogICAgLy8gcHJvdGVjdGVkIGJyaWRnaW5nRmVlQ29udmVyc2lvblNjYWxpbmdGYWN0b3IgPSBCb3hNYXA8dWludDY0LCB1aW50NjQ+KHsga2V5UHJlZml4OiAnZicgfSk7CiAgICBwdXNoYnl0ZXMgImYiCiAgICBkaWcgMwogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjEwNgogICAgLy8gdGhpcy5icmlkZ2luZ0ZlZUNvbnZlcnNpb25TY2FsaW5nRmFjdG9yKHRva2VuSWQpLnZhbHVlID0gMTAgKiogKE9SQUNMRV9QUklDRV9QUkVDSVNJT04gLSB0b2tlbkRlY2ltYWxzICsgQ0hBSU5fUFJFQ0lTSU9OKTsKICAgIHB1c2hpbnQgMTAgLy8gMTAKICAgIHVuY292ZXIgMgogICAgZXhwCiAgICBpdG9iCiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjMzCiAgICAvLyBwcm90ZWN0ZWQgZnJvbUdhc09yYWNsZVNjYWxpbmdGYWN0b3IgPSBCb3hNYXA8dWludDY0LCB1aW50NjQ+KHsga2V5UHJlZml4OiAnZScgfSk7CiAgICBwdXNoYnl0ZXMgImUiCiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxMDcKICAgIC8vIHRoaXMuZnJvbUdhc09yYWNsZVNjYWxpbmdGYWN0b3IodG9rZW5JZCkudmFsdWUgPSAxMCAqKiAoT1JBQ0xFX1BSSUNFX1BSRUNJU0lPTiAtIHRva2VuRGVjaW1hbHMpOwogICAgcHVzaGludCAxMCAvLyAxMAogICAgdW5jb3ZlciAyCiAgICBleHAKICAgIGl0b2IKICAgIGJveF9wdXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6OlJvdXRlci5yZW1vdmVQb29sKHRva2VuSWQ6IHVpbnQ2NCkgLT4gdm9pZDoKcmVtb3ZlUG9vbDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTEwLTExMQogICAgLy8gQGFiaW1ldGhvZCgpCiAgICAvLyByZW1vdmVQb29sKHRva2VuSWQ6IHVpbnQ2NCk6IHZvaWQgewogICAgcHJvdG8gMSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjExMgogICAgLy8gdGhpcy5vbmx5T3duZXIoKTsKICAgIGNhbGxzdWIgb25seU93bmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjExMwogICAgLy8gdGhpcy5wb29scyh0b2tlbklkKS5kZWxldGUoKTsKICAgIGZyYW1lX2RpZyAtMQogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czozMQogICAgLy8gcG9vbHMgPSBCb3hNYXA8dWludDY0LCB1aW50NjQ+KHsga2V5UHJlZml4OiAncCcgfSk7CiAgICBieXRlYyA4IC8vICJwIgogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjExMwogICAgLy8gdGhpcy5wb29scyh0b2tlbklkKS5kZWxldGUoKTsKICAgIGJveF9kZWwKICAgIHBvcAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo6Um91dGVyLnN0b3BTd2FwKCkgLT4gdm9pZDoKc3RvcFN3YXA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjY4CiAgICAvLyBhc3NlcnQob3AuVHhuLnNlbmRlci5ieXRlcyA9PT0gdGhpcy5zdG9wQXV0aG9yaXR5LnZhbHVlLmJ5dGVzLCAnUm91dGVyOiBpcyBub3Qgc3RvcEF1dGhvcml0eScpOwogICAgdHhuIFNlbmRlcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czozOQogICAgLy8gcHJpdmF0ZSBzdG9wQXV0aG9yaXR5ID0gR2xvYmFsU3RhdGU8QWRkcmVzcz4oKTsvLyBjYW4gcmVzdHJpY3QgZGVwb3NpdCBvciB3aXRoZHJhdyBvcGVyYXRpb25zCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMTAgLy8gInN0b3BBdXRob3JpdHkiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo2OAogICAgLy8gYXNzZXJ0KG9wLlR4bi5zZW5kZXIuYnl0ZXMgPT09IHRoaXMuc3RvcEF1dGhvcml0eS52YWx1ZS5ieXRlcywgJ1JvdXRlcjogaXMgbm90IHN0b3BBdXRob3JpdHknKTsKICAgID09CiAgICBhc3NlcnQgLy8gUm91dGVyOiBpcyBub3Qgc3RvcEF1dGhvcml0eQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo1MAogICAgLy8gY2FuU3dhcCA9IEdsb2JhbFN0YXRlPGJvb2xlYW4+KHsgaW5pdGlhbFZhbHVlOiB0cnVlIH0pOwogICAgYnl0ZWNfMSAvLyAiY2FuU3dhcCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTIyCiAgICAvLyB0aGlzLmNhblN3YXAudmFsdWUgPSBmYWxzZTsKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo6Um91dGVyLnN0YXJ0U3dhcCgpIC0+IHZvaWQ6CnN0YXJ0U3dhcDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTMwCiAgICAvLyB0aGlzLm9ubHlPd25lcigpOwogICAgY2FsbHN1YiBvbmx5T3duZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6NTAKICAgIC8vIGNhblN3YXAgPSBHbG9iYWxTdGF0ZTxib29sZWFuPih7IGluaXRpYWxWYWx1ZTogdHJ1ZSB9KTsKICAgIGJ5dGVjXzEgLy8gImNhblN3YXAiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjEzMQogICAgLy8gdGhpcy5jYW5Td2FwLnZhbHVlID0gdHJ1ZTsKICAgIGludGNfMSAvLyAxCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo6Um91dGVyLnNldFN0b3BBdXRob3JpdHkoc3RvcEF1dGhvcml0eTogYnl0ZXMpIC0+IHZvaWQ6CnNldFN0b3BBdXRob3JpdHk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjEzNy0xMzgKICAgIC8vIEBhYmltZXRob2QoKQogICAgLy8gc2V0U3RvcEF1dGhvcml0eShzdG9wQXV0aG9yaXR5OiBBZGRyZXNzKTogdm9pZCB7CiAgICBwcm90byAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTM5CiAgICAvLyB0aGlzLm9ubHlPd25lcigpOwogICAgY2FsbHN1YiBvbmx5T3duZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MzkKICAgIC8vIHByaXZhdGUgc3RvcEF1dGhvcml0eSA9IEdsb2JhbFN0YXRlPEFkZHJlc3M+KCk7Ly8gY2FuIHJlc3RyaWN0IGRlcG9zaXQgb3Igd2l0aGRyYXcgb3BlcmF0aW9ucwogICAgYnl0ZWMgMTAgLy8gInN0b3BBdXRob3JpdHkiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE0MAogICAgLy8gdGhpcy5zdG9wQXV0aG9yaXR5LnZhbHVlID0gc3RvcEF1dGhvcml0eTsKICAgIGZyYW1lX2RpZyAtMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6OlJvdXRlci5zZXRSZWJhbGFuY2VyKHJlYmFsYW5jZXI6IGJ5dGVzKSAtPiB2b2lkOgpzZXRSZWJhbGFuY2VyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNDYtMTQ3CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIC8vIHNldFJlYmFsYW5jZXIocmViYWxhbmNlcjogQWRkcmVzcyk6IHZvaWQgewogICAgcHJvdG8gMSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE0OAogICAgLy8gdGhpcy5vbmx5T3duZXIoKTsKICAgIGNhbGxzdWIgb25seU93bmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjQ5CiAgICAvLyBwcml2YXRlIHJlYmFsYW5jZXIgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPih7IGluaXRpYWxWYWx1ZTogbmV3IEFkZHJlc3MoYnplcm8oMCkpIH0pOy8vIGNhbiByZXN0cmljdCBkZXBvc2l0IG9yIHdpdGhkcmF3IG9wZXJhdGlvbnMKICAgIGJ5dGVjIDYgLy8gInJlYmFsYW5jZXIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE0OQogICAgLy8gdGhpcy5yZWJhbGFuY2VyLnZhbHVlID0gcmViYWxhbmNlcjsKICAgIGZyYW1lX2RpZyAtMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6OlJvdXRlci5yZWNlaXZlQW5kU3dhcEZyb21WVXNkKHRva2VuSWQ6IHVpbnQ2NCwgcmVjaXBpZW50OiBieXRlcywgdlVzZEFtb3VudDogdWludDY0LCByZWNlaXZlQW1vdW50TWluOiB1aW50NjQpIC0+IHVpbnQ2NDoKcmVjZWl2ZUFuZFN3YXBGcm9tVlVzZDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTUyLTE1NwogICAgLy8gcHJvdGVjdGVkIHJlY2VpdmVBbmRTd2FwRnJvbVZVc2QoCiAgICAvLyAgIHRva2VuSWQ6IHVpbnQ2NCwKICAgIC8vICAgcmVjaXBpZW50OiBBZGRyZXNzLAogICAgLy8gICB2VXNkQW1vdW50OiB1aW50NjQsCiAgICAvLyAgIHJlY2VpdmVBbW91bnRNaW46IHVpbnQ2NCwKICAgIC8vICk6IHVpbnQ2NCB7CiAgICBwcm90byA0IDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTU4CiAgICAvLyBhc3NlcnQodGhpcy5wb29scyh0b2tlbklkKS5leGlzdHMsICdSb3V0ZXI6IG5vIHJlY2VpdmUgcG9vbCcpOwogICAgZnJhbWVfZGlnIC00CiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjMxCiAgICAvLyBwb29scyA9IEJveE1hcDx1aW50NjQsIHVpbnQ2ND4oeyBrZXlQcmVmaXg6ICdwJyB9KTsKICAgIGJ5dGVjIDggLy8gInAiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTU4CiAgICAvLyBhc3NlcnQodGhpcy5wb29scyh0b2tlbklkKS5leGlzdHMsICdSb3V0ZXI6IG5vIHJlY2VpdmUgcG9vbCcpOwogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBSb3V0ZXI6IG5vIHJlY2VpdmUgcG9vbAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNTkKICAgIC8vIGNvbnN0IHBvb2xJZCA9IHRoaXMucG9vbHModG9rZW5JZCkudmFsdWU7CiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBidG9pCiAgICBzd2FwCiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNjAtMTYzCiAgICAvLyByZXR1cm4gYWJpQ2FsbChQb29sLnByb3RvdHlwZS5zd2FwRnJvbVZVc2QsIHsKICAgIC8vICAgYXBwSWQ6IHBvb2xJZCwKICAgIC8vICAgYXJnczogW3JlY2lwaWVudCwgdlVzZEFtb3VudCwgcmVjZWl2ZUFtb3VudE1pbiwgcmVjaXBpZW50ID09PSB0aGlzLnJlYmFsYW5jZXIudmFsdWVdLAogICAgLy8gfSkucmV0dXJuVmFsdWU7CiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE2MgogICAgLy8gYXJnczogW3JlY2lwaWVudCwgdlVzZEFtb3VudCwgcmVjZWl2ZUFtb3VudE1pbiwgcmVjaXBpZW50ID09PSB0aGlzLnJlYmFsYW5jZXIudmFsdWVdLAogICAgZnJhbWVfZGlnIC0yCiAgICBpdG9iCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6NDkKICAgIC8vIHByaXZhdGUgcmViYWxhbmNlciA9IEdsb2JhbFN0YXRlPEFkZHJlc3M+KHsgaW5pdGlhbFZhbHVlOiBuZXcgQWRkcmVzcyhiemVybygwKSkgfSk7Ly8gY2FuIHJlc3RyaWN0IGRlcG9zaXQgb3Igd2l0aGRyYXcgb3BlcmF0aW9ucwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDYgLy8gInJlYmFsYW5jZXIiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNjIKICAgIC8vIGFyZ3M6IFtyZWNpcGllbnQsIHZVc2RBbW91bnQsIHJlY2VpdmVBbW91bnRNaW4sIHJlY2lwaWVudCA9PT0gdGhpcy5yZWJhbGFuY2VyLnZhbHVlXSwKICAgIGZyYW1lX2RpZyAtMwogICAgPT0KICAgIGJ5dGVjIDkgLy8gMHgwMAogICAgaW50Y18wIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE2MC0xNjMKICAgIC8vIHJldHVybiBhYmlDYWxsKFBvb2wucHJvdG90eXBlLnN3YXBGcm9tVlVzZCwgewogICAgLy8gICBhcHBJZDogcG9vbElkLAogICAgLy8gICBhcmdzOiBbcmVjaXBpZW50LCB2VXNkQW1vdW50LCByZWNlaXZlQW1vdW50TWluLCByZWNpcGllbnQgPT09IHRoaXMucmViYWxhbmNlci52YWx1ZV0sCiAgICAvLyB9KS5yZXR1cm5WYWx1ZTsKICAgIHB1c2hieXRlcyAweDBkMWI0YzA2IC8vIG1ldGhvZCAic3dhcEZyb21WVXNkKGFkZHJlc3MsdWludDY0LHVpbnQ2NCxib29sKXVpbnQ2NCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBmcmFtZV9kaWcgLTMKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICB1bmNvdmVyIDIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBzd2FwCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgaW50Y18yIC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBCeXRlcyBoYXMgdmFsaWQgcHJlZml4CiAgICBidG9pCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjpSb3V0ZXIuc2VuZEFuZFN3YXBUb1ZVc2QodG9rZW5JZDogdWludDY0LCB1c2VyOiBieXRlcywgYW1vdW50OiB1aW50NjQpIC0+IHVpbnQ2NDoKc2VuZEFuZFN3YXBUb1ZVc2Q6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE2NwogICAgLy8gcHJvdGVjdGVkIHNlbmRBbmRTd2FwVG9WVXNkKHRva2VuSWQ6IHVpbnQ2NCwgdXNlcjogQWRkcmVzcywgYW1vdW50OiB1aW50NjQpOiB1aW50NjQgewogICAgcHJvdG8gMyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE2OAogICAgLy8gYXNzZXJ0KHRoaXMucG9vbHModG9rZW5JZCkuZXhpc3RzLCAnUm91dGVyOiBubyBwb29sJyk7CiAgICBmcmFtZV9kaWcgLTMKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MzEKICAgIC8vIHBvb2xzID0gQm94TWFwPHVpbnQ2NCwgdWludDY0Pih7IGtleVByZWZpeDogJ3AnIH0pOwogICAgYnl0ZWMgOCAvLyAicCIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNjgKICAgIC8vIGFzc2VydCh0aGlzLnBvb2xzKHRva2VuSWQpLmV4aXN0cywgJ1JvdXRlcjogbm8gcG9vbCcpOwogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBSb3V0ZXI6IG5vIHBvb2wKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTY5CiAgICAvLyBjb25zdCBwb29sSWQgPSB0aGlzLnBvb2xzKHRva2VuSWQpLnZhbHVlOwogICAgYm94X2dldAogICAgc3dhcAogICAgYnRvaQogICAgc3dhcAogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTcxLTE3NgogICAgLy8gaXR4bi5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgeGZlckFzc2V0OiB0b2tlbklkLAogICAgLy8gICBhc3NldEFtb3VudDogYW1vdW50LAogICAgLy8gICBhc3NldFJlY2VpdmVyOiBBcHBsaWNhdGlvbihwb29sSWQpLmFkZHJlc3MsCiAgICAvLyB9KQogICAgLy8gICAuc3VibWl0KCk7CiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE3NAogICAgLy8gYXNzZXRSZWNlaXZlcjogQXBwbGljYXRpb24ocG9vbElkKS5hZGRyZXNzLAogICAgZHVwCiAgICBhcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCiAgICBhc3NlcnQgLy8gYXBwbGljYXRpb24gZXhpc3RzCiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgZnJhbWVfZGlnIC0zCiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNzEtMTc1CiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICB4ZmVyQXNzZXQ6IHRva2VuSWQsCiAgICAvLyAgIGFzc2V0QW1vdW50OiBhbW91bnQsCiAgICAvLyAgIGFzc2V0UmVjZWl2ZXI6IEFwcGxpY2F0aW9uKHBvb2xJZCkuYWRkcmVzcywKICAgIC8vIH0pCiAgICBpbnRjXzMgLy8gNAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE3MS0xNzYKICAgIC8vIGl0eG4uYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgIHhmZXJBc3NldDogdG9rZW5JZCwKICAgIC8vICAgYXNzZXRBbW91bnQ6IGFtb3VudCwKICAgIC8vICAgYXNzZXRSZWNlaXZlcjogQXBwbGljYXRpb24ocG9vbElkKS5hZGRyZXNzLAogICAgLy8gfSkKICAgIC8vICAgLnN1Ym1pdCgpOwogICAgaXR4bl9zdWJtaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTc4LTE4MQogICAgLy8gcmV0dXJuIGFiaUNhbGwoUG9vbC5wcm90b3R5cGUuc3dhcFRvVlVzZCwgewogICAgLy8gICBhcHBJZDogcG9vbElkLAogICAgLy8gICBhcmdzOiBbdXNlciwgYW1vdW50LCB1c2VyID09PSB0aGlzLnJlYmFsYW5jZXIudmFsdWVdLAogICAgLy8gfSkucmV0dXJuVmFsdWU7CiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE4MAogICAgLy8gYXJnczogW3VzZXIsIGFtb3VudCwgdXNlciA9PT0gdGhpcy5yZWJhbGFuY2VyLnZhbHVlXSwKICAgIGZyYW1lX2RpZyAtMQogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo0OQogICAgLy8gcHJpdmF0ZSByZWJhbGFuY2VyID0gR2xvYmFsU3RhdGU8QWRkcmVzcz4oeyBpbml0aWFsVmFsdWU6IG5ldyBBZGRyZXNzKGJ6ZXJvKDApKSB9KTsvLyBjYW4gcmVzdHJpY3QgZGVwb3NpdCBvciB3aXRoZHJhdyBvcGVyYXRpb25zCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNiAvLyAicmViYWxhbmNlciIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE4MAogICAgLy8gYXJnczogW3VzZXIsIGFtb3VudCwgdXNlciA9PT0gdGhpcy5yZWJhbGFuY2VyLnZhbHVlXSwKICAgIGZyYW1lX2RpZyAtMgogICAgPT0KICAgIGJ5dGVjIDkgLy8gMHgwMAogICAgaW50Y18wIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE3OC0xODEKICAgIC8vIHJldHVybiBhYmlDYWxsKFBvb2wucHJvdG90eXBlLnN3YXBUb1ZVc2QsIHsKICAgIC8vICAgYXBwSWQ6IHBvb2xJZCwKICAgIC8vICAgYXJnczogW3VzZXIsIGFtb3VudCwgdXNlciA9PT0gdGhpcy5yZWJhbGFuY2VyLnZhbHVlXSwKICAgIC8vIH0pLnJldHVyblZhbHVlOwogICAgcHVzaGJ5dGVzIDB4ZDk3OGFkMTQgLy8gbWV0aG9kICJzd2FwVG9WVXNkKGFkZHJlc3MsdWludDY0LGJvb2wpdWludDY0IgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGZyYW1lX2RpZyAtMgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIHN3YXAKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBpbnRjXzIgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEJ5dGVzIGhhcyB2YWxpZCBwcmVmaXgKICAgIGJ0b2kKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6Okdhc1VzYWdlLmdldEdhc1VzYWdlKGNoYWluSWQ6IGJ5dGVzKSAtPiB1aW50NjQ6CmdldEdhc1VzYWdlOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czoxNy0xOAogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICAvLyBnZXRHYXNVc2FnZShjaGFpbklkOiBCeXRlKTogdWludDY0IHsKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czoxMAogICAgLy8gZ2FzVXNhZ2UgPSBCb3hNYXA8Qnl0ZSwgdWludDY0Pih7IGtleVByZWZpeDogJ2cnIH0pOwogICAgYnl0ZWMgMTIgLy8gImciCiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czoxOQogICAgLy8gcmV0dXJuIHRoaXMuZ2FzVXNhZ2UoY2hhaW5JZCkudmFsdWU7CiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBidG9pCiAgICBzd2FwCiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czo6R2FzVXNhZ2Uuc2V0R2FzVXNhZ2UoY2hhaW5JZDogYnl0ZXMsIGdhc0Ftb3VudDogdWludDY0KSAtPiB2b2lkOgpzZXRHYXNVc2FnZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MjItMjMKICAgIC8vIEBhYmltZXRob2QoKQogICAgLy8gc2V0R2FzVXNhZ2UoY2hhaW5JZDogQnl0ZSwgZ2FzQW1vdW50OiB1aW50NjQpOiB2b2lkIHsKICAgIHByb3RvIDIgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czoyNAogICAgLy8gdGhpcy5vbmx5T3duZXIoKTsKICAgIGNhbGxzdWIgb25seU93bmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjEwCiAgICAvLyBnYXNVc2FnZSA9IEJveE1hcDxCeXRlLCB1aW50NjQ+KHsga2V5UHJlZml4OiAnZycgfSk7CiAgICBieXRlYyAxMiAvLyAiZyIKICAgIGZyYW1lX2RpZyAtMgogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjI1CiAgICAvLyB0aGlzLmdhc1VzYWdlKGNoYWluSWQpLnZhbHVlID0gZ2FzQW1vdW50OwogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICBib3hfcHV0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjpHYXNVc2FnZS5zZXRHYXNPcmFjbGUoZ2FzT3JhY2xlOiB1aW50NjQpIC0+IHZvaWQ6CnNldEdhc09yYWNsZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MjgtMjkKICAgIC8vIEBhYmltZXRob2QoKQogICAgLy8gc2V0R2FzT3JhY2xlKGdhc09yYWNsZTogQXBwbGljYXRpb24pOiB2b2lkIHsKICAgIHByb3RvIDEgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czozMAogICAgLy8gdGhpcy5vbmx5T3duZXIoKTsKICAgIGNhbGxzdWIgb25seU93bmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjkKICAgIC8vIGdhc09yYWNsZSA9IEdsb2JhbFN0YXRlPEFwcGxpY2F0aW9uPigpOwogICAgYnl0ZWMgNCAvLyAiZ2FzT3JhY2xlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czozMQogICAgLy8gdGhpcy5nYXNPcmFjbGUudmFsdWUgPSBnYXNPcmFjbGU7CiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjpHYXNVc2FnZS5nZXRUcmFuc2FjdGlvblJlbGF5ZXJDb3N0KGNoYWluSWQ6IGJ5dGVzKSAtPiB1aW50NjQ6CmdldFRyYW5zYWN0aW9uUmVsYXllckNvc3Q6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjM0LTM1CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIC8vIGdldFRyYW5zYWN0aW9uUmVsYXllckNvc3QoY2hhaW5JZDogQnl0ZSk6IHVpbnQ2NCB7CiAgICBwcm90byAxIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MTAKICAgIC8vIGdhc1VzYWdlID0gQm94TWFwPEJ5dGUsIHVpbnQ2ND4oeyBrZXlQcmVmaXg6ICdnJyB9KTsKICAgIGJ5dGVjIDEyIC8vICJnIgogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MzYKICAgIC8vIGNvbnN0IGdhc0Ftb3VudCA9IHRoaXMuZ2FzVXNhZ2UoY2hhaW5JZCkudmFsdWU7CiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBidG9pCiAgICBzd2FwCiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czozNy00MAogICAgLy8gcmV0dXJuIGFiaUNhbGwoR2FzT3JhY2xlLnByb3RvdHlwZS5nZXRUcmFuc2FjdGlvbkdhc0Nvc3RJbk5hdGl2ZVRva2VuLCB7CiAgICAvLyAgIGFwcElkOiB0aGlzLmdhc09yYWNsZS52YWx1ZS5pZCwKICAgIC8vICAgYXJnczogW2NoYWluSWQsIGdhc0Ftb3VudF0sCiAgICAvLyB9KS5yZXR1cm5WYWx1ZTsKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6OQogICAgLy8gZ2FzT3JhY2xlID0gR2xvYmFsU3RhdGU8QXBwbGljYXRpb24+KCk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNCAvLyAiZ2FzT3JhY2xlIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MzkKICAgIC8vIGFyZ3M6IFtjaGFpbklkLCBnYXNBbW91bnRdLAogICAgc3dhcAogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czozNy00MAogICAgLy8gcmV0dXJuIGFiaUNhbGwoR2FzT3JhY2xlLnByb3RvdHlwZS5nZXRUcmFuc2FjdGlvbkdhc0Nvc3RJbk5hdGl2ZVRva2VuLCB7CiAgICAvLyAgIGFwcElkOiB0aGlzLmdhc09yYWNsZS52YWx1ZS5pZCwKICAgIC8vICAgYXJnczogW2NoYWluSWQsIGdhc0Ftb3VudF0sCiAgICAvLyB9KS5yZXR1cm5WYWx1ZTsKICAgIHB1c2hieXRlcyAweGMyYWZjY2QxIC8vIG1ldGhvZCAiZ2V0VHJhbnNhY3Rpb25HYXNDb3N0SW5OYXRpdmVUb2tlbihieXRlLHVpbnQ2NCl1aW50NjQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgaW50Y18yIC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBCeXRlcyBoYXMgdmFsaWQgcHJlZml4CiAgICBidG9pCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czo6T3duYWJsZS5vbmx5T3duZXIoKSAtPiB2b2lkOgpvbmx5T3duZXI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czoxMwogICAgLy8gYXNzZXJ0KG9wLlR4bi5zZW5kZXIuYnl0ZXMgPT09IHRoaXMub3duZXIudmFsdWUuYnl0ZXMsICdPbmx5IG93bmVyJyk7CiAgICB0eG4gU2VuZGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czo2CiAgICAvLyBwcm90ZWN0ZWQgb3duZXIgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPigpOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzMgLy8gIm93bmVyIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjEzCiAgICAvLyBhc3NlcnQob3AuVHhuLnNlbmRlci5ieXRlcyA9PT0gdGhpcy5vd25lci52YWx1ZS5ieXRlcywgJ09ubHkgb3duZXInKTsKICAgID09CiAgICBhc3NlcnQgLy8gT25seSBvd25lcgogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6Ok93bmFibGUudHJhbnNmZXJPd25lcnNoaXAobmV3T3duZXI6IGJ5dGVzKSAtPiB2b2lkOgp0cmFuc2Zlck93bmVyc2hpcDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjE2LTE3CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB0cmFuc2Zlck93bmVyc2hpcChuZXdPd25lcjogQWRkcmVzcyk6IHZvaWQgewogICAgcHJvdG8gMSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czoxOAogICAgLy8gdGhpcy5vbmx5T3duZXIoKTsKICAgIGNhbGxzdWIgb25seU93bmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czo2CiAgICAvLyBwcm90ZWN0ZWQgb3duZXIgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPigpOwogICAgYnl0ZWNfMyAvLyAib3duZXIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czoxOQogICAgLy8gdGhpcy5vd25lci52YWx1ZSA9IG5ld093bmVyOwogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCg==",clear:"I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg=="},byteCode:{approval:"CiAFAAEGBNR6JhAEFR98dQdjYW5Td2FwCW1lc3NlbmdlcgVvd25lcglnYXNPcmFjbGUHY2hhaW5JZApyZWJhbGFuY2VyAXQBcAEADXN0b3BBdXRob3JpdHkBAQFnBENBeqME90dbggwVH3x1AAAAAAAAPVQxGEAACSKvJwZMZykjZzEbQQDJgg0E//goQQRl9wVzBOg6h6sELJ9oRwQxkZsoBE66ByEExhftcwRXUxVgBGOAgngEBlB8agT1+W6zBEsGLKAEw83ZKicNggkEB9+EKQSAxccPBPqxEaIE7xX4VQRrHuIjBBhwpJIENVcyTQQEsWHxBNKzV+snDoIEBAylrnoEOXuRiwTL/G0CBOF7r7Q2GgCOHAIFAfUB7AHMAawBmgGIAXYBZgFWAT4BGwD/AOsA3wDTALgApACUAIgAfABtAF4ASgA3ACUAEQACIkMxGRREMRhENhoBiAgOI0MxGRREMRhENhoBiAe7FihMULAjQzEZFEQxGEQ2GgEXwDKIB5gjQzEZFEQxGEQ2GgE2GgIXiAd1I0MxGRREMRhENhoBiAdYFihMULAjQzEZFEQxGEQ2GgGIBn0jQzEZFEQxGEQ2GgGIBmIjQzEZFEQxGESIBk8jQzEZFEQxGESIBjYjQzEZFEQxGEQ2GgEXiAYWI0MxGRREMRhENhoBFzYaAheIBckjQzEZFEQxGEQ2GgEXNhoCFzYaAzYaBBeIBWUjQzEZFEQxGEQnD7AjQzEZFEQxGEQnD7AjQzEZFEQxGEQ2GgGIBTIWKExQsCNDMRkURDEYRDYaATYaAogFCycJIk8CVChMULAjQzEZFEQxGEQ2GgEXNhoCNhoDNhoENhoFNhoGiASvKExQsCNDMRkURDEYRDYaATYaAheIBC4WKExQsCNDMRkURDEYRDYaAReIA+kjQzEZFEQxGEQ2GgEXiAPAI0MxGRREMRhENhoBNhoCiAOcI0MxGRREMRhENhoBNhoCiAN3I0MxGRREMRhENhoBNhoCiANVI0MxGRREMRhENhoBFzYaAjYaAzYaBDYaBTYaBheIAnsjQzEZFEQxGEQ2GgEXNhoCNhoDNhoENhoFNhoGF4gBFyNDMRkURDEYRCNDMRkURDEYRDYaAReIAMkjQzEZFEQxGBRENhoBNhoCNhoDF8AyNhoEF8AyiACPI0OKAQExFkQxFiMJSTgQJRJESTgUMgoSREk4EYv/EkRJOCAyAxJESTgVMgMSRDgSiYoBAYAASTEWi/8MQQAEIowAiTEWi/8JSYwBOBBJjAAjE0EABCKMAImLACMSRIsBOAcyChNBAAQijACJiwE4IDIDE0EABCKMAImLATgJMgMTQQAEIowAiYsBOAiMAImKBAAri/xnJwSL/2cnCov8ZycFi/1nKov+Z4mKAQCIBUKxMgqyFCKyEov/shElshAisgGzgBhCcmlkZ2U6IG9wdC1pbiBjb21wbGV0ZWSwiYoGACIpZUREi/qI/xZJi/8NRIEgr4v7EhREgQKI/zOL/0AA1SKLAQiLAIv/CYv6MQBPAogEEyInBWVEi/wTRIv8i/1QJwdMUL1FAUQiJwVlREsBi/tPAov8i/2L/ogChov8iALEgAFzSwJQSb1FARREgAC/SwFXAQGxIiplRCcNshqyGLIaJLIQIrIBs7Q+SVcEAExXAAQoEkQXIiplRHIIRCIqZUSxTLIHSwGyCCOyECKyAbaABKMkmYmyGk8DshqyGCSyECKyAbNLARZLARZQgARLVUGbTFCwCE8CDkQWi/tQi/xQi/1Qi/5QJwtQgAQin7rsTFCwiYv6FoABZkxQvkwXTESL/wuxIicEZUQiJwVlRIAEHbcM3bIashqyGCSyECKyAbO0PklXBABMVwAEKBJEFwpJFoAE4H9rNkxQsEL+4YoGACIpZUREgAFii/xQvUUBRCOI/fhJIQQPRCInBWVEi/qL+4v8TwOL/Yv+iAFzSTEAUAJMUQACTFECIFBJTgKAAW1LAVBJvUUBFESAAL+xIiplRIAEM+FHqrIashiyGiSyECKyAbO0PklXBABMVwAEKBJEIlNEi/2BGFuL+4v6i/+IAipMSSEECUwhBA1BABCxi/uyB4sCsggjshAisgGziwEWi/tQi/5QJwtQiwBQgARFg2rWTFCwiYoCAIgDD4ABYov+UIv/v4mKAgCIAv+L/ov/UCcHTFCAAL+JigIAiALsi/6L/1AnB0xQvEiJigEAiALasSIrZUSyB4v/sggjshAisgGziYoBAIgCwTIKSYv/cABMSU8CREEAGrEiK2VEshSLAbISi/+yEYsAsgAlshAisgGziYoCAYv+iAIqsSIqZUQnDrIai/6yGrIYJLIQIrIBs7Q+SVcEAExXAAQoEkQXsSInBGVETgIIFoAEe/fVDLIai/6yGrIashgkshAisgGztD5JVwQATFcABCgSRBeL/xaAAWVMUL5MF0xEComKBgGBGK+L+hZQgR+vi/xQTIv7UExQi/5Qi/9QJwtQAov8FyJMVov9FyNMVkkVgSASRImKAgGL/ov/UCcHTFC9RQGJigEBi/+IAachBAiJigQAIillREQxAIv8iPvfi/xLAksCiAD8i/2L/k8Ci/+IAJuL/BaL/RZPAxZPAxZPBIv+UE8EUE8DUE8CUExQgAQVQESzTFCwiYoCAIgBj4v/FicISwFQi/4Wv4v/cQFEgQlMCUkkCIABZksDUIEKTwKUFr+AAWVPAlCBCk8ClBa/iYoBAIgBVov/FicITFC8SIkxACInCmVEEkQpImeJiAE8KSNniYoBAIgBMicKi/9niYoBAIgBJicGi/9niYoEAYv8FicITFBJvUUBRL5MF0xEsYv+Fov/FiInBmVEi/0SJwkiTwJUgAQNG0wGshqL/bIaTwKyGkyyGrIashgkshAisgGztD5JVwQATFcABCgSRBeJigMBi/0WJwhMUEm9RQFEvkwXTESxSXIIRLIUi/+yEov9shElshAisgGzsYv/FiInBmVEi/4SJwkiTwJUgATZeK0UshqL/rIaTLIashqyGCSyECKyAbO0PklXBABMVwAEKBJEF4mKAQEnDIv/UL5MF0xEiYoCAIgAUScMi/5Qi/8Wv4mKAQCIAEEnBIv/Z4mKAQEnDIv/UL5MF0xEsSInBGVETBaABMKvzNGyGov/shqyGrIYJLIQIrIBs7Q+SVcEAExXAAQoEkQXiTEAIitlRBJEiYoBAIj/8SuL/2eJ",clear:"CoEBQw=="},events:[{name:"BridgingFeeFromTokens",args:[{type:"uint64",name:"fee"}]},{name:"ReceiveFee",args:[{type:"uint64",name:"bridgeTransactionCost"},{type:"uint64",name:"messageTransactionCost"}]},{name:"TokensSent",args:[{type:"uint64",name:"amount"},{type:"byte[32]",name:"recipient"},{type:"byte",name:"destinationChainId"},{type:"byte[32]",name:"receiveToken"},{type:"byte[32]",name:"nonce"},{type:"byte",name:"messenger"}]},{name:"TokensReceived",args:[{type:"uint64",name:"receiveAmount"},{type:"address",name:"recipient"},{type:"byte[32]",name:"nonce"},{type:"byte",name:"messenger"},{type:"byte[32]",name:"message"}]},{name:"Swapped",args:[{type:"address",name:"sender"},{type:"address",name:"recipient"},{type:"uint64",name:"tokenId"},{type:"uint64",name:"receiveTokenId"},{type:"uint64",name:"amount"},{type:"uint64",name:"receivedAmount"}]}],templateVariables:{}};var v=class a{static get create(){return{_resolveByMethod(n){switch(n.method){case"createApplication":case"createApplication(address,byte,application,application)void":return a.create.createApplication(n)}throw new Error("Unknown ' + verb + ' method")},createApplication(n){return{...n,method:"createApplication(address,byte,application,application)void",args:Array.isArray(n.args)?n.args:[n.args.owner,n.args.chainId,n.args.messenger,n.args.gasOracle]}}}}static optInAsset(n){return{...n,method:"optInAsset(uint64)void",args:Array.isArray(n.args)?n.args:[n.args.assetId]}}static noop(n){return{...n,method:"noop()void",args:Array.isArray(n.args)?n.args:[]}}static swapAndBridge(n){return{...n,method:"swapAndBridge(uint64,byte[32],byte,byte[32],byte[32],uint64)void",args:Array.isArray(n.args)?n.args:[n.args.tokenId,n.args.recipient,n.args.destinationChainId,n.args.receiveToken,n.args.nonce,n.args.feeTokenAmount]}}static receiveTokens(n){return{...n,method:"receiveTokens(uint64,byte[32],byte,byte[32],byte[32],uint64)void",args:Array.isArray(n.args)?n.args:[n.args.amount,n.args.recipient,n.args.sourceChainId,n.args.receiveToken,n.args.nonce,n.args.receiveAmountMin]}}static registerBridge(n){return{...n,method:"registerBridge(byte,byte[32])void",args:Array.isArray(n.args)?n.args:[n.args.chainId,n.args.bridgeAddress]}}static addBridgeToken(n){return{...n,method:"addBridgeToken(byte,byte[32])void",args:Array.isArray(n.args)?n.args:[n.args.chainId,n.args.tokenAddress]}}static removeBridgeToken(n){return{...n,method:"removeBridgeToken(byte,byte[32])void",args:Array.isArray(n.args)?n.args:[n.args.chainId,n.args.tokenAddress]}}static withdrawGasTokens(n){return{...n,method:"withdrawGasTokens(uint64)void",args:Array.isArray(n.args)?n.args:[n.args.amount]}}static withdrawBridgingFeeInTokens(n){return{...n,method:"withdrawBridgingFeeInTokens(uint64)void",args:Array.isArray(n.args)?n.args:[n.args.assetId]}}static getBridgingCostInTokens(n){return{...n,method:"getBridgingCostInTokens(byte,uint64)uint64",args:Array.isArray(n.args)?n.args:[n.args.destinationChainId,n.args.tokenId]}}static hashMessage(n){return{...n,method:"hashMessage(uint64,byte[32],byte,byte,byte[32],byte[32])byte[32]",args:Array.isArray(n.args)?n.args:[n.args.amount,n.args.recipient,n.args.sourceChainId,n.args.destinationChainId,n.args.receiveToken,n.args.nonce]}}static isOtherBridgeTokenSupported(n){return{...n,method:"isOtherBridgeTokenSupported(byte,byte[32])bool",args:Array.isArray(n.args)?n.args:[n.args.chainId,n.args.token]}}static getTransactionCost(n){return{...n,method:"getTransactionCost(byte)uint64",args:Array.isArray(n.args)?n.args:[n.args.chainId]}}static getReceiveTokensCost(n){return{...n,method:"getReceiveTokensCost()uint64",args:Array.isArray(n.args)?n.args:[]}}static getSendTransactionStorageCost(n){return{...n,method:"getSendTransactionStorageCost()uint64",args:Array.isArray(n.args)?n.args:[]}}static swap(n){return{...n,method:"swap(uint64,uint64,address,uint64)void",args:Array.isArray(n.args)?n.args:[n.args.tokenId,n.args.receiveTokenId,n.args.recipient,n.args.receiveAmountMin]}}static addPool(n){return{...n,method:"addPool(uint64,uint64)void",args:Array.isArray(n.args)?n.args:[n.args.poolId,n.args.tokenId]}}static removePool(n){return{...n,method:"removePool(uint64)void",args:Array.isArray(n.args)?n.args:[n.args.tokenId]}}static stopSwap(n){return{...n,method:"stopSwap()void",args:Array.isArray(n.args)?n.args:[]}}static startSwap(n){return{...n,method:"startSwap()void",args:Array.isArray(n.args)?n.args:[]}}static setStopAuthority(n){return{...n,method:"setStopAuthority(address)void",args:Array.isArray(n.args)?n.args:[n.args.stopAuthority]}}static setRebalancer(n){return{...n,method:"setRebalancer(address)void",args:Array.isArray(n.args)?n.args:[n.args.rebalancer]}}static getGasUsage(n){return{...n,method:"getGasUsage(byte)uint64",args:Array.isArray(n.args)?n.args:[n.args.chainId]}}static setGasUsage(n){return{...n,method:"setGasUsage(byte,uint64)void",args:Array.isArray(n.args)?n.args:[n.args.chainId,n.args.gasAmount]}}static setGasOracle(n){return{...n,method:"setGasOracle(application)void",args:Array.isArray(n.args)?n.args:[n.args.gasOracle]}}static getTransactionRelayerCost(n){return{...n,method:"getTransactionRelayerCost(byte)uint64",args:Array.isArray(n.args)?n.args:[n.args.chainId]}}static transferOwnership(n){return{...n,method:"transferOwnership(address)void",args:Array.isArray(n.args)?n.args:[n.args.newOwner]}}};var ia=class a{appClient;constructor(n){this.appClient=n instanceof gi.AppClient?n:new gi.AppClient({...n,appSpec:na})}decodeReturnValue(n,i){return i!==void 0?(0,is.getArc56ReturnValue)(i,this.appClient.getABIMethod(n),na.structs):void 0}static async fromCreatorAndName(n){return new a(await gi.AppClient.fromCreatorAndName({...n,appSpec:na}))}static async fromNetwork(n){return new a(await gi.AppClient.fromNetwork({...n,appSpec:na}))}get appId(){return this.appClient.appId}get appAddress(){return this.appClient.appAddress}get appName(){return this.appClient.appName}get appSpec(){return this.appClient.appSpec}get algorand(){return this.appClient.algorand}params={clearState:n=>this.appClient.params.bare.clearState(n),optInAsset:n=>this.appClient.params.call(v.optInAsset(n)),noop:(n={args:[]})=>this.appClient.params.call(v.noop(n)),swapAndBridge:n=>this.appClient.params.call(v.swapAndBridge(n)),receiveTokens:n=>this.appClient.params.call(v.receiveTokens(n)),registerBridge:n=>this.appClient.params.call(v.registerBridge(n)),addBridgeToken:n=>this.appClient.params.call(v.addBridgeToken(n)),removeBridgeToken:n=>this.appClient.params.call(v.removeBridgeToken(n)),withdrawGasTokens:n=>this.appClient.params.call(v.withdrawGasTokens(n)),withdrawBridgingFeeInTokens:n=>this.appClient.params.call(v.withdrawBridgingFeeInTokens(n)),getBridgingCostInTokens:n=>this.appClient.params.call(v.getBridgingCostInTokens(n)),hashMessage:n=>this.appClient.params.call(v.hashMessage(n)),isOtherBridgeTokenSupported:n=>this.appClient.params.call(v.isOtherBridgeTokenSupported(n)),getTransactionCost:n=>this.appClient.params.call(v.getTransactionCost(n)),getReceiveTokensCost:(n={args:[]})=>this.appClient.params.call(v.getReceiveTokensCost(n)),getSendTransactionStorageCost:(n={args:[]})=>this.appClient.params.call(v.getSendTransactionStorageCost(n)),swap:n=>this.appClient.params.call(v.swap(n)),addPool:n=>this.appClient.params.call(v.addPool(n)),removePool:n=>this.appClient.params.call(v.removePool(n)),stopSwap:(n={args:[]})=>this.appClient.params.call(v.stopSwap(n)),startSwap:(n={args:[]})=>this.appClient.params.call(v.startSwap(n)),setStopAuthority:n=>this.appClient.params.call(v.setStopAuthority(n)),setRebalancer:n=>this.appClient.params.call(v.setRebalancer(n)),getGasUsage:n=>this.appClient.params.call(v.getGasUsage(n)),setGasUsage:n=>this.appClient.params.call(v.setGasUsage(n)),setGasOracle:n=>this.appClient.params.call(v.setGasOracle(n)),getTransactionRelayerCost:n=>this.appClient.params.call(v.getTransactionRelayerCost(n)),transferOwnership:n=>this.appClient.params.call(v.transferOwnership(n))};createTransaction={clearState:n=>this.appClient.createTransaction.bare.clearState(n),optInAsset:n=>this.appClient.createTransaction.call(v.optInAsset(n)),noop:(n={args:[]})=>this.appClient.createTransaction.call(v.noop(n)),swapAndBridge:n=>this.appClient.createTransaction.call(v.swapAndBridge(n)),receiveTokens:n=>this.appClient.createTransaction.call(v.receiveTokens(n)),registerBridge:n=>this.appClient.createTransaction.call(v.registerBridge(n)),addBridgeToken:n=>this.appClient.createTransaction.call(v.addBridgeToken(n)),removeBridgeToken:n=>this.appClient.createTransaction.call(v.removeBridgeToken(n)),withdrawGasTokens:n=>this.appClient.createTransaction.call(v.withdrawGasTokens(n)),withdrawBridgingFeeInTokens:n=>this.appClient.createTransaction.call(v.withdrawBridgingFeeInTokens(n)),getBridgingCostInTokens:n=>this.appClient.createTransaction.call(v.getBridgingCostInTokens(n)),hashMessage:n=>this.appClient.createTransaction.call(v.hashMessage(n)),isOtherBridgeTokenSupported:n=>this.appClient.createTransaction.call(v.isOtherBridgeTokenSupported(n)),getTransactionCost:n=>this.appClient.createTransaction.call(v.getTransactionCost(n)),getReceiveTokensCost:(n={args:[]})=>this.appClient.createTransaction.call(v.getReceiveTokensCost(n)),getSendTransactionStorageCost:(n={args:[]})=>this.appClient.createTransaction.call(v.getSendTransactionStorageCost(n)),swap:n=>this.appClient.createTransaction.call(v.swap(n)),addPool:n=>this.appClient.createTransaction.call(v.addPool(n)),removePool:n=>this.appClient.createTransaction.call(v.removePool(n)),stopSwap:(n={args:[]})=>this.appClient.createTransaction.call(v.stopSwap(n)),startSwap:(n={args:[]})=>this.appClient.createTransaction.call(v.startSwap(n)),setStopAuthority:n=>this.appClient.createTransaction.call(v.setStopAuthority(n)),setRebalancer:n=>this.appClient.createTransaction.call(v.setRebalancer(n)),getGasUsage:n=>this.appClient.createTransaction.call(v.getGasUsage(n)),setGasUsage:n=>this.appClient.createTransaction.call(v.setGasUsage(n)),setGasOracle:n=>this.appClient.createTransaction.call(v.setGasOracle(n)),getTransactionRelayerCost:n=>this.appClient.createTransaction.call(v.getTransactionRelayerCost(n)),transferOwnership:n=>this.appClient.createTransaction.call(v.transferOwnership(n))};send={clearState:n=>this.appClient.send.bare.clearState(n),optInAsset:async n=>{let i=await this.appClient.send.call(v.optInAsset(n));return{...i,return:i.return}},noop:async(n={args:[]})=>{let i=await this.appClient.send.call(v.noop(n));return{...i,return:i.return}},swapAndBridge:async n=>{let i=await this.appClient.send.call(v.swapAndBridge(n));return{...i,return:i.return}},receiveTokens:async n=>{let i=await this.appClient.send.call(v.receiveTokens(n));return{...i,return:i.return}},registerBridge:async n=>{let i=await this.appClient.send.call(v.registerBridge(n));return{...i,return:i.return}},addBridgeToken:async n=>{let i=await this.appClient.send.call(v.addBridgeToken(n));return{...i,return:i.return}},removeBridgeToken:async n=>{let i=await this.appClient.send.call(v.removeBridgeToken(n));return{...i,return:i.return}},withdrawGasTokens:async n=>{let i=await this.appClient.send.call(v.withdrawGasTokens(n));return{...i,return:i.return}},withdrawBridgingFeeInTokens:async n=>{let i=await this.appClient.send.call(v.withdrawBridgingFeeInTokens(n));return{...i,return:i.return}},getBridgingCostInTokens:async n=>{let i=await this.appClient.send.call(v.getBridgingCostInTokens(n));return{...i,return:i.return}},hashMessage:async n=>{let i=await this.appClient.send.call(v.hashMessage(n));return{...i,return:i.return}},isOtherBridgeTokenSupported:async n=>{let i=await this.appClient.send.call(v.isOtherBridgeTokenSupported(n));return{...i,return:i.return}},getTransactionCost:async n=>{let i=await this.appClient.send.call(v.getTransactionCost(n));return{...i,return:i.return}},getReceiveTokensCost:async(n={args:[]})=>{let i=await this.appClient.send.call(v.getReceiveTokensCost(n));return{...i,return:i.return}},getSendTransactionStorageCost:async(n={args:[]})=>{let i=await this.appClient.send.call(v.getSendTransactionStorageCost(n));return{...i,return:i.return}},swap:async n=>{let i=await this.appClient.send.call(v.swap(n));return{...i,return:i.return}},addPool:async n=>{let i=await this.appClient.send.call(v.addPool(n));return{...i,return:i.return}},removePool:async n=>{let i=await this.appClient.send.call(v.removePool(n));return{...i,return:i.return}},stopSwap:async(n={args:[]})=>{let i=await this.appClient.send.call(v.stopSwap(n));return{...i,return:i.return}},startSwap:async(n={args:[]})=>{let i=await this.appClient.send.call(v.startSwap(n));return{...i,return:i.return}},setStopAuthority:async n=>{let i=await this.appClient.send.call(v.setStopAuthority(n));return{...i,return:i.return}},setRebalancer:async n=>{let i=await this.appClient.send.call(v.setRebalancer(n));return{...i,return:i.return}},getGasUsage:async n=>{let i=await this.appClient.send.call(v.getGasUsage(n));return{...i,return:i.return}},setGasUsage:async n=>{let i=await this.appClient.send.call(v.setGasUsage(n));return{...i,return:i.return}},setGasOracle:async n=>{let i=await this.appClient.send.call(v.setGasOracle(n));return{...i,return:i.return}},getTransactionRelayerCost:async n=>{let i=await this.appClient.send.call(v.getTransactionRelayerCost(n));return{...i,return:i.return}},transferOwnership:async n=>{let i=await this.appClient.send.call(v.transferOwnership(n));return{...i,return:i.return}}};clone(n){return new a(this.appClient.clone(n))}async getBridgingCostInTokens(n){return(await this.appClient.send.call(v.getBridgingCostInTokens(n))).return}async hashMessage(n){return(await this.appClient.send.call(v.hashMessage(n))).return}async isOtherBridgeTokenSupported(n){return(await this.appClient.send.call(v.isOtherBridgeTokenSupported(n))).return}async getTransactionCost(n){return(await this.appClient.send.call(v.getTransactionCost(n))).return}async getReceiveTokensCost(n={args:[]}){return(await this.appClient.send.call(v.getReceiveTokensCost(n))).return}async getSendTransactionStorageCost(n={args:[]}){return(await this.appClient.send.call(v.getSendTransactionStorageCost(n))).return}async getGasUsage(n){return(await this.appClient.send.call(v.getGasUsage(n))).return}async getTransactionRelayerCost(n){return(await this.appClient.send.call(v.getTransactionRelayerCost(n))).return}state={global:{getAll:async()=>{let n=await this.appClient.state.global.getAll();return{chainId:n.chainId,messenger:n.messenger,stopAuthority:n.stopAuthority,rebalancer:n.rebalancer,canSwap:n.canSwap,gasOracle:n.gasOracle,owner:n.owner}},chainId:async()=>await this.appClient.state.global.getValue("chainId"),messenger:async()=>await this.appClient.state.global.getValue("messenger"),stopAuthority:async()=>await this.appClient.state.global.getValue("stopAuthority"),rebalancer:async()=>await this.appClient.state.global.getValue("rebalancer"),canSwap:async()=>await this.appClient.state.global.getValue("canSwap"),gasOracle:async()=>await this.appClient.state.global.getValue("gasOracle"),owner:async()=>await this.appClient.state.global.getValue("owner")},box:{getAll:async()=>{let n=await this.appClient.state.box.getAll();return{}},processedMessages:{getMap:async()=>await this.appClient.state.box.getMap("processedMessages"),value:async n=>await this.appClient.state.box.getMapValue("processedMessages",n)},sentMessages:{getMap:async()=>await this.appClient.state.box.getMap("sentMessages"),value:async n=>await this.appClient.state.box.getMapValue("sentMessages",n)},otherBridges:{getMap:async()=>await this.appClient.state.box.getMap("otherBridges"),value:async n=>await this.appClient.state.box.getMapValue("otherBridges",n)},otherBridgeTokens:{getMap:async()=>await this.appClient.state.box.getMap("otherBridgeTokens"),value:async n=>await this.appClient.state.box.getMapValue("otherBridgeTokens",n)},pools:{getMap:async()=>await this.appClient.state.box.getMap("pools"),value:async n=>await this.appClient.state.box.getMapValue("pools",n)},fromGasOracleScalingFactor:{getMap:async()=>await this.appClient.state.box.getMap("fromGasOracleScalingFactor"),value:async n=>await this.appClient.state.box.getMapValue("fromGasOracleScalingFactor",n)},bridgingFeeConversionScalingFactor:{getMap:async()=>await this.appClient.state.box.getMap("bridgingFeeConversionScalingFactor"),value:async n=>await this.appClient.state.box.getMapValue("bridgingFeeConversionScalingFactor",n)},gasUsage:{getMap:async()=>await this.appClient.state.box.getMap("gasUsage"),value:async n=>await this.appClient.state.box.getMapValue("gasUsage",n)}}};newGroup(){let n=this,i=this.algorand.newGroup(),o=Promise.resolve(),r=[];return{optInAsset(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.optInAsset(s))),r.push(void 0),this},noop(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.noop(s))),r.push(void 0),this},swapAndBridge(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.swapAndBridge(s))),r.push(void 0),this},receiveTokens(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.receiveTokens(s))),r.push(void 0),this},registerBridge(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.registerBridge(s))),r.push(void 0),this},addBridgeToken(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.addBridgeToken(s))),r.push(void 0),this},removeBridgeToken(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.removeBridgeToken(s))),r.push(void 0),this},withdrawGasTokens(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.withdrawGasTokens(s))),r.push(void 0),this},withdrawBridgingFeeInTokens(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.withdrawBridgingFeeInTokens(s))),r.push(void 0),this},getBridgingCostInTokens(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.getBridgingCostInTokens(s))),r.push(d=>n.decodeReturnValue("getBridgingCostInTokens(byte,uint64)uint64",d)),this},hashMessage(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.hashMessage(s))),r.push(d=>n.decodeReturnValue("hashMessage(uint64,byte[32],byte,byte,byte[32],byte[32])byte[32]",d)),this},isOtherBridgeTokenSupported(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.isOtherBridgeTokenSupported(s))),r.push(d=>n.decodeReturnValue("isOtherBridgeTokenSupported(byte,byte[32])bool",d)),this},getTransactionCost(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.getTransactionCost(s))),r.push(d=>n.decodeReturnValue("getTransactionCost(byte)uint64",d)),this},getReceiveTokensCost(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.getReceiveTokensCost(s))),r.push(d=>n.decodeReturnValue("getReceiveTokensCost()uint64",d)),this},getSendTransactionStorageCost(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.getSendTransactionStorageCost(s))),r.push(d=>n.decodeReturnValue("getSendTransactionStorageCost()uint64",d)),this},swap(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.swap(s))),r.push(void 0),this},addPool(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.addPool(s))),r.push(void 0),this},removePool(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.removePool(s))),r.push(void 0),this},stopSwap(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.stopSwap(s))),r.push(void 0),this},startSwap(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.startSwap(s))),r.push(void 0),this},setStopAuthority(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.setStopAuthority(s))),r.push(void 0),this},setRebalancer(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.setRebalancer(s))),r.push(void 0),this},getGasUsage(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.getGasUsage(s))),r.push(d=>n.decodeReturnValue("getGasUsage(byte)uint64",d)),this},setGasUsage(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.setGasUsage(s))),r.push(void 0),this},setGasOracle(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.setGasOracle(s))),r.push(void 0),this},getTransactionRelayerCost(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.getTransactionRelayerCost(s))),r.push(d=>n.decodeReturnValue("getTransactionRelayerCost(byte)uint64",d)),this},transferOwnership(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.transferOwnership(s))),r.push(void 0),this},clearState(s){return o=o.then(()=>i.addAppCall(n.params.clearState(s))),this},addTransaction(s,d){return o=o.then(()=>i.addTransaction(s,d)),this},async composer(){return await o,i},async simulate(s){await o;let d=await(s?i.simulate(s):i.simulate());return{...d,returns:d.returns?.map((c,A)=>r[A]!==void 0?r[A](c):c.returnValue)}},async send(s){await o;let d=await i.send(s);return{...d,returns:d.returns?.map((c,A)=>r[A]!==void 0?r[A](c):c.returnValue)}}}}};var aa=ge(require("algosdk")),Lc=new aa.ABIMethod({name:"noop",args:[],returns:{type:"void"}});function fn(a){let{composer:n,appId:i,sender:o,signer:r,count:s}=a;for(let d=0;d<s;d++)n.addAppCallMethodCall({appId:i,method:Lc,args:[],sender:o,signer:r,note:`noop_${d}`})}function an(a){return(a*1e3).microAlgos()}function Rt(...a){return a.map(i=>aa.default.encodeUnsignedTransaction(i)).map(i=>Buffer.from(i).toString("hex"))}var Ge=class{};var gs=require("@solana/web3.js"),ls=require("@stellar/stellar-sdk"),us=require("algosdk"),Se=require("big.js"),Yo=ge(require("randombytes")),Bo=require("tronweb");var N=require("big.js"),oa=ge(require("bn.js"));function Ro(a,n){return(0,N.Big)(100).minus((0,N.Big)(100).times(n).div(a)).toNumber()}function on(a,n){return Ue(a,n,3).round(0,N.Big.roundDown)}function Je(a,n){return Ue(a,3,n)}function Ue(a,n,i){let o=(0,N.Big)(i).minus(n).toNumber();return(0,N.Big)(a).times(li(o))}function li(a){return(0,N.Big)(10).pow(a)}function V(a,n){return(0,N.Big)(a).times(li(n))}function S(a,n){let i=(0,N.Big)(a);return i.eq(0)?(0,N.Big)(0):(0,N.Big)(i).div(li(n))}function be(a){return S((0,N.Big)(a.tokenBalance).minus(a.vUsdBalance).toFixed(),3).div(2).toFixed()}function Bt(a,{feeShare:n,decimals:i},o){let r=(0,N.Big)(a);if(r.lte(0))return"0";let s=r.times(n),d=r.minus(s),c=on(d,i),A=(0,N.Big)(o.tokenBalance).plus(c),g=Yt(A,o.aValue,o.dValue);return(0,N.Big)(o.vUsdBalance).minus(g).round(0,N.Big.roundDown).toFixed()}function ui(a,{feeShare:n,decimals:i},o){let r=(0,N.Big)(a);if(r.lte(0))return(0,N.Big)(0).toFixed();let s=r.plus(o.vUsdBalance),d=Yt(s,o.aValue,o.dValue),c=Je((0,N.Big)(o.tokenBalance).minus(d),i),A=(0,N.Big)(c).times(n);return(0,N.Big)(c).minus(A).round(0,N.Big.roundDown).toFixed()}function as(a,n){let i=(0,N.Big)(a);if(i.lte(0))return n;let o=i.plus(n.vUsdBalance),r=Yt(o,n.aValue,n.dValue);return{aValue:n.aValue,dValue:n.dValue,tokenBalance:r.toFixed(0),vUsdBalance:o.toFixed(0)}}function os(a,{feeShare:n,decimals:i},o){if((0,N.Big)(a).lte(0))return(0,N.Big)(0);let r=(0,N.Big)(o.vUsdBalance).minus(a);if(r.lte(0))throw new vt;let s=Yt(r,o.aValue,o.dValue),d=(0,N.Big)(s).minus(o.tokenBalance),c=Je(d,i),A=(0,N.Big)(n).div((0,N.Big)(1).minus(n)),g=(0,N.Big)(c).times(A).round(0,N.Big.roundUp);return(0,N.Big)(c).plus(g).round(0,N.Big.roundDown)}function rs(a,{feeShare:n,decimals:i},o){if((0,N.Big)(a).lte(0))return(0,N.Big)(0);let r=(0,N.Big)(n).div((0,N.Big)(1).minus(n)),s=(0,N.Big)(a).times(r).round(0,N.Big.roundUp),d=(0,N.Big)(a).plus(s),c=on(d,i),A=(0,N.Big)(o.tokenBalance).minus(c);if(A.lte(0))throw new vt;let g=Yt(A,o.aValue,o.dValue);return(0,N.Big)(g).minus(o.vUsdBalance).round(0,N.Big.roundDown)}function Yt(a,n,i){let o=(0,N.Big)(4).times(n).times((0,N.Big)(i).minus(a)).minus(i),r=(0,N.Big)(i).pow(3),s=o.pow(2),d=(0,N.Big)(a).times((0,N.Big)(a).times(s).plus((0,N.Big)(4).times(n).times(r))).sqrt().round(0,N.Big.roundDown),c=(0,N.Big)(8).times(n).times(a),A=o.times(a).plus(d).div(c).round(0,N.Big.roundDown);return A.eq(0)?(0,N.Big)(0):A.plus(1)}function ss(a,n,i,o){let r=new oa.default(a),s=new oa.default(i),d=new oa.default(n);return r.mul(s).shrn(o).sub(d).toString()}function ds(a){return(0,N.Big)(a).gt(0)?`${Number((0,N.Big)(a).times(100).toFixed(2)).toLocaleString()}%`:"N/A"}function cs(a,n,i){let o=(0,N.Big)(n).times(i),r=(0,N.Big)(n).plus(i),s=(0,N.Big)(8).times(a).times(o).times(r),d=o.times((0,N.Big)(16).times(a).minus(4)).div(3),c=s.times(s),A=d.times(d).times(d),g=c.plus(A),l=(0,N.Big)(g).sqrt(),m=(0,N.Big)(Math.cbrt(+s.plus(l).toFixed())),I=(0,N.Big)(Math.cbrt(+s.minus(l).toFixed()));return m.plus(I).toFixed()}function wt(a,n,i){let o;switch(n){case"EVM":{o=As(a);break}case"SOLANA":{o=new gs.PublicKey(a).toBuffer();break}case"TRX":{o=Jc(a);break}case"SRB":{o=new ls.Address(a).toBuffer();break}case"SUI":{o=As(a);break}case"ALG":{o=Hc(a);break}}switch(i){case"EVM":return"0x"+o.toString("hex");case"SOLANA":return Array.from(o);case"TRX":return o;case"SRB":return o.toJSON().data;case"SUI":return"0x"+o.toString("hex");case"ALG":return o}}function it(a){return a.replace(/^0x/i,"")}function ms(a){return Buffer.from(a.replace(/^0x/i,""),"hex")}function As(a){let i=ms(a);return Buffer.concat([Buffer.alloc(32-i.length,0),i],32)}function Hc(a){return Buffer.from(us.Address.fromString(a).publicKey)}function Jc(a){let n=mi(a),i=ms(n);return kc(i,32)}function mi(a){let n=Bo.utils.crypto.decodeBase58Address(a);return n?Bo.utils.bytes.byteArray2hexStr(n).replace(/^41/,"0x"):""}function kc(a,n){if(a.length>=n)return a;let i=Buffer.alloc(n,0);return a.copy(i,n-a.length),i}function Gn(){return(0,Yo.default)(32)}function Wt(){let a=(0,Yo.default)(32).readBigInt64BE();return a<0?a*-1n:a}function De(a,n){let i={},o=n.sourceToken;switch(i.amount=V(n.amount,o.decimals).toFixed(),i.contractAddress=o.bridgeAddress,i.fromAccountAddress=n.fromAccountAddress,a){case"SUI":{if(!o.originTokenAddress)throw new B("SUI sourceToken must contain 'originTokenAddress'");i.fromTokenAddress=o.originTokenAddress;break}case"ALG":{i.fromTokenAddress=o.tokenAddress;break}default:i.fromTokenAddress=wt(o.tokenAddress,a,a)}switch(i.toAccountAddress=n.toAccountAddress,a){case"SUI":{if(!n.destinationToken.originTokenAddress)throw new B("SUI destinationToken must contain 'originTokenAddress'");i.toTokenAddress=n.destinationToken.originTokenAddress;break}case"ALG":{i.toTokenAddress=n.destinationToken.tokenAddress;break}default:i.toTokenAddress=wt(n.destinationToken.tokenAddress,a,a)}return i.minimumReceiveAmount=n.minimumReceiveAmount?V(n.minimumReceiveAmount,n.destinationToken.decimals).toFixed():"0",i}async function ke(a,n,i){let o={};o.fromChainId=n.sourceToken.allbridgeChainId,o.fromChainSymbol=n.sourceToken.chainSymbol;let r=L.getChainProperty(n.destinationToken.chainSymbol).chainType;if(a==="SUI"){if(!n.sourceToken.originTokenAddress)throw new B("SUI token must contain 'originTokenAddress'");o.fromTokenAddress=n.sourceToken.originTokenAddress}else o.fromTokenAddress=n.sourceToken.tokenAddress;o.toChainId=n.destinationToken.allbridgeChainId,o.toTokenAddress=n.destinationToken.tokenAddress,n.gasFeePaymentMethod==="stablecoin"?o.gasFeePaymentMethod="stablecoin":o.gasFeePaymentMethod="native";let s=n.sourceToken;switch(n.messenger){case 3:if(!s.cctpAddress||!n.destinationToken.cctpAddress)throw new he("Such route does not support CCTP protocol");o.contractAddress=s.cctpAddress;break;case 4:if(!s.cctpV2Address||!n.destinationToken.cctpV2Address)throw new he("Such route does not support CCTP V2 protocol");o.contractAddress=s.cctpV2Address;break;case 5:if(!s.oftBridgeAddress||!n.destinationToken.oftBridgeAddress||s.oftId!==n.destinationToken.oftId)throw new ve("Such route does not support OFT protocol");o.contractAddress=s.oftBridgeAddress;break;case 1:case 2:o.contractAddress=s.bridgeAddress;break}o.messenger=n.messenger,o.fromAccountAddress=n.fromAccountAddress,o.amount=V(n.amount,s.decimals).toFixed();let{fee:d,feeFormat:c}=n;if(!d){let m=(await Wo(n.sourceToken,o.toChainId,o.messenger,i))[o.gasFeePaymentMethod];if(!m)throw new Bn;d=m.int,c="int"}if(c=="float")switch(o.gasFeePaymentMethod){case"native":o.fee=V(d,L.getChainDecimalsByType(s.chainType)).toFixed(0);break;case"stablecoin":o.fee=V(d,s.decimals).toFixed(0);break}else o.fee=d;let{extraGas:A,extraGasFormat:g}=n;if(A&&+A>0){let l=await fo(s,n.destinationToken,o.messenger,i),m,I;switch(o.gasFeePaymentMethod){case"native":m=L.getChainDecimalsByType(s.chainType),I=(0,Se.Big)(l.exchangeRate);break;case"stablecoin":m=s.decimals,I=(0,Se.Big)(l.exchangeRate).div(l.sourceNativeTokenPrice);break}switch(g??"int"){case"float":{o.extraGas=V(A,m).toFixed(0);let h=I.mul(A);o.extraGasDest=V(h,L.getChainDecimalsByType(n.destinationToken.chainType)).toFixed(0,Se.Big.roundDown);break}case"int":{o.extraGas=A;let h=S(o.extraGas,L.getChainDecimalsByType(s.chainType)),W=I.mul(h);o.extraGasDest=V(W,L.getChainDecimalsByType(n.destinationToken.chainType)).toFixed(0,Se.Big.roundDown);break}}xc(o.extraGas,o.gasFeePaymentMethod,l)}return["SUI","ALG"].includes(a)||(o.fromTokenAddress=wt(o.fromTokenAddress,a,a)),o.toAccountAddress=wt(n.toAccountAddress,r,a),o.toTokenAddress=wt(o.toTokenAddress,r,a),o.gasFeePaymentMethod=="stablecoin"&&zc(o.amount,s.decimals,o.fee,o.extraGas),o}function zc(a,n,i,o){let r=(0,Se.Big)(a).minus(i).minus(o??0);if(r.lte(0))throw new tn(`Amount not enough to pay fee, ${S((0,Se.Big)(r).minus(1).neg(),n).toFixed()} stables is missing`)}async function Wo(a,n,i,o){let r=await o.getReceiveTransactionCost({sourceChainId:a.allbridgeChainId,destinationChainId:n,messenger:i,sourceToken:a.tokenAddress}),s={native:{int:r.fee,float:S(r.fee,L.getChainDecimalsByType(a.chainType)).toFixed()},adminFeeShareWithExtras:r.adminFeeShareWithExtras};if(r.sourceNativeTokenPrice){let d=Ue(new Se.Big(r.fee).mul(r.sourceNativeTokenPrice),L.getChainDecimalsByType(a.chainType),a.decimals).toFixed(0,Se.Big.roundUp);s.stablecoin={int:d,float:S(d,a.decimals).toFixed()}}return s}function xc(a,n,i){let o=i.extraGasMax[n];if(!o)throw new Bn(`Impossible to pay extra gas by '${n}' payment method`);let r=o.int;if((0,Se.Big)(a).gt(r))throw new ri(`Extra gas ${a} in int format, exceeded limit ${r} for '${n}' payment method`)}async function fo(a,n,i,o){let r={},s=await o.getReceiveTransactionCost({sourceChainId:a.allbridgeChainId,destinationChainId:n.allbridgeChainId,messenger:i,sourceToken:a.tokenAddress}),d=n.txCostAmount.maxAmount,c=S(d,L.getChainDecimalsByType(n.chainType)).toFixed(),A=(0,Se.Big)(c).div(s.exchangeRate).toFixed(L.getChainDecimalsByType(a.chainType),Se.Big.roundDown),g=V(A,L.getChainDecimalsByType(a.chainType)).toFixed(0);if(r.native={int:g,float:A},s.sourceNativeTokenPrice){let l=(0,Se.Big)(A).mul(s.sourceNativeTokenPrice).toFixed(a.decimals,Se.Big.roundDown);r.stablecoin={int:V(l,a.decimals).toFixed(0),float:l}}return{extraGasMax:r,destinationChain:{gasAmountMax:{int:d,float:c},swap:{int:n.txCostAmount.swap,float:S(n.txCostAmount.swap,L.getChainDecimalsByType(n.chainType)).toFixed()},transfer:{int:n.txCostAmount.transfer,float:S(n.txCostAmount.transfer,L.getChainDecimalsByType(n.chainType)).toFixed()}},exchangeRate:s.exchangeRate,sourceNativeTokenPrice:s.sourceNativeTokenPrice}}function ps(a){return a.sourceToken.chainSymbol!==a.destinationToken.chainSymbol}var Ci=class extends Ge{constructor(i,o){super();this.algorand=i;this.api=o;i.setDefaultSigner(Fn.default.makeBasicAccountTransactionSigner(Fn.default.mnemonicToSecretKey("tunnel gym elevator pulse motor evolve release orange culture make sister approve winter chair armor grocery distance festival tiger holiday dish wisdom region absorb secret")))}chainType="ALG";send(i){throw new _}async buildRawTransactionSend(i){let o=await ke(this.chainType,i,this.api);if(!i.sourceToken.bridgeId)throw new B("ALG sourceToken must contain 'bridgeId'");let r=BigInt(i.sourceToken.bridgeId),s=this.getBridge(r),d=Fn.Address.fromString(i.fromAccountAddress),c=BigInt(i.sourceToken.tokenAddress),A=o.toChainId,g=o.toAccountAddress,l=o.toTokenAddress,m=Gn(),I=BigInt(o.amount),h=BigInt(o.fee);o.extraGas&&(h=h+BigInt(o.extraGas));let W=o.gasFeePaymentMethod==="stablecoin",Y=this.algorand.newGroup(),f,T;W?(f=h,T=I+f):(Y.addPayment({sender:d,receiver:s.appAddress,amount:Cs.AlgoAmount.MicroAlgo(h)}),f=0n,T=I),Y.addAssetTransfer({assetId:c,amount:T,sender:d,receiver:s.appAddress}).addAppCallMethodCall(await s.params.swapAndBridge({args:{tokenId:c,recipient:g,destinationChainId:A,receiveToken:l,nonce:m,feeTokenAmount:f},sender:d,extraFee:an(W?9:8)})),fn({composer:Y,appId:r,sender:d,count:W?2:1});let{transactions:G}=await Y.buildTransactions();return Rt(...G)}async buildRawTransactionSwap(i){let o=De(this.chainType,i),r=Fn.Address.fromString(i.fromAccountAddress),s=i.toAccountAddress,d=BigInt(i.sourceToken.tokenAddress),c=BigInt(i.destinationToken.tokenAddress),A=BigInt(o.minimumReceiveAmount),g=BigInt(i.amount);if(!i.sourceToken.bridgeId)throw new B("ALG sourceToken must contain 'bridgeId'");let l=BigInt(i.sourceToken.bridgeId),m=this.getBridge(l),I=this.algorand.newGroup();I.addAssetTransfer({assetId:d,amount:g,sender:r,receiver:m.appAddress}),I.addAppCallMethodCall(await m.params.swap({args:{tokenId:d,recipient:s,receiveTokenId:c,receiveAmountMin:A},sender:r,extraFee:an(4)})),fn({composer:I,appId:l,sender:r,count:1});let{transactions:h}=await I.buildTransactions();return Rt(...h)}getBridge(i){return this.algorand.client.getTypedAppClientById(ia,{appId:i})}};var Ns=require("big.js");var Oc={abi:[{inputs:[{internalType:"uint256",name:"_chainId",type:"uint256"},{internalType:"uint256",name:"_chainPrecision",type:"uint256"},{internalType:"contract Messenger",name:"_allbridgeMessenger",type:"address"},{internalType:"contract WormholeMessenger",name:"_wormholeMessenger",type:"address"},{internalType:"contract IGasOracle",name:"_gasOracle",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"gas",type:"uint256"}],name:"BridgingFeeFromTokens",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"bridgeTransactionCost",type:"uint256"},{indexed:!1,internalType:"uint256",name:"messageTransactionCost",type:"uint256"}],name:"ReceiveFee",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"Received",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"bytes32",name:"sendToken",type:"bytes32"},{indexed:!1,internalType:"bytes32",name:"receiveToken",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"sendAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receiveAmount",type:"uint256"}],name:"Swapped",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"recipient",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"nonce",type:"uint256"},{indexed:!1,internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"},{indexed:!1,internalType:"bytes32",name:"message",type:"bytes32"}],name:"TokensReceived",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"recipient",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"destinationChainId",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"receiveToken",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"nonce",type:"uint256"},{indexed:!1,internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"}],name:"TokensSent",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[{internalType:"uint256",name:"_chainId",type:"uint256"},{internalType:"bytes32",name:"tokenAddress",type:"bytes32"}],name:"addBridgeToken",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract Pool",name:"pool",type:"address"},{internalType:"bytes32",name:"token",type:"bytes32"}],name:"addPool",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"canSwap",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[],name:"chainId",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"gasUsage",outputs:[{internalType:"uint256",name:"amount",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"},{internalType:"address",name:"tokenAddress",type:"address"}],name:"getBridgingCostInTokens",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"enum MessengerProtocol",name:"protocol",type:"uint8"}],name:"getMessageCost",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"enum MessengerProtocol",name:"protocol",type:"uint8"}],name:"getMessageGasUsage",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"getTransactionCost",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"message",type:"bytes32"},{internalType:"enum MessengerProtocol",name:"protocol",type:"uint8"}],name:"hasReceivedMessage",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"message",type:"bytes32"}],name:"hasSentMessage",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"sourceChainId",type:"uint256"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"bytes32",name:"receiveToken",type:"bytes32"},{internalType:"uint256",name:"nonce",type:"uint256"},{internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"}],name:"hashMessage",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"pure",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"bytes32",name:"tokenAddress",type:"bytes32"}],name:"otherBridgeTokens",outputs:[{internalType:"bool",name:"isSupported",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"otherBridges",outputs:[{internalType:"bytes32",name:"bridgeAddress",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"tokenId",type:"bytes32"}],name:"pools",outputs:[{internalType:"contract Pool",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"messageHash",type:"bytes32"}],name:"processedMessages",outputs:[{internalType:"uint256",name:"isProcessed",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"sourceChainId",type:"uint256"},{internalType:"bytes32",name:"receiveToken",type:"bytes32"},{internalType:"uint256",name:"nonce",type:"uint256"},{internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"},{internalType:"uint256",name:"receiveAmountMin",type:"uint256"}],name:"receiveTokens",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"_chainId",type:"uint256"},{internalType:"bytes32",name:"bridgeAddress",type:"bytes32"}],name:"registerBridge",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"_chainId",type:"uint256"},{internalType:"bytes32",name:"tokenAddress",type:"bytes32"}],name:"removeBridgeToken",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"messageHash",type:"bytes32"}],name:"sentMessages",outputs:[{internalType:"uint256",name:"isSent",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"contract Messenger",name:"_allbridgeMessenger",type:"address"}],name:"setAllbridgeMessenger",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IGasOracle",name:"_gasOracle",type:"address"}],name:"setGasOracle",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"uint256",name:"gasAmount",type:"uint256"}],name:"setGasUsage",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_rebalancer",type:"address"}],name:"setRebalancer",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_stopAuthority",type:"address"}],name:"setStopAuthority",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract WormholeMessenger",name:"_wormholeMessenger",type:"address"}],name:"setWormholeMessenger",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"startSwap",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"stopSwap",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"token",type:"bytes32"},{internalType:"bytes32",name:"receiveToken",type:"bytes32"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"receiveAmountMin",type:"uint256"}],name:"swap",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"token",type:"bytes32"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"bytes32",name:"receiveToken",type:"bytes32"},{internalType:"uint256",name:"nonce",type:"uint256"},{internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"},{internalType:"uint256",name:"feeTokenAmount",type:"uint256"}],name:"swapAndBridge",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IERC20",name:"token",type:"address"}],name:"withdrawBridgingFeeInTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"withdrawGasTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}]},bs=Oc;var Qc={abi:[{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint256",name:"chainPrecision_",type:"uint256"},{internalType:"address",name:"tokenAddress",type:"address"},{internalType:"address",name:"cctpMessenger_",type:"address"},{internalType:"address",name:"cctpTransmitter_",type:"address"},{internalType:"contract IGasOracle",name:"gasOracle_",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"ReceivedExtraGas",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"ReceivedGas",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint256",name:"nonce",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"newRecipient",type:"bytes32"}],name:"RecipientReplaced",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bytes32",name:"recipientWalletAddress",type:"bytes32"}],name:"TokensSentExtras",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"bytes32",name:"recipient",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"destinationChainId",type:"uint256"},{indexed:!1,internalType:"uint256",name:"nonce",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeFromGas",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeFromTokens",type:"uint256"},{indexed:!1,internalType:"uint256",name:"relayerFee",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeTokenAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"adminFeeTokenAmount",type:"uint256"}],name:"TokensSent",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[],name:"adminFeeShareBP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"uint256",name:"relayerFeeTokenAmount",type:"uint256"}],name:"bridge",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"bytes32",name:"recipientWalletAddress",type:"bytes32"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"uint256",name:"relayerFeeTokenAmount",type:"uint256"}],name:"bridgeWithWalletAddress",outputs:[],stateMutability:"payable",type:"function"},{inputs:[],name:"chainId",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes",name:"originalMessage",type:"bytes"},{internalType:"bytes",name:"originalAttestation",type:"bytes"},{internalType:"bytes32",name:"newRecipient",type:"bytes32"}],name:"changeRecipient",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"gasUsage",outputs:[{internalType:"uint256",name:"amount",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"destinationChainId",type:"uint256"}],name:"getBridgingCostInTokens",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"}],name:"getDomainByChainId",outputs:[{internalType:"uint32",name:"",type:"uint32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"getTransactionCost",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"sourceChainId",type:"uint256"},{internalType:"uint64",name:"nonce",type:"uint64"}],name:"isMessageProcessed",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"bytes",name:"message",type:"bytes"},{internalType:"bytes",name:"signature",type:"bytes"}],name:"receiveTokens",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint32",name:"domain",type:"uint32"}],name:"registerBridgeDestination",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"adminFeeShareBP_",type:"uint256"}],name:"setAdminFeeShare",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IGasOracle",name:"gasOracle_",type:"address"}],name:"setGasOracle",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"uint256",name:"gasAmount",type:"uint256"}],name:"setGasUsage",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"}],name:"unregisterBridgeDestination",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"withdrawFeeInTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"withdrawGas",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}]},Is=Qc;var Kc={abi:[{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint256",name:"chainPrecision_",type:"uint256"},{internalType:"contract IGasOracle",name:"gasOracle_",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{inputs:[{internalType:"uint16",name:"optionType",type:"uint16"}],name:"InvalidOptionType",type:"error"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"bytes32",name:"recipient",type:"bytes32"},{indexed:!1,internalType:"address",name:"tokenAddress",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"destinationChainId",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeFromGas",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeFromTokens",type:"uint256"},{indexed:!1,internalType:"uint256",name:"relayerFeeWithExtraGas",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeTokenAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"adminFeeTokenAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"extraGasDestinationToken",type:"uint256"}],name:"OftTokensSent",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"ReceivedGas",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[{internalType:"address",name:"oft_",type:"address"}],name:"addToken",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"tokenAddress",type:"address"}],name:"adminFeeShareBP",outputs:[{internalType:"uint256",name:"feeShare",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"tokenAddress",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"uint256",name:"relayerFeeTokenAmount",type:"uint256"},{internalType:"uint256",name:"extraGasInDestinationToken",type:"uint256"},{internalType:"uint256",name:"slippageBP",type:"uint256"}],name:"bridge",outputs:[],stateMutability:"payable",type:"function"},{inputs:[],name:"chainId",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"tokenAddress_",type:"address"},{internalType:"uint256",name:"destinationChainId_",type:"uint256"},{internalType:"uint128",name:"extraGasAmount_",type:"uint128"}],name:"extraGasPrice",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"}],name:"getEidByChainId",outputs:[{internalType:"uint32",name:"",type:"uint32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"tokenAddress",type:"address"}],name:"oftAddress",outputs:[{internalType:"address",name:"oftAddress",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint32",name:"eid_",type:"uint32"},{internalType:"uint128",name:"lzGasLimit_",type:"uint128"}],name:"registerBridgeDestination",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"tokenAddress_",type:"address"},{internalType:"uint256",name:"destinationChainId_",type:"uint256"}],name:"relayerFee",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"oft_",type:"address"}],name:"removeToken",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"tokenAddress_",type:"address"},{internalType:"uint256",name:"adminFeeShareBP_",type:"uint256"}],name:"setAdminFeeShare",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint128",name:"lzGasLimit_",type:"uint128"}],name:"setLzGasLimit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint256",name:"maxExtraGas_",type:"uint256"}],name:"setMaxExtraGas",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"}],name:"unregisterBridgeDestination",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IERC20",name:"token_",type:"address"}],name:"withdrawFeeInTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount_",type:"uint256"}],name:"withdrawGas",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}]},ys=Kc;var sa=ge(require("@project-serum/anchor")),To=require("@solana/web3.js");var Re=ge(require("@project-serum/anchor")),Be=require("@solana/web3.js");async function at(a,n){return Re.utils.token.associatedAddress({mint:n,owner:a})}async function Qt(a){let[n]=await Be.PublicKey.findProgramAddress([Re.utils.bytes.utf8.encode("config")],a);return n}async function hs(a,n){let[i]=await Be.PublicKey.findProgramAddress([Re.utils.bytes.utf8.encode("lock"),Uint8Array.from(a)],n);return i}async function bi(a,n){let[i]=await Be.PublicKey.findProgramAddress([Re.utils.bytes.utf8.encode("price_v2"),Uint8Array.from([a])],n);return i}async function Nn(a){let n=await Qt(a),[i]=await Be.PublicKey.findProgramAddress([n.toBuffer()],a);return i}async function vs(a,n){let[i]=await Be.PublicKey.findProgramAddress([a.toBuffer()],n);return i}async function Tn(a,n){let[i]=await Be.PublicKey.findProgramAddress([Re.utils.bytes.utf8.encode("token"),a.toBytes()],n);return i}async function Rs(a,n,i){let[o]=await Be.PublicKey.findProgramAddress([Re.utils.bytes.utf8.encode("other_bridge_token"),Buffer.from([a]),n],i);return o}async function Go(a,n){let[i]=await Be.PublicKey.findProgramAddress([Re.utils.bytes.utf8.encode("chain_bridge"),Uint8Array.from([a])],n);return i}async function Fo(a,n){let[i]=await Be.PublicKey.findProgramAddress([Re.utils.bytes.utf8.encode("gas_usage"),Uint8Array.from([a])],n);return i}async function Bs(a,n){let[i]=await Be.PublicKey.findProgramAddress([Re.utils.bytes.utf8.encode("sent_message"),a],n);return i}async function No(a,n,i){let[o]=await Be.PublicKey.findProgramAddress([Re.utils.bytes.utf8.encode("user_deposit"),n.toBytes(),a.toBytes()],i);return o}async function Ys(a,n){let[i]=await Be.PublicKey.findProgramAddress([Re.utils.bytes.utf8.encode("cctp_bridge"),a.toBytes()],n);return i}async function Ws(a,n){let[i]=await Be.PublicKey.findProgramAddress([Re.utils.bytes.utf8.encode("token"),a.toBytes()],n);return i}function fs(a,n){let[i]=Be.PublicKey.findProgramAddressSync([Re.utils.bytes.utf8.encode("lock"),n.toBuffer()],a);return i}function Gs(a,n,i,o){let r=rn("message_transmitter",i),s=rn("token_messenger",o),d=rn("__event_authority",o),c=rn("token_minter",o),A=rn("local_token",o,[n]),g=rn("remote_token_messenger",o,[a.toString()]),l=rn("sender_authority",o);return{messageTransmitterAccount:r,tokenMessenger:s,tokenMessengerEventAuthority:d,tokenMinter:c,localToken:A,remoteTokenMessengerKey:g,authorityPda:l}}function rn(a,n,i=[]){let o=[Buffer.from(Re.utils.bytes.utf8.encode(a))];for(let s of i)typeof s=="string"?o.push(Buffer.from(Re.utils.bytes.utf8.encode(s))):Array.isArray(s)||Buffer.isBuffer(s)?o.push(Buffer.from(Uint8Array.from(s))):o.push(Buffer.from(Uint8Array.from(s.toBuffer())));return Be.PublicKey.findProgramAddressSync(o,n)[0]}var Fs=require("@project-serum/anchor"),ra=require("@solana/web3.js");function Kt(a,n){let i=new ra.Connection(a,"confirmed"),o=new ra.PublicKey(n);return new Fs.AnchorProvider(i,{publicKey:o},{preflightCommitment:"confirmed",commitment:"confirmed"})}async function da(a,n,i,o){let r,s=new To.PublicKey(n),d=new To.PublicKey(i),c=await at(s,d),A=Kt(o,n);sa.setProvider(A);let g=await sa.Spl.token(A).account.token.fetchNullable(c);if(g?.authority.equals(s))r=wt(c.toBase58(),"SOLANA",a);else{let l=await A.connection.getTokenAccountsByOwner(s,{mint:d});if(l.value.length===0&&!g)r=wt(c.toBase58(),"SOLANA",a);else if(l.value.length>0){let m=l.value[0];if(!m?.pubkey)throw new B("First token account or its public key is undefined");r=wt(m.pubkey.toBase58(),"SOLANA",a)}else throw new B("Associated account has wrong owner")}return r}var Ii=class extends Ge{constructor(i,o,r){super();this.web3=i;this.api=o;this.nodeRpcUrlsConfig=r}chainType="EVM";async send(i){let o=await this.buildRawTransactionSend(i);return this.sendRawTransaction(o)}async buildRawTransactionSwap(i){let o=De(this.chainType,i);return await this.buildRawTransactionSwapFromParams(o)}async buildRawTransactionSwapFromParams(i){let{amount:o,contractAddress:r,fromAccountAddress:s,fromTokenAddress:d,toAccountAddress:c,toTokenAddress:A,minimumReceiveAmount:g}=i,m=this.getBridgeContract(r).methods.swap(o,d,A,c,g);return Promise.resolve({from:s,to:r,data:m.encodeABI()})}async buildRawTransactionSend(i){let o=await ke(this.chainType,i,this.api),{amount:r,contractAddress:s,fromAccountAddress:d,fromTokenAddress:c,toChainId:A,toAccountAddress:g,toTokenAddress:l,messenger:m,fee:I,gasFeePaymentMethod:h,extraGas:W,extraGasDest:Y}=o,f="0x"+Gn().toString("hex"),T,G,Z=I;switch(W&&(Z=(0,Ns.Big)(Z).plus(W).toFixed()),m){case 3:case 4:{let P=await this.buildRawTransactionCctpSend(i,o,Z);T=P.sendMethod,G=P.value;break}case 5:{let P=this.buildRawTransactionOftSend(i,o,Z,Y);T=P.sendMethod,G=P.value;break}case 1:case 2:{let P=this.getBridgeContract(s);h==="stablecoin"?(T=P.methods.swapAndBridge(c,r,g,A,l,f,m,Z),G="0"):(T=P.methods.swapAndBridge(c,r,g,A,l,f,m,0),G=Z)}break}return Promise.resolve({from:d,to:s,value:G,data:T.encodeABI()})}async buildRawTransactionCctpSend(i,o,r){let{amount:s,contractAddress:d,toChainId:c,toAccountAddress:A,gasFeePaymentMethod:g}=o,l=this.getCctpBridgeContract(d),m,I;if(i.destinationToken.chainType==="SOLANA"){let h=await da(this.chainType,i.toAccountAddress,i.destinationToken.tokenAddress,this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"));g==="stablecoin"?(m=l.methods.bridgeWithWalletAddress(s,h,A,c,r),I="0"):(m=l.methods.bridgeWithWalletAddress(s,h,A,c,0),I=r)}else g==="stablecoin"?(m=l.methods.bridge(s,A,c,r),I="0"):(m=l.methods.bridge(s,A,c,0),I=r);return{sendMethod:m,value:I}}buildRawTransactionOftSend(i,o,r,s){let{amount:d,contractAddress:c,toChainId:A,toAccountAddress:g,gasFeePaymentMethod:l}=o,m=this.getOftBridgeContract(c),I,h;return l==="stablecoin"?(I=m.methods.bridge(i.sourceToken.tokenAddress,d,g,A,r,s??"0","10"),h="0"):(I=m.methods.bridge(i.sourceToken.tokenAddress,d,g,A,0,s??"0","10"),h=r),{sendMethod:I,value:h}}async sendRawTransaction(i){let o=await this.web3.eth.estimateGas(i),r={maxPriorityFeePerGas:null,maxFeePerGas:null},{transactionHash:s}=await this.web3.eth.sendTransaction({...i,gas:o,...r});return{txId:s.toString()}}getBridgeContract(i){return new this.web3.eth.Contract(bs.abi,i)}getCctpBridgeContract(i){return new this.web3.eth.Contract(Is.abi,i)}getOftBridgeContract(i){return new this.web3.eth.Contract(ys.abi,i)}};var ca=class{constructor(n,i,o,r){this.api=n;this.nodeRpcUrlsConfig=i;this.params=o;this.tokenService=r}async approve(n,i){let o,r;i?(o=n,r=i):r=n;let s=yi(r.token,r.messenger);return this.tokenService.buildRawTransactionApprove({...r,spender:s},o)}async send(n,i){return H(n.amount),z("amount",n.amount,n.sourceToken.decimals),ps(n)?Aa(n.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,i).buildRawTransactionSend(n):Aa(n.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,i).buildRawTransactionSwap(n)}};var se=require("@project-serum/anchor"),q=require("@solana/web3.js"),Ee=require("big.js");var hi={version:"0.1.0",name:"bridge",instructions:[{name:"initialize",accounts:[{name:"admin",isMut:!0,isSigner:!0},{name:"config",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"InitializeArgs"}}]},{name:"initializePool",accounts:[{name:"payer",isMut:!0,isSigner:!0},{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"mint",isMut:!1,isSigner:!1},{name:"token",isMut:!0,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1},{name:"rent",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"InitializePoolArgs"}}]},{name:"initDepositAccount",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"userDeposit",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[]},{name:"deposit",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"userDeposit",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"amount",type:"u64"}]},{name:"withdraw",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"userDeposit",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"amountLp",type:"u64"}]},{name:"swapAndBridge",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"lock",isMut:!0,isSigner:!1},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!0,isSigner:!1},{name:"otherBridgeToken",isMut:!0,isSigner:!1},{name:"messenger",isMut:!1,isSigner:!1},{name:"messengerConfig",isMut:!0,isSigner:!1},{name:"sentMessageAccount",isMut:!0,isSigner:!1},{name:"messengerGasUsage",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"gasPrice",isMut:!1,isSigner:!1},{name:"thisGasPrice",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!1,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"BridgeArgs"}}]},{name:"swapAndBridgeWormhole",accounts:[{name:"user",isMut:!1,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"lock",isMut:!0,isSigner:!1},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!0,isSigner:!1},{name:"otherBridgeToken",isMut:!0,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"gasPrice",isMut:!1,isSigner:!1},{name:"thisGasPrice",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!1,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"wormholeMessenger",isMut:!1,isSigner:!1},{name:"wormholeMessengerConfig",isMut:!0,isSigner:!1},{name:"wormholeProgram",isMut:!1,isSigner:!1},{name:"bridge",isMut:!0,isSigner:!1},{name:"message",isMut:!0,isSigner:!0},{name:"sequence",isMut:!0,isSigner:!1},{name:"feeCollector",isMut:!0,isSigner:!1},{name:"messengerGasUsage",isMut:!1,isSigner:!1},{name:"clock",isMut:!1,isSigner:!1},{name:"rent",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"BridgeArgs"}}]},{name:"swap",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"sendMint",isMut:!1,isSigner:!1},{name:"receiveMint",isMut:!1,isSigner:!1},{name:"config",isMut:!0,isSigner:!1},{name:"sendPool",isMut:!0,isSigner:!1},{name:"receivePool",isMut:!0,isSigner:!1},{name:"sendBridgeToken",isMut:!0,isSigner:!1},{name:"receiveBridgeToken",isMut:!0,isSigner:!1},{name:"sendUserToken",isMut:!0,isSigner:!1},{name:"receiveUserToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1}],args:[{name:"amount",type:"u64"},{name:"receiveAmountMin",type:"u64"}]},{name:"registerChainBridge",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"RegisterChainBridgeArgs"}}]},{name:"updateChainBridge",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!0,isSigner:!1}],args:[{name:"args",type:{defined:"UpdateChainBridgeArgs"}}]},{name:"receiveAndSwap",accounts:[{name:"user",isMut:!0,isSigner:!1},{name:"payer",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"receivedMessageAccount",isMut:!1,isSigner:!1},{name:"unlock",isMut:!0,isSigner:!1},{name:"chainBridge",isMut:!1,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1},{name:"messengerProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"UnlockArgs"}}]},{name:"receiveAndSwapWormhole",accounts:[{name:"user",isMut:!0,isSigner:!1},{name:"payer",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"receivedMessageAccount",isMut:!1,isSigner:!1},{name:"unlock",isMut:!0,isSigner:!1},{name:"chainBridge",isMut:!1,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1},{name:"messengerProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"UnlockArgs"}}]},{name:"withdrawGasToken",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"recipient",isMut:!0,isSigner:!1},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"amount",type:"u64"}]},{name:"claimRewards",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"userDeposit",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[]},{name:"setAdmin",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"newAdmin",isMut:!1,isSigner:!1},{name:"config",isMut:!0,isSigner:!1}],args:[]},{name:"startBridge",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"actionType",type:{defined:"ActionType"}}]},{name:"stopBridge",accounts:[{name:"stopAuthority",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"actionType",type:{defined:"ActionType"}}]},{name:"setRebalancer",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1},{name:"rebalancer",isMut:!1,isSigner:!1}],args:[]},{name:"setStopAuthority",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"newAuthority",isMut:!1,isSigner:!1},{name:"config",isMut:!0,isSigner:!1}],args:[]},{name:"setAllbridgeMessengerProgramId",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"newProgramId",type:"publicKey"}]},{name:"setWormholeMessengerProgramId",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"newProgramId",type:"publicKey"}]},{name:"setGasOracleProgramId",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"newProgramId",type:"publicKey"}]},{name:"setPoolFeeShare",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1}],args:[{name:"feeShareBp",type:"u64"}]},{name:"setBalanceRatioMin",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1}],args:[{name:"balanceRatioMinBp",type:"u16"}]},{name:"setPoolAdminFeeShare",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1}],args:[{name:"feeShareBp",type:"u64"}]},{name:"addOtherBridgeToken",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"otherBridgeToken",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"chainId",type:"u8"},{name:"tokenAddress",type:{array:["u8",32]}}]},{name:"removeOtherBridgeToken",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"config",isMut:!0,isSigner:!1},{name:"otherBridgeToken",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"chainId",type:"u8"},{name:"tokenAddress",type:{array:["u8",32]}}]},{name:"withdrawAdminFee",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"adminToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[]},{name:"adjustTotalLpAmount",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"userDeposit",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1}],args:[]}],accounts:[{name:"chainBridge",type:{kind:"struct",fields:[{name:"address",type:{array:["u8",32]}},{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"}]}},{name:"config",type:{kind:"struct",fields:[{name:"admin",type:"publicKey"},{name:"allbridgeMessengerProgramId",type:"publicKey"},{name:"wormholeMessengerProgramId",type:"publicKey"},{name:"gasOracleProgramId",type:"publicKey"},{name:"rebalancer",type:"publicKey"},{name:"stopAuthority",type:"publicKey"},{name:"authorityBumpSeed",type:"u8"},{name:"canSwap",type:"bool"},{name:"canDeposit",type:"bool"},{name:"canWithdraw",type:"bool"}]}},{name:"lock",type:{kind:"struct",fields:[{name:"sender",type:"publicKey"},{name:"sentTokenAddress",type:"publicKey"},{name:"amount",type:"u64"},{name:"vusdAmount",type:"u64"},{name:"recipient",type:{array:["u8",32]}},{name:"destinationChainId",type:"u8"},{name:"receiveToken",type:{array:["u8",32]}},{name:"nonce",type:{array:["u8",32]}},{name:"messenger",type:{defined:"Messenger"}},{name:"slot",type:"u64"},{name:"fee",type:"u64"}]}},{name:"otherBridgeToken",type:{kind:"struct",fields:[]}},{name:"pool",type:{kind:"struct",fields:[{name:"mint",type:"publicKey"},{name:"a",type:"u64"},{name:"d",type:"u64"},{name:"tokenBalance",type:"u64"},{name:"vUsdBalance",type:"u64"},{name:"reserves",type:"u64"},{name:"decimals",type:"u8"},{name:"totalLpAmount",type:"u64"},{name:"feeShareBp",type:"u64"},{name:"adminFeeShareBp",type:"u64"},{name:"accRewardPerShareP",type:"u128"},{name:"adminFeeAmount",type:"u64"},{name:"balanceRatioMinBp",type:"u16"}]}},{name:"unlock",type:{kind:"struct",fields:[{name:"hash",type:{array:["u8",32]}},{name:"amount",type:"u64"},{name:"fee",type:"u64"},{name:"vUsdAmount",type:"u64"},{name:"slot",type:"u64"}]}},{name:"userDeposit",type:{kind:"struct",fields:[{name:"userAddress",type:"publicKey"},{name:"mint",type:"publicKey"},{name:"lpAmount",type:"u64"},{name:"rewardDebt",type:"u64"}]}}],types:[{name:"RegisterChainBridgeArgs",type:{kind:"struct",fields:[{name:"chainBridgeAddress",type:{array:["u8",32]}},{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"}]}},{name:"UpdateChainBridgeArgs",type:{kind:"struct",fields:[{name:"chainBridgeAddress",type:{array:["u8",32]}},{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"}]}},{name:"InitializeArgs",type:{kind:"struct",fields:[{name:"allbridgeMessengerProgramId",type:"publicKey"},{name:"wormholeMessengerProgramId",type:"publicKey"},{name:"gasOracleProgramId",type:"publicKey"}]}},{name:"InitializePoolArgs",type:{kind:"struct",fields:[{name:"a",type:"u64"},{name:"feeShareBp",type:"u64"},{name:"adminFeeShareBp",type:"u64"},{name:"balanceRatioMinBp",type:"u16"}]}},{name:"BridgeArgs",type:{kind:"struct",fields:[{name:"nonce",type:{array:["u8",32]}},{name:"recipient",type:{array:["u8",32]}},{name:"destinationChainId",type:"u8"},{name:"receiveToken",type:{array:["u8",32]}},{name:"vusdAmount",type:"u64"}]}},{name:"UnlockArgs",type:{kind:"struct",fields:[{name:"nonce",type:{array:["u8",32]}},{name:"amount",type:"u64"},{name:"recipient",type:"publicKey"},{name:"sourceChainId",type:"u8"},{name:"receiveToken",type:"publicKey"},{name:"messenger",type:{defined:"Messenger"}},{name:"hash",type:{array:["u8",32]}},{name:"receiveAmountMin",type:"u64"}]}},{name:"RewardError",type:{kind:"enum",variants:[{name:"FeeTooHigh"}]}},{name:"Messenger",type:{kind:"enum",variants:[{name:"None"},{name:"Allbridge"},{name:"Wormhole"}]}},{name:"ActionType",type:{kind:"enum",variants:[{name:"Deposit"},{name:"Withdraw"},{name:"Swap"}]}}],errors:[{code:6e3,name:"AccountAlreadyInitialized",msg:"This account has already been initialized"},{code:6001,name:"AdminAuthorityInvalid",msg:"This instruction requires admin authority"},{code:6002,name:"InvalidSignature",msg:"Provided signature has wrong signer or message"},{code:6003,name:"InvalidHash",msg:"Wrong unlock message hash"},{code:6004,name:"PoolOverflow",msg:"PoolInfo overflow"},{code:6005,name:"ReservesExhausted",msg:"Reserves exhausted"},{code:6006,name:"ZeroAmount",msg:"Zero amount"},{code:6007,name:"ZeroChanges",msg:"Zero changes"},{code:6008,name:"HighVusdAmount",msg:"vUSD amount is too high"},{code:6009,name:"BalanceRatioExceeded",msg:"Balance ratio exceeded"},{code:6010,name:"InsufficientReceivedAmount",msg:"Received insufficient amount"},{code:6011,name:"ForbiddenAction",msg:"ForbiddenAction"},{code:6012,name:"ValueTooHigh",msg:"Value is too high"}]};var Ts={version:"0.1.0",name:"cctp_bridge",instructions:[{name:"initialize",accounts:[{name:"payer",isMut:!0,isSigner:!0},{name:"admin",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"rent",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"InitializeArgs"}}]},{name:"bridge",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"messageSentEventData",isMut:!0,isSigner:!0},{name:"lock",isMut:!0,isSigner:!1},{name:"mint",isMut:!0,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1},{name:"cctpMessenger",isMut:!1,isSigner:!1},{name:"messageTransmitterProgram",isMut:!1,isSigner:!1},{name:"messageTransmitterAccount",isMut:!0,isSigner:!1},{name:"tokenMessenger",isMut:!1,isSigner:!1},{name:"tokenMinter",isMut:!1,isSigner:!1},{name:"localToken",isMut:!0,isSigner:!1},{name:"remoteTokenMessengerKey",isMut:!1,isSigner:!1},{name:"authorityPda",isMut:!1,isSigner:!1},{name:"eventAuthority",isMut:!1,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"gasPrice",isMut:!1,isSigner:!1},{name:"thisGasPrice",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!1,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"BridgeArgs"}}]},{name:"registerChainBridge",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"cctpBridge",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"RegisterChainBridgeArgs"}}]},{name:"updateChainBridge",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"cctpBridge",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!0,isSigner:!1}],args:[{name:"args",type:{defined:"UpdateChainBridgeArgs"}}]},{name:"setAdminFeeShare",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1}],args:[{name:"feeShareBp",type:"u64"}]},{name:"setGasOracleProgramId",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1}],args:[{name:"newProgramId",type:"publicKey"}]},{name:"withdrawGasToken",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"recipient",isMut:!0,isSigner:!1},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1}],args:[{name:"amount",type:"u64"}]},{name:"withdrawAdminFee",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!1,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"adminToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[]},{name:"setCctpTokenMessengerMinter",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1}],args:[{name:"newProgramId",type:"publicKey"}]}],accounts:[{name:"cctpBridge",type:{kind:"struct",fields:[{name:"mint",type:"publicKey"},{name:"admin",type:"publicKey"},{name:"cctpTokenMessengerMinter",type:"publicKey"},{name:"gasOracleProgramId",type:"publicKey"},{name:"authorityBumpSeed",type:"u8"},{name:"adminFeeShareBp",type:"u64"},{name:"adminFeeAmount",type:"u64"}]}},{name:"chainBridge",type:{kind:"struct",fields:[{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"},{name:"domain",type:"u32"}]}},{name:"lock",type:{kind:"struct",fields:[{name:"sender",type:"publicKey"},{name:"amount",type:"u64"},{name:"adminFee",type:"u64"},{name:"relayerFee",type:"u64"},{name:"recipient",type:{array:["u8",32]}},{name:"destinationChainId",type:"u8"},{name:"slot",type:"u64"}]}}],types:[{name:"RegisterChainBridgeArgs",type:{kind:"struct",fields:[{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"},{name:"domain",type:"u32"},{name:"mint",type:"publicKey"}]}},{name:"UpdateChainBridgeArgs",type:{kind:"struct",fields:[{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"},{name:"domain",type:"u32"},{name:"mint",type:"publicKey"}]}},{name:"BridgeArgs",type:{kind:"struct",fields:[{name:"recipient",type:{array:["u8",32]}},{name:"destinationChainId",type:"u8"},{name:"receiveToken",type:{array:["u8",32]}},{name:"amount",type:"u64"}]}},{name:"InitializeArgs",type:{kind:"struct",fields:[{name:"gasOracleProgramId",type:"publicKey"},{name:"cctpTokenMessengerMinter",type:"publicKey"}]}}],errors:[{code:6e3,name:"ValueTooHigh",msg:"Value is too high"}]};var Zs=require("@project-serum/anchor"),ws=ge(require("big.js")),vi=require("web3");async function Zn(a,n){return await Zs.Spl.token(n).account.token.fetch(a)}async function Ss(a,n,i){let o=await n.account.pool.fetch(i),r=o.decimals,s=(0,ws.default)(o.feeShareBp.toString()).div(1e4).toFixed(),d={aValue:o.a.toString(),dValue:o.d.toString(),totalLpAmount:o.totalLpAmount.toString(),tokenBalance:o.tokenBalance.toString(),vUsdBalance:o.vUsdBalance.toString(),accRewardPerShareP:o.accRewardPerShareP.toString()};return Bt(a,{decimals:r,feeShare:s},d)}function Vs(a){let n=a.amount,i="0x"+a.recipient.toString("hex"),o=a.sourceChainId,r=a.destinationChainId,s="0x"+a.receiveToken.toString("hex"),d="0x"+a.nonce.toString("hex"),c=1,A="0x"+a.chainBridge.toString("hex"),g=vi.Web3.utils.encodePacked({t:"uint256",v:n},{t:"bytes32",v:i},{t:"uint256",v:o},{t:"bytes32",v:s},{t:"uint256",v:d},{t:"uint8",v:c});if(!g)throw new B("message cannot be undefined");let l=vi.Web3.utils.keccak256(Buffer.from(g.replace("0x",""),"hex")),m=Buffer.from(l.replace("0x",""),"hex");m[0]=o,m[1]=r;let I=vi.Web3.utils.encodePacked({t:"bytes32",v:"0x"+m.toString("hex")},{t:"bytes32",v:A});if(!I)throw new nn("messageWithSigner cannot be undefined");let h=vi.Web3.utils.keccak256(Buffer.from(I.replace("0x",""),"hex")),W=Buffer.from(h.replace("0x",""),"hex");return W[0]=m[0],W[1]=m[1],W}var ze=require("@solana/web3.js"),Xs=require("big.js");var Zo=require("@solana/web3.js");async function sn(a,n){return await Promise.all(a.message.addressTableLookups.map(async i=>new Zo.AddressLookupTableAccount({key:i.accountKey,state:Zo.AddressLookupTableAccount.deserialize(await n.getAccountInfo(i.accountKey).then(o=>{if(!o)throw new B("Cannot get AccountInfo");return o.data}))})))}var ga="AUTO";async function wn(a,n,i){let o=new ze.Connection(i,"confirmed"),r=(await o.simulateTransaction(a)).value.unitsConsumed;await js(a.instructions,r,n,o)}async function Ms(a,n,i){let o=new ze.Connection(i,"confirmed"),r=await sn(a,o),s=ze.TransactionMessage.decompile(a.message,{addressLookupTableAccounts:r});if(a.serialize().length>1232)throw new Ai;await js(s.instructions,769230,n,o),a.message=s.compileToV0Message(r)}async function js(a,n,i,o){if(n>0){let r=Uc(n,a);if(i?.solana){let s=i.solana;if(s===ga)await wo(a,o);else if("pricePerUnitInMicroLamports"in s)await wo(a,o,s.pricePerUnitInMicroLamports);else{let d=(0,Xs.Big)(s.extraFeeInLamports).div(r).mul(li(6)).toFixed(0);await wo(a,o,d)}}}}function Uc(a,n){let i=n.findIndex(s=>s.programId.equals(ze.ComputeBudgetProgram.programId)&&ze.ComputeBudgetInstruction.decodeInstructionType(s)==="SetComputeUnitLimit"),o=Number((a*1.3).toFixed(0)),r=ze.ComputeBudgetProgram.setComputeUnitLimit({units:o});return i>=0?n[i]=r:n.push(r),o.toString()}async function wo(a,n,i){let o=a.findIndex(d=>d.programId.equals(ze.ComputeBudgetProgram.programId)&&ze.ComputeBudgetInstruction.decodeInstructionType(d)==="SetComputeUnitPrice"),r=BigInt(i||await Dc(n)),s=ze.ComputeBudgetProgram.setComputeUnitPrice({microLamports:r});return o>=0?a[o]=s:a.push(s),r.toString()}async function Dc(a){let n=await a.getRecentPrioritizationFees(),i=0;for(let o of n)i+=o.prioritizationFee;return(i/n.length).toFixed(0)}var Ps=require("@solana/spl-token"),dn=require("@solana/web3.js"),Sn=ge(require("axios"));var la=class{connection;jupiterUrl;apiKeyHeader;maxAccounts;constructor(n,i){this.connection=new dn.Connection(n),this.jupiterUrl=i.jupiterUrl.replace(/\/$/,""),this.apiKeyHeader=i.jupiterApiKeyHeader,this.maxAccounts=i.jupiterMaxAccounts}async getJupiterSwapTx(n,i,o,r){let s;try{let m=r?"ExactOut":"ExactIn",I=`${this.jupiterUrl}/quote?inputMint=${i}&outputMint=${Ps.NATIVE_MINT.toString()}&amount=${o}&swapMode=${m}&slippageBps=100&onlyDirectRoutes=true`;this.maxAccounts&&(I+=`&maxAccounts=${this.maxAccounts}`),s=await Sn.default.get(I,{headers:this.apiKeyHeader?{"x-api-key":this.apiKeyHeader}:void 0})}catch(m){throw m instanceof Sn.AxiosError&&m.response&&m.response.data&&m.response.data.error?new Ce(m.response.data.error):new Ce("Cannot get route")}let d;if(r&&s?.data?.inAmount)d=s.data.inAmount;else if(r)throw new Ce("Cannot get inAmount");let c;try{c=await Sn.default.post(`${this.jupiterUrl}/swap`,{quoteResponse:s.data,userPublicKey:n,wrapAndUnwrapSol:!0},{headers:this.apiKeyHeader?{"x-api-key":this.apiKeyHeader}:void 0})}catch(m){throw m instanceof Sn.AxiosError&&m.response&&m.response.data&&m.response.data.error?new Ce(m.response.data.error):new Ce("Cannot get swap transaction")}let A;if(c?.data?.swapTransaction)A=c.data.swapTransaction;else throw new Ce("Cannot get swap transaction");let g=Buffer.from(A,"base64"),l=dn.VersionedTransaction.deserialize(g);return r?{tx:l,amountIn:d}:{tx:l}}async amendJupiterWithSdkTx(n,i){try{let o=await sn(n,this.connection),r=await sn(i,this.connection),s=dn.TransactionMessage.decompile(n.message,{addressLookupTableAccounts:o}),d=dn.TransactionMessage.decompile(i.message,{addressLookupTableAccounts:r});if(d.instructions.shift(),s.instructions.push(...d.instructions),o.push(...r),n.message=s.compileToV0Message(o),i.message.header.numRequiredSignatures===2&&n.signatures.length===1){let c=i.signatures[0];if(!c)throw new B("Signature is undefined");n.signatures.push(c)}return n}catch(o){throw o instanceof Error&&o.message?new Ce(`Some error occurred during creation final swap and bridge transaction. ${o.message}`):new Ce("Some error occurred during creation final swap and bridge transaction")}}};var So=1e6,Ls=1.1,ua=class extends Ge{constructor(i,o,r){super();this.solanaRpcUrl=i;this.params=o;this.api=r;this.jupiterService=new la(i,o.jupiterParams)}chainType="SOLANA";jupiterService;async buildRawTransactionSwap(i){let o=De(this.chainType,i);return await this.buildSwapTransaction(o,i.sourceToken.poolAddress,i.destinationToken.poolAddress,i.txFeeParams)}async buildSwapTransaction(i,o,r,s){let{fromAccountAddress:d,amount:c,contractAddress:A,fromTokenAddress:g,toTokenAddress:l,toAccountAddress:m,minimumReceiveAmount:I}=i,h=d,W=A,Y=g,f=l,T=r,G=m,Z=new q.PublicKey(h),P=Kt(this.solanaRpcUrl,Z.toString()),te=new se.Program(hi,W,P),Q=await Nn(te.programId),Pe=await Qt(te.programId),le=new q.PublicKey(Y),Ct=await Tn(le,te.programId),bt=new q.PublicKey(o),Zt=await at(Z,le),et=new q.PublicKey(G),Ze=new q.PublicKey(f),Ke=await Tn(Ze,te.programId),tt=new q.PublicKey(T),Le=await at(et,Ze),It=[se.web3.ComputeBudgetProgram.setComputeUnitLimit({units:So})];try{await Zn(Le,P)}catch{let fc=await se.Spl.associatedToken(P).methods.create().accounts({mint:Ze,owner:et,associatedAccount:Le}).instruction();It.push(fc)}let yt=await te.methods.swap(new se.BN(c),new se.BN(I||0)).accounts({payer:Z,config:Pe,bridgeAuthority:Q,user:Z,sendBridgeToken:Ct,sendMint:le,sendPool:bt,sendUserToken:Zt,receiveBridgeToken:Ke,receiveMint:Ze,receivePool:tt,receiveUserToken:Le}).preInstructions(It).transaction(),nt=P.connection;return yt.recentBlockhash=(await nt.getLatestBlockhash()).blockhash,yt.feePayer=Z,await wn(yt,s,this.solanaRpcUrl),await this.convertToVersionedTransaction(yt,nt)}async buildRawTransactionSend(i){let o=await ke(this.chainType,i,this.api),r=this.addPoolAddress(i,o),s=r.gasFeePaymentMethod=="stablecoin",d;if(s)try{let{tx:g,solTxSendUpdatedParams:l}=await this.processJup(r,i,!0);d=g,r={...r,...l}}catch{try{let{tx:l,solTxSendUpdatedParams:m}=await this.processJup(r,i,!1);d=l,r={...r,...m}}catch(l){throw l instanceof re?l:l instanceof Error&&l.message?new Ce(`Some error occurred during creation Jupiter swap transaction. ${l.message}`):new Ce("Some error occurred during creation Jupiter swap transaction")}}let c,A;switch(o.messenger){case 1:{let g=await this.prepareSwapAndBridgeData(r);c=await this.buildSwapAndBridgeAllbridgeTransaction(g);break}case 2:{let g=await this.prepareSwapAndBridgeData(r),{transaction:l,messageAccount:m}=await this.buildSwapAndBridgeWormholeTransaction(g);c=l,A=m;break}case 3:case 4:{let g=await this.prepareSwapAndBridgeCctpData(r),{transaction:l,messageSentEventDataKeypair:m}=await this.buildSwapAndBridgeCctpTransaction(i.destinationToken.chainSymbol,g);c=l,A=m;break}case 5:throw new ve("Messenger OFT is not supported yet.")}if(s){if(!d)throw new Ce("Swap tx is absent");c=await this.jupiterService.amendJupiterWithSdkTx(d,c)}return await Ms(c,i.txFeeParams,this.solanaRpcUrl),A&&c.sign([A]),c}async processJup(i,o,r){let{fee:s,extraGas:d,gasFeePaymentMethod:c}=await this.convertStableCoinFeeAndExtraGasToNativeCurrency(o.sourceToken,i),A=r?(0,Ee.Big)(s):(0,Ee.Big)(i.fee);d&&(A=A.plus(d)),r||(A=A.mul(Ls));let{tx:g,amountIn:l}=await this.jupiterService.getJupiterSwapTx(o.fromAccountAddress,o.sourceToken.tokenAddress,A.toFixed(0),r),m;if(r){if(!l)throw new Ce("Cannot get inAmount");m=(0,Ee.Big)(i.amount).minus((0,Ee.Big)(l).mul(Ls)).toFixed(0)}else m=(0,Ee.Big)(i.amount).minus(A).toFixed(0);if((0,Ee.Big)(m).lte(0))throw new tn(`Amount not enough to pay fee, ${S((0,Ee.Big)(m).minus(1).neg(),o.sourceToken.decimals).toFixed()} stables is missing`);return{tx:g,solTxSendUpdatedParams:{amount:m,fee:s,extraGas:d,gasFeePaymentMethod:c}}}addPoolAddress(i,o){return{...o,poolAddress:i.sourceToken.poolAddress}}async convertStableCoinFeeAndExtraGasToNativeCurrency(i,o){if(o.gasFeePaymentMethod=="stablecoin"){let r=(await this.api.getReceiveTransactionCost({sourceChainId:o.fromChainId,destinationChainId:o.toChainId,messenger:o.messenger,sourceToken:i.tokenAddress})).sourceNativeTokenPrice,s=(0,Ee.Big)(o.fee).div(r).mul((0,Ee.Big)(10).pow(L.getChainDecimalsByType("SOLANA")-i.decimals)).toFixed(0),d;return o.extraGas&&(d=(0,Ee.Big)(o.extraGas).div(r).mul((0,Ee.Big)(10).pow(L.getChainDecimalsByType("SOLANA")-i.decimals)).toFixed(0)),{fee:s,extraGas:d,gasFeePaymentMethod:"native"}}return{fee:o.fee,extraGas:o.extraGas,gasFeePaymentMethod:"native"}}getExtraGasInstruction(i,o,r){return se.web3.SystemProgram.transfer({fromPubkey:o,toPubkey:r,lamports:+i})}async prepareSwapAndBridgeData(i){let{amount:o,contractAddress:r,fromChainId:s,fromAccountAddress:d,fromTokenAddress:c,toChainId:A,toAccountAddress:g,toTokenAddress:l,poolAddress:m,extraGas:I}=i,h=c,W=d,Y=A,f=l,T=g,G=r,Z=s,P=Kt(this.solanaRpcUrl,W),te=new se.Program(hi,G,P),Q=Array.from(Gn()),Pe=new q.PublicKey(m),le=await Ss(o,te,Pe),Ct=await hs(Q,te.programId),bt=await Nn(te.programId),Zt=await at(new q.PublicKey(W),new q.PublicKey(h)),et=await Tn(new q.PublicKey(h),te.programId),Ze=await Go(Y,te.programId),Ke=await Rs(Y,Buffer.from(f),te.programId),tt=await Qt(te.programId),Le=await te.account.config.fetch(tt),It=await bi(Y,Le.gasOracleProgramId),yt=await bi(Z,Le.gasOracleProgramId),nt=Vs({amount:le,recipient:Buffer.from(T),nonce:Buffer.from(Q),receiveToken:Buffer.from(f),destinationChainId:Y,sourceChainId:Z,chainBridge:(await Nn(te.programId)).toBuffer()}),E={};return E.bridge=te,E.amount=new se.BN(o),E.vusdAmount=new se.BN(le),E.nonce=Q,E.recipient=Array.from(T),E.receiveToken=Array.from(f),E.poolAccount=Pe,E.lockAccount=Ct,E.bridgeAuthority=bt,E.userToken=Zt,E.bridgeTokenAccount=et,E.chainBridgeAccount=Ze,E.otherBridgeTokenAccount=Ke,E.userAccount=new q.PublicKey(W),E.destinationChainId=Y,E.mint=new q.PublicKey(h),E.config=tt,E.configAccountInfo=Le,E.gasPrice=It,E.thisGasPrice=yt,E.message=nt,I&&(E.extraGasInstruction=this.getExtraGasInstruction(I,E.userAccount,tt)),E}async buildSwapAndBridgeAllbridgeTransaction(i){let{bridge:o,vusdAmount:r,nonce:s,recipient:d,receiveToken:c,poolAccount:A,lockAccount:g,bridgeAuthority:l,userToken:m,bridgeTokenAccount:I,chainBridgeAccount:h,otherBridgeTokenAccount:W,userAccount:Y,destinationChainId:f,mint:T,config:G,configAccountInfo:Z,gasPrice:P,thisGasPrice:te,message:Q,extraGasInstruction:Pe}=i,le=Z.allbridgeMessengerProgramId,Ct=await Fo(f,le),bt=await Qt(le),Zt=await Bs(Q,le),et=[];Pe&&et.push(Pe);let Ze=await o.methods.swapAndBridge({vusdAmount:r,nonce:s,destinationChainId:f,recipient:d,receiveToken:c}).accounts({mint:T,user:Y,config:G,lock:g,pool:A,gasPrice:P,thisGasPrice:te,bridgeAuthority:l,userToken:m,bridgeToken:I,chainBridge:h,messenger:le,messengerGasUsage:Ct,messengerConfig:bt,sentMessageAccount:Zt,otherBridgeToken:W}).preInstructions([se.web3.ComputeBudgetProgram.setComputeUnitLimit({units:So})]).postInstructions(et).transaction(),Ke=Kt(this.solanaRpcUrl,Y.toString()).connection;return Ze.recentBlockhash=(await Ke.getLatestBlockhash()).blockhash,Ze.feePayer=Y,await this.convertToVersionedTransaction(Ze,Ke)}async convertToVersionedTransaction(i,o){let r=await o.getAddressLookupTable(new q.PublicKey(this.params.solanaLookUpTable)).then(d=>d.value);if(!r)throw new B("Cannot find allbridgeLookupTableAccount");let s=new se.web3.TransactionMessage({payerKey:i.feePayer,recentBlockhash:i.recentBlockhash,instructions:i.instructions}).compileToV0Message([r]);return new se.web3.VersionedTransaction(s)}async buildSwapAndBridgeWormholeTransaction(i){let{bridge:o,vusdAmount:r,nonce:s,recipient:d,receiveToken:c,poolAccount:A,lockAccount:g,bridgeAuthority:l,userToken:m,bridgeTokenAccount:I,chainBridgeAccount:h,otherBridgeTokenAccount:W,userAccount:Y,destinationChainId:f,mint:T,config:G,configAccountInfo:Z,gasPrice:P,thisGasPrice:te,message:Q,extraGasInstruction:Pe}=i,le=this.params.wormholeMessengerProgramId,[Ct]=q.PublicKey.findProgramAddressSync([Buffer.from("Bridge")],new q.PublicKey(le)),[bt]=q.PublicKey.findProgramAddressSync([Buffer.from("fee_collector")],new q.PublicKey(le)),[Zt]=q.PublicKey.findProgramAddressSync([Buffer.from("Sequence"),l.toBuffer()],new q.PublicKey(le)),et=await Fo(f,Z.wormholeMessengerProgramId),Ze=await Qt(Z.wormholeMessengerProgramId),Ke=q.Keypair.generate(),tt=Kt(this.solanaRpcUrl,Y.toString()),Le=await tt.connection.getAccountInfo(Ct);if(Le==null)throw new B("Cannot fetch wormhole bridge account info");let It=new se.BN(Le.data.slice(16,24),"le").toString(),yt=q.SystemProgram.transfer({fromPubkey:Y,toPubkey:bt,lamports:+It}),nt=[];Pe&&nt.push(Pe);let E={mint:T,user:Y,config:G,lock:g,pool:A,gasPrice:P,thisGasPrice:te,bridgeAuthority:l,userToken:m,bridgeToken:I,chainBridge:h,otherBridgeToken:W,messengerGasUsage:et,wormholeProgram:le,bridge:Ct,message:Ke.publicKey,wormholeMessenger:Z.wormholeMessengerProgramId,sequence:Zt,feeCollector:bt,wormholeMessengerConfig:Ze,clock:se.web3.SYSVAR_CLOCK_PUBKEY},$i=await o.methods.swapAndBridgeWormhole({vusdAmount:r,nonce:s,destinationChainId:f,recipient:d,receiveToken:c}).accounts(E).preInstructions([se.web3.ComputeBudgetProgram.setComputeUnitLimit({units:So}),yt]).postInstructions(nt).signers([Ke]).transaction();return $i.recentBlockhash=(await tt.connection.getLatestBlockhash()).blockhash,$i.feePayer=Y,{transaction:await this.convertToVersionedTransaction($i,tt.connection),messageAccount:Ke}}async prepareSwapAndBridgeCctpData(i){let{contractAddress:o,amount:r,fromAccountAddress:s,fromTokenAddress:d,toChainId:c,toAccountAddress:A,toTokenAddress:g,extraGas:l}=i,m=o;if(!m)throw new he("Such route does not support CCTP protocol");let I=4,h=s,W=g,Y=A,f=Kt(this.solanaRpcUrl,h),T=new se.Program(Ts,m,f),G=new q.PublicKey(d),Z=await Ys(G,T.programId),P=new q.PublicKey(h),te=await T.account.cctpBridge.fetch(Z),Q={};return Q.cctpBridge=T,Q.cctpBridgeAccount=Z,Q.cctpAddressAccount=new q.PublicKey(m),Q.amount=new se.BN(r),Q.recipient=Array.from(Y),Q.receiveToken=Array.from(W),Q.userToken=await at(P,G),Q.bridgeAuthority=await vs(Z,T.programId),Q.bridgeTokenAccount=await Ws(G,T.programId),Q.chainBridgeAccount=await Go(c,T.programId),Q.userAccount=P,Q.destinationChainId=c,Q.mint=G,Q.gasPrice=await bi(c,te.gasOracleProgramId),Q.thisGasPrice=await bi(I,te.gasOracleProgramId),Q.provider=f,l&&(Q.extraGasInstruction=this.getExtraGasInstruction(l,Q.userAccount,Z)),Q}async buildSwapAndBridgeCctpTransaction(i,o){let{cctpBridge:r,cctpBridgeAccount:s,amount:d,recipient:c,receiveToken:A,bridgeAuthority:g,userToken:l,bridgeTokenAccount:m,chainBridgeAccount:I,userAccount:h,destinationChainId:W,mint:Y,gasPrice:f,thisGasPrice:T,extraGasInstruction:G,provider:Z}=o,P=this.params.cctpParams.cctpDomains[i],te=this.params.cctpParams.cctpTransmitterProgramId,Q=this.params.cctpParams.cctpTokenMessengerMinter;if(P==null||!te||!Q)throw new B("CCTP is not configured");let Pe=new q.PublicKey(te),le=new q.PublicKey(Q),{messageTransmitterAccount:Ct,tokenMessenger:bt,tokenMessengerEventAuthority:Zt,tokenMinter:et,localToken:Ze,remoteTokenMessengerKey:Ke,authorityPda:tt}=Gs(P,Y,Pe,le),Le=[];G&&Le.push(G);let It=q.Keypair.generate(),yt=fs(r.programId,It.publicKey),nt=await r.methods.bridge({amount:d,destinationChainId:W,recipient:c,receiveToken:A}).accounts({mint:Y,user:h,cctpBridge:s,messageSentEventData:It.publicKey,lock:yt,cctpMessenger:le,messageTransmitterProgram:Pe,messageTransmitterAccount:Ct,tokenMessenger:bt,tokenMinter:et,localToken:Ze,remoteTokenMessengerKey:Ke,authorityPda:tt,eventAuthority:Zt,bridgeToken:m,gasPrice:f,thisGasPrice:T,chainBridge:I,userToken:l,bridgeAuthority:g}).preInstructions([se.web3.ComputeBudgetProgram.setComputeUnitLimit({units:2e6})]).postInstructions(Le).transaction(),E=Z.connection;return nt.recentBlockhash=(await E.getLatestBlockhash()).blockhash,nt.feePayer=h,{transaction:await this.convertToVersionedTransaction(nt,E),messageSentEventDataKeypair:It}}send(i){throw new _}};var ma=require("@stellar/stellar-sdk"),Hs=require("big.js");var t=require("@stellar/stellar-sdk"),Ec=t.contract.Spec,_c=t.contract.Client;var Ri=class extends _c{constructor(i){super(new Ec(["AAAAAAAAAAAAAAAKaW5pdGlhbGl6ZQAAAAAABAAAAAAAAAAFYWRtaW4AAAAAAAATAAAAAAAAAAltZXNzZW5nZXIAAAAAAAATAAAAAAAAAApnYXNfb3JhY2xlAAAAAAATAAAAAAAAAAxuYXRpdmVfdG9rZW4AAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAPc3dhcF9hbmRfYnJpZGdlAAAAAAkAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAAAAAAFdG9rZW4AAAAAAAATAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAACXJlY2lwaWVudAAAAAAAA+4AAAAgAAAAAAAAABRkZXN0aW5hdGlvbl9jaGFpbl9pZAAAAAQAAAAAAAAADXJlY2VpdmVfdG9rZW4AAAAAAAPuAAAAIAAAAAAAAAAFbm9uY2UAAAAAAAAMAAAAAAAAAApnYXNfYW1vdW50AAAAAAAKAAAAAAAAABBmZWVfdG9rZW5fYW1vdW50AAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAOcmVjZWl2ZV90b2tlbnMAAAAAAAgAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAlyZWNpcGllbnQAAAAAAAATAAAAAAAAAA9zb3VyY2VfY2hhaW5faWQAAAAABAAAAAAAAAANcmVjZWl2ZV90b2tlbgAAAAAAA+4AAAAgAAAAAAAAAAVub25jZQAAAAAAAAwAAAAAAAAAEnJlY2VpdmVfYW1vdW50X21pbgAAAAAACgAAAAAAAAAJZXh0cmFfZ2FzAAAAAAAD6AAAAAoAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAAEc3dhcAAAAAYAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAV0b2tlbgAAAAAAA+4AAAAgAAAAAAAAAA1yZWNlaXZlX3Rva2VuAAAAAAAD7gAAACAAAAAAAAAACXJlY2lwaWVudAAAAAAAABMAAAAAAAAAEnJlY2VpdmVfYW1vdW50X21pbgAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAJc3RvcF9zd2FwAAAAAAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAKc3RhcnRfc3dhcAAAAAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAOc2V0X2dhc19vcmFjbGUAAAAAAAEAAAAAAAAAC25ld19hZGRyZXNzAAAAABMAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAASc2V0X3N0b3BfYXV0aG9yaXR5AAAAAAABAAAAAAAAAA5zdG9wX2F1dGhvcml0eQAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAOc2V0X3JlYmFsYW5jZXIAAAAAAAEAAAAAAAAACnJlYmFsYW5jZXIAAAAAABMAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAANc2V0X21lc3NlbmdlcgAAAAAAAAEAAAAAAAAACW1lc3NlbmdlcgAAAAAAABMAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAANc2V0X2dhc191c2FnZQAAAAAAAAIAAAAAAAAACGNoYWluX2lkAAAABAAAAAAAAAAJZ2FzX3VzYWdlAAAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAPcmVnaXN0ZXJfYnJpZGdlAAAAAAIAAAAAAAAACGNoYWluX2lkAAAABAAAAAAAAAAOYnJpZGdlX2FkZHJlc3MAAAAAA+4AAAAgAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAQYWRkX2JyaWRnZV90b2tlbgAAAAIAAAAAAAAACGNoYWluX2lkAAAABAAAAAAAAAANdG9rZW5fYWRkcmVzcwAAAAAAA+4AAAAgAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAATcmVtb3ZlX2JyaWRnZV90b2tlbgAAAAACAAAAAAAAAAhjaGFpbl9pZAAAAAQAAAAAAAAADXRva2VuX2FkZHJlc3MAAAAAAAPuAAAAIAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAIYWRkX3Bvb2wAAAACAAAAAAAAAARwb29sAAAAEwAAAAAAAAAFdG9rZW4AAAAAAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAATd2l0aGRyYXdfZ2FzX3Rva2VucwAAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAABmFtb3VudAAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAfd2l0aGRyYXdfYnJpZGdpbmdfZmVlX2luX3Rva2VucwAAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAADXRva2VuX2FkZHJlc3MAAAAAAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAVaGFzX3Byb2Nlc3NlZF9tZXNzYWdlAAAAAAAAAQAAAAAAAAAHbWVzc2FnZQAAAAPuAAAAIAAAAAEAAAPpAAAAAQAAAAM=","AAAAAAAAAAAAAAAUaGFzX3JlY2VpdmVkX21lc3NhZ2UAAAABAAAAAAAAAAdtZXNzYWdlAAAAA+4AAAAgAAAAAQAAA+kAAAABAAAAAw==","AAAAAAAAAAAAAAAQZ2V0X3Bvb2xfYWRkcmVzcwAAAAEAAAAAAAAADXRva2VuX2FkZHJlc3MAAAAAAAPuAAAAIAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAAKZ2V0X2NvbmZpZwAAAAAAAAAAAAEAAAPpAAAH0AAAAAZCcmlkZ2UAAAAAAAM=","AAAAAAAAAAAAAAASZ2V0X3N0b3BfYXV0aG9yaXR5AAAAAAAAAAAAAQAAA+kAAAATAAAAAw==","AAAAAAAAAAAAAAAUZ2V0X3RyYW5zYWN0aW9uX2Nvc3QAAAABAAAAAAAAAAhjaGFpbl9pZAAAAAQAAAABAAAD6QAAAAoAAAAD","AAAAAAAAAAAAAAANZ2V0X2dhc191c2FnZQAAAAAAAAEAAAAAAAAACGNoYWluX2lkAAAABAAAAAEAAAPpAAAACgAAAAM=","AAAAAAAAAAAAAAAJZ2V0X2FkbWluAAAAAAAAAAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAAOZ2V0X2dhc19vcmFjbGUAAAAAAAAAAAABAAAD6QAAABMAAAAD","AAAAAAAAAAAAAAASZ2V0X2Fub3RoZXJfYnJpZGdlAAAAAAABAAAAAAAAAAhjaGFpbl9pZAAAAAQAAAABAAAD6QAAB9AAAAANQW5vdGhlckJyaWRnZQAAAAAAAAM=","AAAAAAAAAAAAAAAJc2V0X2FkbWluAAAAAAAAAQAAAAAAAAAJbmV3X2FkbWluAAAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAHdXBncmFkZQAAAAABAAAAAAAAAA1uZXdfd2FzbV9oYXNoAAAAAAAD7gAAACAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAQAAAAAAAAAAAAAAB1N3YXBwZWQAAAAABgAAAAAAAAAOcmVjZWl2ZV9hbW91bnQAAAAAAAoAAAAAAAAADXJlY2VpdmVfdG9rZW4AAAAAAAPuAAAAIAAAAAAAAAAJcmVjaXBpZW50AAAAAAAAEwAAAAAAAAALc2VuZF9hbW91bnQAAAAACgAAAAAAAAAKc2VuZF90b2tlbgAAAAAD7gAAACAAAAAAAAAABnNlbmRlcgAAAAAAEw==","AAAAAQAAAAAAAAAAAAAAClRva2Vuc1NlbnQAAAAAAAUAAAAAAAAABmFtb3VudAAAAAAACgAAAAAAAAAUZGVzdGluYXRpb25fY2hhaW5faWQAAAAEAAAAAAAAAAVub25jZQAAAAAAAAwAAAAAAAAADXJlY2VpdmVfdG9rZW4AAAAAAAPuAAAAIAAAAAAAAAAJcmVjaXBpZW50AAAAAAAD7gAAACA=","AAAAAQAAAAAAAAAAAAAADlRva2Vuc1JlY2VpdmVkAAAAAAAEAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAAB21lc3NhZ2UAAAAD7gAAACAAAAAAAAAABW5vbmNlAAAAAAAADAAAAAAAAAAJcmVjaXBpZW50AAAAAAAD7gAAACA=","AAAAAQAAAAAAAAAAAAAAClJlY2VpdmVGZWUAAAAAAAMAAAAAAAAAF2JyaWRnZV90cmFuc2FjdGlvbl9jb3N0AAAAAAoAAAAAAAAACWV4dHJhX2dhcwAAAAAAAAoAAAAAAAAAGG1lc3NhZ2VfdHJhbnNhY3Rpb25fY29zdAAAAAo=","AAAAAQAAAAAAAAAAAAAAFUJyaWRnaW5nRmVlRnJvbVRva2VucwAAAAAAAAIAAAAAAAAAEGZlZV90b2tlbl9hbW91bnQAAAAKAAAAAAAAAANnYXMAAAAACg==","AAAAAQAAAAAAAAAAAAAADUFub3RoZXJCcmlkZ2UAAAAAAAACAAAAAAAAAAdhZGRyZXNzAAAAA+4AAAAgAAAAAAAAAAZ0b2tlbnMAAAAAA+wAAAPuAAAAIAAAAAE=","AAAAAQAAAAAAAAAAAAAABkJyaWRnZQAAAAAABgAAAGBwcmVjb21wdXRlZCB2YWx1ZXMgb2YgdGhlIHNjYWxpbmcgZmFjdG9yIHJlcXVpcmVkIGZvciBwYXlpbmcgdGhlIGJyaWRnaW5nIGZlZSB3aXRoIHN0YWJsZSB0b2tlbnMAAAAeYnJpZGdpbmdfZmVlX2NvbnZlcnNpb25fZmFjdG9yAAAAAAPsAAAAEwAAAAoAAAAAAAAACGNhbl9zd2FwAAAAAQAAAGxwcmVjb21wdXRlZCB2YWx1ZXMgdG8gZGl2aWRlIGJ5IHRvIGNoYW5nZSB0aGUgcHJlY2lzaW9uIGZyb20gdGhlIEdhcyBPcmFjbGUgcHJlY2lzaW9uIHRvIHRoZSB0b2tlbiBwcmVjaXNpb24AAAAWZnJvbV9nYXNfb3JhY2xlX2ZhY3RvcgAAAAAD7AAAABMAAAAKAAAAAAAAAAltZXNzZW5nZXIAAAAAAAATAAAAAAAAAAVwb29scwAAAAAAA+wAAAPuAAAAIAAAABMAAAAAAAAACnJlYmFsYW5jZXIAAAAAABM=","AAAAAgAAAAAAAAAAAAAAB0RhdGFLZXkAAAAAAwAAAAEAAAAAAAAAC090aGVyQnJpZGdlAAAAAAEAAAAEAAAAAQAAAAAAAAALU2VudE1lc3NhZ2UAAAAAAQAAA+4AAAAgAAAAAQAAAAAAAAAPUmVjZWl2ZWRNZXNzYWdlAAAAAAEAAAPuAAAAIA==","AAAAAQAAAAAAAAAAAAAABUFkbWluAAAAAAAAAQAAAAAAAAABMAAAAAAAABM=","AAAAAQAAAAAAAAAAAAAAEEdhc09yYWNsZUFkZHJlc3MAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAAAQAAAAAAAAAAAAAACEdhc1VzYWdlAAAAAQAAAAAAAAABMAAAAAAAA+wAAAAEAAAACg==","AAAAAQAAAAAAAAAAAAAAC05hdGl2ZVRva2VuAAAAAAEAAAAAAAAAATAAAAAAAAAT","AAAAAQAAAAAAAAAAAAAADVN0b3BBdXRob3JpdHkAAAAAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAABAAAAAAAAAAAAAAABUVycm9yAAAAAAAAKAAAAAAAAAANVW5pbXBsZW1lbnRlZAAAAAAAAAAAAAAAAAAAC0luaXRpYWxpemVkAAAAAAEAAAAAAAAADVVuaW5pdGlhbGl6ZWQAAAAAAAACAAAAAAAAAAxVbmF1dGhvcml6ZWQAAAADAAAAAAAAAApJbnZhbGlkQXJnAAAAAAAEAAAAAAAAAA5JbnZhbGlkQ2hhaW5JZAAAAAAABQAAAAAAAAATSW52YWxpZE90aGVyQ2hhaW5JZAAAAAAGAAAAAAAAAA5HYXNVc2FnZU5vdFNldAAAAAAABwAAAAAAAAANQnJva2VuQWRkcmVzcwAAAAAAAAgAAAAAAAAACE5vdEZvdW5kAAAACQAAAAAAAAAYVG9rZW5JbnN1ZmZpY2llbnRCYWxhbmNlAAAACgAAAAAAAAAKQ2FzdEZhaWxlZAAAAAAACwAAAAAAAAAMVTI1Nk92ZXJmbG93AAAADAAAAAAAAAAKWmVyb0Ftb3VudAAAAAAAZwAAAAAAAAAMUG9vbE92ZXJmbG93AAAAaAAAAAAAAAALWmVyb0NoYW5nZXMAAAAAaQAAAAAAAAARUmVzZXJ2ZXNFeGhhdXN0ZWQAAAAAAABqAAAAAAAAABpJbnN1ZmZpY2llbnRSZWNlaXZlZEFtb3VudAAAAAAAawAAAAAAAAAUQmFsYW5jZVJhdGlvRXhjZWVkZWQAAABsAAAAAAAAAAlGb3JiaWRkZW4AAAAAAABtAAAAAAAAABlVbmF1dGhvcml6ZWRTdG9wQXV0aG9yaXR5AAAAAAAAywAAAAAAAAAOU3dhcFByb2hpYml0ZWQAAAAAAMwAAAAAAAAAEkFtb3VudFRvb0xvd0ZvckZlZQAAAAAAzQAAAAAAAAAWQnJpZGdlVG9UaGVaZXJvQWRkcmVzcwAAAAAAzgAAAAAAAAAORW1wdHlSZWNpcGllbnQAAAAAAM8AAAAAAAAAE1NvdXJjZU5vdFJlZ2lzdGVyZWQAAAAA0AAAAAAAAAAVV3JvbmdEZXN0aW5hdGlvbkNoYWluAAAAAAAA0QAAAAAAAAATVW5rbm93bkFub3RoZXJDaGFpbgAAAADSAAAAAAAAABFUb2tlbnNBbHJlYWR5U2VudAAAAAAAANMAAAAAAAAAEE1lc3NhZ2VQcm9jZXNzZWQAAADUAAAAAAAAAAxOb3RFbm91Z2hGZWUAAADWAAAAAAAAAAlOb01lc3NhZ2UAAAAAAADXAAAAAAAAAA1Ob1JlY2VpdmVQb29sAAAAAAAA2AAAAAAAAAAGTm9Qb29sAAAAAADZAAAAAAAAABNVbmtub3duQW5vdGhlclRva2VuAAAAANoAAAAAAAAAD1dyb25nQnl0ZUxlbmd0aAAAAAEsAAAAAAAAAApIYXNNZXNzYWdlAAAAAAEtAAAAAAAAABdJbnZhbGlkUHJpbWFyeVNpZ25hdHVyZQAAAAEuAAAAAAAAABlJbnZhbGlkU2Vjb25kYXJ5U2lnbmF0dXJlAAAAAAABLwAAAAAAAAARTm9HYXNEYXRhRm9yQ2hhaW4AAAAAAAGQ"]),i);this.options=i}fromJSON={initialize:this.txFromJSON,swap_and_bridge:this.txFromJSON,receive_tokens:this.txFromJSON,swap:this.txFromJSON,stop_swap:this.txFromJSON,start_swap:this.txFromJSON,set_gas_oracle:this.txFromJSON,set_stop_authority:this.txFromJSON,set_rebalancer:this.txFromJSON,set_messenger:this.txFromJSON,set_gas_usage:this.txFromJSON,register_bridge:this.txFromJSON,add_bridge_token:this.txFromJSON,remove_bridge_token:this.txFromJSON,add_pool:this.txFromJSON,withdraw_gas_tokens:this.txFromJSON,withdraw_bridging_fee_in_tokens:this.txFromJSON,has_processed_message:this.txFromJSON,has_received_message:this.txFromJSON,get_pool_address:this.txFromJSON,get_config:this.txFromJSON,get_stop_authority:this.txFromJSON,get_transaction_cost:this.txFromJSON,get_gas_usage:this.txFromJSON,get_admin:this.txFromJSON,get_gas_oracle:this.txFromJSON,get_another_bridge:this.txFromJSON,set_admin:this.txFromJSON,upgrade:this.txFromJSON}};var pa=class extends Ge{constructor(i,o,r){super();this.nodeRpcUrlsConfig=i;this.params=o;this.api=r}chainType="SRB";async buildRawTransactionSend(i){let o=await ke(this.chainType,i,this.api);return await this.buildRawTransactionSendFromParams(o)}async buildRawTransactionSendFromParams(i){let{amount:o,contractAddress:r,fromAccountAddress:s,fromTokenAddress:d,toChainId:c,toAccountAddress:A,toTokenAddress:g,fee:l,gasFeePaymentMethod:m,extraGas:I}=i,h=l;I&&(h=(0,Hs.Big)(h).plus(I).toFixed());let W=this.getContract(Ri,r,s),Y;return m==="stablecoin"?Y=await W.swap_and_bridge({sender:s,token:ma.Address.contract(Buffer.from(d)).toString(),amount:BigInt(o),recipient:Buffer.from(A),destination_chain_id:+c,receive_token:Buffer.from(g),nonce:Wt(),gas_amount:BigInt(0),fee_token_amount:BigInt(h)}):Y=await W.swap_and_bridge({sender:s,token:ma.Address.contract(Buffer.from(d)).toString(),amount:BigInt(o),recipient:Buffer.from(A),destination_chain_id:+c,receive_token:Buffer.from(g),nonce:Wt(),gas_amount:BigInt(h),fee_token_amount:BigInt(0)}),Y.toXDR()}async buildRawTransactionSwap(i){let o=De(this.chainType,i);return await this.buildRawTransactionSwapFromParams(o)}async buildRawTransactionSwapFromParams(i){let{amount:o,contractAddress:r,fromAccountAddress:s,fromTokenAddress:d,toAccountAddress:c,toTokenAddress:A,minimumReceiveAmount:g}=i;return(await this.getContract(Ri,r,s).swap({sender:s,amount:BigInt(o),token:ma.Address.contract(Buffer.from(d)).toBuffer(),receive_token:Buffer.from(A),recipient:c,receive_amount_min:BigInt(g)})).toXDR()}send(i){throw new _}getContract(i,o,r){let s={publicKey:r,contractId:o,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new i(s)}};var Js="1.18.0",ks="1.40.0";var $c={"-32700":"ParseError","-32701":"OversizedRequest","-32702":"OversizedResponse","-32600":"InvalidRequest","-32601":"MethodNotFound","-32602":"InvalidParams","-32603":"InternalError","-32604":"ServerBusy","-32000":"CallExecutionFailed","-32001":"UnknownError","-32003":"SubscriptionClosed","-32004":"SubscriptionClosedWithError","-32005":"BatchesNotSupported","-32006":"TooManySubscriptions","-32050":"TransientError","-32002":"TransactionExecutionClientError"},Ca=class extends Error{},Vn=class extends Ca{constructor(n,i){super(n),this.code=i,this.type=$c[i]??"ServerError"}},ba=class extends Ca{constructor(n,i,o){super(n),this.status=i,this.statusText=o}};var zs=a=>{throw TypeError(a)},Xo=(a,n,i)=>n.has(a)||zs("Cannot "+i),de=(a,n,i)=>(Xo(a,n,"read from private field"),i?i.call(a):n.get(a)),cn=(a,n,i)=>n.has(a)?zs("Cannot add the same private member more than once"):n instanceof WeakSet?n.add(a):n.set(a,i),Xn=(a,n,i,o)=>(Xo(a,n,"write to private field"),o?o.call(a,i):n.set(a,i),i),xs=(a,n,i)=>(Xo(a,n,"access private method"),i),qc=(a,n,i,o)=>({set _(r){Xn(a,n,r,i)},get _(){return de(a,n,o)}}),An,Bi,Vt,gn,Yi,Mn,Ia,Os,Qs;function eA(a){let n=new URL(a);return n.protocol=n.protocol.replace("http","ws"),n.toString()}var tA={WebSocketConstructor:typeof WebSocket<"u"?WebSocket:void 0,callTimeout:3e4,reconnectTimeout:3e3,maxReconnects:5},ya=class{constructor(n,i={}){if(cn(this,Ia),cn(this,An,0),cn(this,Bi,0),cn(this,Vt,null),cn(this,gn,null),cn(this,Yi,new Set),cn(this,Mn,new Map),this.endpoint=n,this.options={...tA,...i},!this.options.WebSocketConstructor)throw new Error("Missing WebSocket constructor");this.endpoint.startsWith("http")&&(this.endpoint=eA(this.endpoint))}async makeRequest(n,i){let o=await xs(this,Ia,Os).call(this);return new Promise((r,s)=>{Xn(this,An,de(this,An)+1),de(this,Mn).set(de(this,An),{resolve:r,reject:s,timeout:setTimeout(()=>{de(this,Mn).delete(de(this,An)),s(new Error(`Request timeout: ${n}`))},this.options.callTimeout)}),o.send(JSON.stringify({jsonrpc:"2.0",id:de(this,An),method:n,params:i}))}).then(({error:r,result:s})=>{if(r)throw new Vn(r.message,r.code);return s})}async subscribe(n){let i=new Vo(n);return de(this,Yi).add(i),await i.subscribe(this),()=>i.unsubscribe(this)}};An=new WeakMap;Bi=new WeakMap;Vt=new WeakMap;gn=new WeakMap;Yi=new WeakMap;Mn=new WeakMap;Ia=new WeakSet;Os=function(){return de(this,gn)?de(this,gn):(Xn(this,gn,new Promise(a=>{de(this,Vt)?.close(),Xn(this,Vt,new this.options.WebSocketConstructor(this.endpoint)),de(this,Vt).addEventListener("open",()=>{Xn(this,Bi,0),a(de(this,Vt))}),de(this,Vt).addEventListener("close",()=>{qc(this,Bi)._++,de(this,Bi)<=this.options.maxReconnects&&setTimeout(()=>{xs(this,Ia,Qs).call(this)},this.options.reconnectTimeout)}),de(this,Vt).addEventListener("message",({data:n})=>{let i;try{i=JSON.parse(n)}catch(o){console.error(new Error(`Failed to parse RPC message: ${n}`,{cause:o}));return}if("id"in i&&i.id!=null&&de(this,Mn).has(i.id)){let{resolve:o,timeout:r}=de(this,Mn).get(i.id);clearTimeout(r),o(i)}else if("params"in i){let{params:o}=i;de(this,Yi).forEach(r=>{r.subscriptionId===o.subscription&&o.subscription===r.subscriptionId&&r.onMessage(o.result)})}})})),de(this,gn))};Qs=async function(){return de(this,Vt)?.close(),Xn(this,gn,null),Promise.allSettled([...de(this,Yi)].map(a=>a.subscribe(this)))};var Vo=class{constructor(n){this.subscriptionId=null,this.subscribed=!1,this.input=n}onMessage(n){this.subscribed&&this.input.onMessage(n)}async unsubscribe(n){let{subscriptionId:i}=this;return this.subscribed=!1,i==null?!1:(this.subscriptionId=null,n.makeRequest(this.input.unsubscribe,[i]))}async subscribe(n){this.subscriptionId=null,this.subscribed=!0;let i=await n.makeRequest(this.input.method,this.input.params);this.subscribed&&(this.subscriptionId=i)}};var Ks=a=>{throw TypeError(a)},Po=(a,n,i)=>n.has(a)||Ks("Cannot "+i),_e=(a,n,i)=>(Po(a,n,"read from private field"),i?i.call(a):n.get(a)),ha=(a,n,i)=>n.has(a)?Ks("Cannot add the same private member more than once"):n instanceof WeakSet?n.add(a):n.set(a,i),Mo=(a,n,i,o)=>(Po(a,n,"write to private field"),o?o.call(a,i):n.set(a,i),i),nA=(a,n,i)=>(Po(a,n,"access private method"),i),Wi,ot,fi,jo,Us,va=class{constructor(n){ha(this,jo),ha(this,Wi,0),ha(this,ot),ha(this,fi),Mo(this,ot,n)}fetch(n,i){let o=_e(this,ot).fetch??fetch;if(!o)throw new Error("The current environment does not support fetch, you can provide a fetch implementation in the options for SuiHTTPTransport.");return o(n,i)}async request(n){Mo(this,Wi,_e(this,Wi)+1);let i=await this.fetch(_e(this,ot).rpc?.url??_e(this,ot).url,{method:"POST",headers:{"Content-Type":"application/json","Client-Sdk-Type":"typescript","Client-Sdk-Version":Js,"Client-Target-Api-Version":ks,"Client-Request-Method":n.method,..._e(this,ot).rpc?.headers},body:JSON.stringify({jsonrpc:"2.0",id:_e(this,Wi),method:n.method,params:n.params})});if(!i.ok)throw new ba(`Unexpected status code: ${i.status}`,i.status,i.statusText);let o=await i.json();if("error"in o&&o.error!=null)throw new Vn(o.error.message,o.error.code);return o.result}async subscribe(n){let i=await nA(this,jo,Us).call(this).subscribe(n);return async()=>!!await i()}};Wi=new WeakMap;ot=new WeakMap;fi=new WeakMap;jo=new WeakSet;Us=function(){if(!_e(this,fi)){let a=_e(this,ot).WebSocketConstructor??WebSocket;if(!a)throw new Error("The current environment does not support WebSocket, you can provide a WebSocketConstructor in the options for SuiHTTPTransport.");Mo(this,fi,new ya(_e(this,ot).websocket?.url??_e(this,ot).url,{WebSocketConstructor:a,..._e(this,ot).websocket}))}return _e(this,fi)};var Ht=require("@mysten/bcs");Ie();Xe();var K=require("@mysten/bcs");var WA=/^(?!.*(^(?!@)|[-.@])($|[-.@]))(?:[a-z0-9-]{0,63}(?:\.[a-z0-9-]{0,63})*)?@[a-z0-9-]{0,63}$/i,fA=/^(?!.*(^|[-.])($|[-.]))(?:[a-z0-9-]{0,63}\.)+sui$/i;function ad(a,n="at"){let i=a.toLowerCase(),o;if(i.includes("@")){if(!WA.test(i))throw new Error(`Invalid SuiNS name ${a}`);let[r,s]=i.split("@");o=[...r?r.split("."):[],s]}else{if(!fA.test(i))throw new Error(`Invalid SuiNS name ${a}`);o=i.split(".").slice(0,-1)}return n==="dot"?`${o.join(".")}.sui`:`${o.slice(0,-1).join(".")}@${o[o.length-1]}`}Xe();var GA=BigInt(1e9),lr="0x1",Wa="0x2";var fa=Ve("0x6");var ur=`${Wa}::sui::SUI`,FA=Ve("0x5");Xe();var NA="object",TA="ID",ZA="ascii",wA="String",SA="string",VA="String",XA="option",MA="Option";function od(a){let n=typeof a.body=="object"&&"datatype"in a.body?a.body.datatype:null;return!!n&&j(n.package)===j("0x2")&&n.module==="tx_context"&&n.type==="TxContext"}function Ga(a){if(typeof a=="string")switch(a){case"address":return y.Address;case"bool":return y.Bool;case"u8":return y.U8;case"u16":return y.U16;case"u32":return y.U32;case"u64":return y.U64;case"u128":return y.U128;case"u256":return y.U256;default:throw new Error(`Unknown type signature ${a}`)}if("vector"in a){if(a.vector==="u8")return y.vector(y.U8).transform({input:i=>typeof i=="string"?new TextEncoder().encode(i):i,output:i=>i});let n=Ga(a.vector);return n?y.vector(n):null}if("datatype"in a){let n=j(a.datatype.package);if(n===j(lr)){if(a.datatype.module===ZA&&a.datatype.type===wA)return y.String;if(a.datatype.module===SA&&a.datatype.type===VA)return y.String;if(a.datatype.module===XA&&a.datatype.type===MA){let i=Ga(a.datatype.typeParameters[0]);return i?y.vector(i):null}}if(n===j(Wa)&&a.datatype.module===NA&&a.datatype.type===TA)return y.Address}return null}function rd(a){return typeof a=="object"&&"Reference"in a?{ref:"&",body:Ni(a.Reference)}:typeof a=="object"&&"MutableReference"in a?{ref:"&mut",body:Ni(a.MutableReference)}:{ref:null,body:Ni(a)}}function Ni(a){if(typeof a=="string")switch(a){case"Address":return"address";case"Bool":return"bool";case"U8":return"u8";case"U16":return"u16";case"U32":return"u32";case"U64":return"u64";case"U128":return"u128";case"U256":return"u256";default:throw new Error(`Unexpected type ${a}`)}if("Vector"in a)return{vector:Ni(a.Vector)};if("Struct"in a)return{datatype:{package:a.Struct.address,module:a.Struct.module,type:a.Struct.name,typeParameters:a.Struct.typeArguments.map(Ni)}};if("TypeParameter"in a)return{typeParameter:a.TypeParameter};throw new Error(`Unexpected type ${JSON.stringify(a)}`)}var sd=require("@mysten/bcs");Xe();function jA(a){return{$kind:"Pure",Pure:{bytes:a instanceof Uint8Array?(0,sd.toBase64)(a):a.toBase64()}}}var je={Pure:jA,ObjectRef({objectId:a,digest:n,version:i}){return{$kind:"Object",Object:{$kind:"ImmOrOwnedObject",ImmOrOwnedObject:{digest:n,version:i,objectId:j(a)}}}},SharedObjectRef({objectId:a,mutable:n,initialSharedVersion:i}){return{$kind:"Object",Object:{$kind:"SharedObject",SharedObject:{mutable:n,initialSharedVersion:i,objectId:j(a)}}}},ReceivingRef({objectId:a,digest:n,version:i}){return{$kind:"Object",Object:{$kind:"Receiving",Receiving:{digest:n,version:i,objectId:j(a)}}}}};var br=require("@mysten/bcs"),ct=require("valibot");Xe();var p=require("valibot");Xe();function Dt(a){let n=Object.entries(a).map(([i,o])=>(0,p.object)({[i]:o}));return(0,p.pipe)((0,p.union)(n),(0,p.transform)(i=>({...i,$kind:Object.keys(i)[0]})))}var ln=(0,p.pipe)((0,p.string)(),(0,p.transform)(a=>j(a)),(0,p.check)(xe)),Fe=ln,Ut=(0,p.string)(),Ye=(0,p.pipe)((0,p.union)([(0,p.string)(),(0,p.pipe)((0,p.number)(),(0,p.integer)())]),(0,p.check)(a=>{try{return BigInt(a),BigInt(a)>=0&&BigInt(a)<=18446744073709551615n}catch{return!1}},"Invalid u64")),dt=(0,p.object)({objectId:ln,version:Ye,digest:(0,p.string)()}),ne=(0,p.pipe)((0,p.union)([(0,p.object)({GasCoin:(0,p.literal)(!0)}),(0,p.object)({Input:(0,p.pipe)((0,p.number)(),(0,p.integer)()),type:(0,p.optional)((0,p.literal)("pure"))}),(0,p.object)({Input:(0,p.pipe)((0,p.number)(),(0,p.integer)()),type:(0,p.optional)((0,p.literal)("object"))}),(0,p.object)({Result:(0,p.pipe)((0,p.number)(),(0,p.integer)())}),(0,p.object)({NestedResult:(0,p.tuple)([(0,p.pipe)((0,p.number)(),(0,p.integer)()),(0,p.pipe)((0,p.number)(),(0,p.integer)())])})]),(0,p.transform)(a=>({...a,$kind:Object.keys(a)[0]}))),PA=(0,p.object)({budget:(0,p.nullable)(Ye),price:(0,p.nullable)(Ye),owner:(0,p.nullable)(ln),payment:(0,p.nullable)((0,p.array)(dt))}),Up=(0,p.object)({address:(0,p.string)(),module:(0,p.string)(),name:(0,p.string)(),typeParams:(0,p.array)((0,p.string)())}),mr=(0,p.union)([(0,p.literal)("address"),(0,p.literal)("bool"),(0,p.literal)("u8"),(0,p.literal)("u16"),(0,p.literal)("u32"),(0,p.literal)("u64"),(0,p.literal)("u128"),(0,p.literal)("u256"),(0,p.object)({vector:(0,p.lazy)(()=>mr)}),(0,p.object)({datatype:(0,p.object)({package:(0,p.string)(),module:(0,p.string)(),type:(0,p.string)(),typeParameters:(0,p.array)((0,p.lazy)(()=>mr))})}),(0,p.object)({typeParameter:(0,p.pipe)((0,p.number)(),(0,p.integer)())})]),LA=(0,p.object)({ref:(0,p.nullable)((0,p.union)([(0,p.literal)("&"),(0,p.literal)("&mut")])),body:mr}),HA=(0,p.object)({package:Fe,module:(0,p.string)(),function:(0,p.string)(),typeArguments:(0,p.array)((0,p.string)()),arguments:(0,p.array)(ne),_argumentTypes:(0,p.optional)((0,p.nullable)((0,p.array)(LA)))}),JA=(0,p.object)({name:(0,p.string)(),inputs:(0,p.record)((0,p.string)(),(0,p.union)([ne,(0,p.array)(ne)])),data:(0,p.record)((0,p.string)(),(0,p.unknown)())}),kA=Dt({MoveCall:HA,TransferObjects:(0,p.object)({objects:(0,p.array)(ne),address:ne}),SplitCoins:(0,p.object)({coin:ne,amounts:(0,p.array)(ne)}),MergeCoins:(0,p.object)({destination:ne,sources:(0,p.array)(ne)}),Publish:(0,p.object)({modules:(0,p.array)(Ut),dependencies:(0,p.array)(Fe)}),MakeMoveVec:(0,p.object)({type:(0,p.nullable)((0,p.string)()),elements:(0,p.array)(ne)}),Upgrade:(0,p.object)({modules:(0,p.array)(Ut),dependencies:(0,p.array)(Fe),package:Fe,ticket:ne}),$Intent:JA}),dd=Dt({ImmOrOwnedObject:dt,SharedObject:(0,p.object)({objectId:Fe,initialSharedVersion:Ye,mutable:(0,p.boolean)()}),Receiving:dt}),zA=Dt({Object:dd,Pure:(0,p.object)({bytes:Ut}),UnresolvedPure:(0,p.object)({value:(0,p.unknown)()}),UnresolvedObject:(0,p.object)({objectId:Fe,version:(0,p.optional)((0,p.nullable)(Ye)),digest:(0,p.optional)((0,p.nullable)((0,p.string)())),initialSharedVersion:(0,p.optional)((0,p.nullable)(Ye))})}),pr=Dt({Object:dd,Pure:(0,p.object)({bytes:Ut})}),Cr=Dt({None:(0,p.literal)(!0),Epoch:Ye}),Ln=(0,p.object)({version:(0,p.literal)(2),sender:(0,p.nullish)(ln),expiration:(0,p.nullish)(Cr),gasData:PA,inputs:(0,p.array)(zA),commands:(0,p.array)(kA)});var Qe={MoveCall(a){let[n,i="",o=""]="target"in a?a.target.split("::"):[a.package,a.module,a.function];return{$kind:"MoveCall",MoveCall:{package:n,module:i,function:o,typeArguments:a.typeArguments??[],arguments:a.arguments??[]}}},TransferObjects(a,n){return{$kind:"TransferObjects",TransferObjects:{objects:a.map(i=>(0,ct.parse)(ne,i)),address:(0,ct.parse)(ne,n)}}},SplitCoins(a,n){return{$kind:"SplitCoins",SplitCoins:{coin:(0,ct.parse)(ne,a),amounts:n.map(i=>(0,ct.parse)(ne,i))}}},MergeCoins(a,n){return{$kind:"MergeCoins",MergeCoins:{destination:(0,ct.parse)(ne,a),sources:n.map(i=>(0,ct.parse)(ne,i))}}},Publish({modules:a,dependencies:n}){return{$kind:"Publish",Publish:{modules:a.map(i=>typeof i=="string"?i:(0,br.toBase64)(new Uint8Array(i))),dependencies:n.map(i=>Ve(i))}}},Upgrade({modules:a,dependencies:n,package:i,ticket:o}){return{$kind:"Upgrade",Upgrade:{modules:a.map(r=>typeof r=="string"?r:(0,br.toBase64)(new Uint8Array(r))),dependencies:n.map(r=>Ve(r)),package:i,ticket:(0,ct.parse)(ne,o)}}},MakeMoveVec({type:a,elements:n}){return{$kind:"MakeMoveVec",MakeMoveVec:{type:a??null,elements:n.map(i=>(0,ct.parse)(ne,i))}}},Intent({name:a,inputs:n={},data:i={}}){return{$kind:"$Intent",$Intent:{name:a,inputs:Object.fromEntries(Object.entries(n).map(([o,r])=>[o,Array.isArray(r)?r.map(s=>(0,ct.parse)(ne,s)):(0,ct.parse)(ne,r)])),data:i}}}};var Hn=require("@mysten/bcs"),ft=require("valibot");Xe();var Et=require("@mysten/bcs"),u=require("valibot");Ie();var Ir=(0,u.object)({digest:(0,u.string)(),objectId:(0,u.string)(),version:(0,u.union)([(0,u.pipe)((0,u.number)(),(0,u.integer)()),(0,u.string)(),(0,u.bigint)()])}),xA=Dt({ImmOrOwned:Ir,Shared:(0,u.object)({objectId:Fe,initialSharedVersion:Ye,mutable:(0,u.boolean)()}),Receiving:Ir}),cd=Dt({Object:xA,Pure:(0,u.array)((0,u.pipe)((0,u.number)(),(0,u.integer)()))}),gd=(0,u.union)([(0,u.object)({kind:(0,u.literal)("Input"),index:(0,u.pipe)((0,u.number)(),(0,u.integer)()),value:(0,u.unknown)(),type:(0,u.optional)((0,u.literal)("object"))}),(0,u.object)({kind:(0,u.literal)("Input"),index:(0,u.pipe)((0,u.number)(),(0,u.integer)()),value:(0,u.unknown)(),type:(0,u.literal)("pure")})]),OA=(0,u.union)([(0,u.object)({Epoch:(0,u.pipe)((0,u.number)(),(0,u.integer)())}),(0,u.object)({None:(0,u.nullable)((0,u.literal)(!0))})]),Ad=(0,u.pipe)((0,u.union)([(0,u.number)(),(0,u.string)(),(0,u.bigint)()]),(0,u.check)(a=>{if(!["string","number","bigint"].includes(typeof a))return!1;try{return BigInt(a),!0}catch{return!1}})),yr=(0,u.union)([(0,u.object)({bool:(0,u.nullable)((0,u.literal)(!0))}),(0,u.object)({u8:(0,u.nullable)((0,u.literal)(!0))}),(0,u.object)({u64:(0,u.nullable)((0,u.literal)(!0))}),(0,u.object)({u128:(0,u.nullable)((0,u.literal)(!0))}),(0,u.object)({address:(0,u.nullable)((0,u.literal)(!0))}),(0,u.object)({signer:(0,u.nullable)((0,u.literal)(!0))}),(0,u.object)({vector:(0,u.lazy)(()=>yr)}),(0,u.object)({struct:(0,u.lazy)(()=>QA)}),(0,u.object)({u16:(0,u.nullable)((0,u.literal)(!0))}),(0,u.object)({u32:(0,u.nullable)((0,u.literal)(!0))}),(0,u.object)({u256:(0,u.nullable)((0,u.literal)(!0))})]),QA=(0,u.object)({address:(0,u.string)(),module:(0,u.string)(),name:(0,u.string)(),typeParams:(0,u.array)(yr)}),KA=(0,u.object)({budget:(0,u.optional)(Ad),price:(0,u.optional)(Ad),payment:(0,u.optional)((0,u.array)(Ir)),owner:(0,u.optional)((0,u.string)())}),UA=[gd,(0,u.object)({kind:(0,u.literal)("GasCoin")}),(0,u.object)({kind:(0,u.literal)("Result"),index:(0,u.pipe)((0,u.number)(),(0,u.integer)())}),(0,u.object)({kind:(0,u.literal)("NestedResult"),index:(0,u.pipe)((0,u.number)(),(0,u.integer)()),resultIndex:(0,u.pipe)((0,u.number)(),(0,u.integer)())})],Pt=(0,u.union)([...UA]),DA=(0,u.object)({kind:(0,u.literal)("MoveCall"),target:(0,u.pipe)((0,u.string)(),(0,u.check)(a=>a.split("::").length===3)),typeArguments:(0,u.array)((0,u.string)()),arguments:(0,u.array)(Pt)}),EA=(0,u.object)({kind:(0,u.literal)("TransferObjects"),objects:(0,u.array)(Pt),address:Pt}),_A=(0,u.object)({kind:(0,u.literal)("SplitCoins"),coin:Pt,amounts:(0,u.array)(Pt)}),$A=(0,u.object)({kind:(0,u.literal)("MergeCoins"),destination:Pt,sources:(0,u.array)(Pt)}),qA=(0,u.object)({kind:(0,u.literal)("MakeMoveVec"),type:(0,u.union)([(0,u.object)({Some:yr}),(0,u.object)({None:(0,u.nullable)((0,u.literal)(!0))})]),objects:(0,u.array)(Pt)}),eg=(0,u.object)({kind:(0,u.literal)("Publish"),modules:(0,u.array)((0,u.array)((0,u.pipe)((0,u.number)(),(0,u.integer)()))),dependencies:(0,u.array)((0,u.string)())}),tg=(0,u.object)({kind:(0,u.literal)("Upgrade"),modules:(0,u.array)((0,u.array)((0,u.pipe)((0,u.number)(),(0,u.integer)()))),dependencies:(0,u.array)((0,u.string)()),packageId:(0,u.string)(),ticket:Pt}),ng=[DA,EA,_A,$A,eg,tg,qA],ig=(0,u.union)([...ng]),tC=(0,u.object)({version:(0,u.literal)(1),sender:(0,u.optional)((0,u.string)()),expiration:(0,u.nullish)(OA),gasConfig:KA,inputs:(0,u.array)(gd),transactions:(0,u.array)(ig)});function hr(a){let n=a.inputs.map((i,o)=>{if(i.Object)return{kind:"Input",index:o,value:{Object:i.Object.ImmOrOwnedObject?{ImmOrOwned:i.Object.ImmOrOwnedObject}:i.Object.Receiving?{Receiving:{digest:i.Object.Receiving.digest,version:i.Object.Receiving.version,objectId:i.Object.Receiving.objectId}}:{Shared:{mutable:i.Object.SharedObject.mutable,initialSharedVersion:i.Object.SharedObject.initialSharedVersion,objectId:i.Object.SharedObject.objectId}}},type:"object"};if(i.Pure)return{kind:"Input",index:o,value:{Pure:Array.from((0,Et.fromBase64)(i.Pure.bytes))},type:"pure"};if(i.UnresolvedPure)return{kind:"Input",type:"pure",index:o,value:i.UnresolvedPure.value};if(i.UnresolvedObject)return{kind:"Input",type:"object",index:o,value:i.UnresolvedObject.objectId};throw new Error("Invalid input")});return{version:1,sender:a.sender??void 0,expiration:a.expiration?.$kind==="Epoch"?{Epoch:Number(a.expiration.Epoch)}:a.expiration?{None:!0}:null,gasConfig:{owner:a.gasData.owner??void 0,budget:a.gasData.budget??void 0,price:a.gasData.price??void 0,payment:a.gasData.payment??void 0},inputs:n,transactions:a.commands.map(i=>{if(i.MakeMoveVec)return{kind:"MakeMoveVec",type:i.MakeMoveVec.type===null?{None:!0}:{Some:Xt.parseFromStr(i.MakeMoveVec.type)},objects:i.MakeMoveVec.elements.map(o=>Mt(o,n))};if(i.MergeCoins)return{kind:"MergeCoins",destination:Mt(i.MergeCoins.destination,n),sources:i.MergeCoins.sources.map(o=>Mt(o,n))};if(i.MoveCall)return{kind:"MoveCall",target:`${i.MoveCall.package}::${i.MoveCall.module}::${i.MoveCall.function}`,typeArguments:i.MoveCall.typeArguments,arguments:i.MoveCall.arguments.map(o=>Mt(o,n))};if(i.Publish)return{kind:"Publish",modules:i.Publish.modules.map(o=>Array.from((0,Et.fromBase64)(o))),dependencies:i.Publish.dependencies};if(i.SplitCoins)return{kind:"SplitCoins",coin:Mt(i.SplitCoins.coin,n),amounts:i.SplitCoins.amounts.map(o=>Mt(o,n))};if(i.TransferObjects)return{kind:"TransferObjects",objects:i.TransferObjects.objects.map(o=>Mt(o,n)),address:Mt(i.TransferObjects.address,n)};if(i.Upgrade)return{kind:"Upgrade",modules:i.Upgrade.modules.map(o=>Array.from((0,Et.fromBase64)(o))),dependencies:i.Upgrade.dependencies,packageId:i.Upgrade.package,ticket:Mt(i.Upgrade.ticket,n)};throw new Error(`Unknown transaction ${Object.keys(i)}`)})}}function Mt(a,n){if(a.$kind==="GasCoin")return{kind:"GasCoin"};if(a.$kind==="Result")return{kind:"Result",index:a.Result};if(a.$kind==="NestedResult")return{kind:"NestedResult",index:a.NestedResult[0],resultIndex:a.NestedResult[1]};if(a.$kind==="Input")return n[a.Input];throw new Error(`Invalid argument ${Object.keys(a)}`)}function ld(a){return(0,u.parse)(Ln,{version:2,sender:a.sender??null,expiration:a.expiration?"Epoch"in a.expiration?{Epoch:a.expiration.Epoch}:{None:!0}:null,gasData:{owner:a.gasConfig.owner??null,budget:a.gasConfig.budget?.toString()??null,price:a.gasConfig.price?.toString()??null,payment:a.gasConfig.payment?.map(n=>({digest:n.digest,objectId:n.objectId,version:n.version.toString()}))??null},inputs:a.inputs.map(n=>{if(n.kind==="Input"){if((0,u.is)(cd,n.value)){let i=(0,u.parse)(cd,n.value);if(i.Object){if(i.Object.ImmOrOwned)return{Object:{ImmOrOwnedObject:{objectId:i.Object.ImmOrOwned.objectId,version:String(i.Object.ImmOrOwned.version),digest:i.Object.ImmOrOwned.digest}}};if(i.Object.Shared)return{Object:{SharedObject:{mutable:i.Object.Shared.mutable??null,initialSharedVersion:i.Object.Shared.initialSharedVersion,objectId:i.Object.Shared.objectId}}};if(i.Object.Receiving)return{Object:{Receiving:{digest:i.Object.Receiving.digest,version:String(i.Object.Receiving.version),objectId:i.Object.Receiving.objectId}}};throw new Error("Invalid object input")}return{Pure:{bytes:(0,Et.toBase64)(new Uint8Array(i.Pure))}}}return n.type==="object"?{UnresolvedObject:{objectId:n.value}}:{UnresolvedPure:{value:n.value}}}throw new Error("Invalid input")}),commands:a.transactions.map(n=>{switch(n.kind){case"MakeMoveVec":return{MakeMoveVec:{type:"Some"in n.type?Xt.tagToString(n.type.Some):null,elements:n.objects.map(i=>jt(i))}};case"MergeCoins":return{MergeCoins:{destination:jt(n.destination),sources:n.sources.map(i=>jt(i))}};case"MoveCall":{let[i,o,r]=n.target.split("::");return{MoveCall:{package:i,module:o,function:r,typeArguments:n.typeArguments,arguments:n.arguments.map(s=>jt(s))}}}case"Publish":return{Publish:{modules:n.modules.map(i=>(0,Et.toBase64)(Uint8Array.from(i))),dependencies:n.dependencies}};case"SplitCoins":return{SplitCoins:{coin:jt(n.coin),amounts:n.amounts.map(i=>jt(i))}};case"TransferObjects":return{TransferObjects:{objects:n.objects.map(i=>jt(i)),address:jt(n.address)}};case"Upgrade":return{Upgrade:{modules:n.modules.map(i=>(0,Et.toBase64)(Uint8Array.from(i))),dependencies:n.dependencies,package:n.packageId,ticket:jt(n.ticket)}}}throw new Error(`Unknown transaction ${Object.keys(n)}`)})})}function jt(a){switch(a.kind){case"GasCoin":return{GasCoin:!0};case"Result":return{Result:a.index};case"NestedResult":return{NestedResult:[a.index,a.resultIndex]};case"Input":return{Input:a.index}}}var R=require("valibot");function Ti(a){return(0,R.union)(Object.entries(a).map(([n,i])=>(0,R.object)({[n]:i})))}var At=Ti({GasCoin:(0,R.literal)(!0),Input:(0,R.pipe)((0,R.number)(),(0,R.integer)()),Result:(0,R.pipe)((0,R.number)(),(0,R.integer)()),NestedResult:(0,R.tuple)([(0,R.pipe)((0,R.number)(),(0,R.integer)()),(0,R.pipe)((0,R.number)(),(0,R.integer)())])}),ag=(0,R.object)({budget:(0,R.nullable)(Ye),price:(0,R.nullable)(Ye),owner:(0,R.nullable)(ln),payment:(0,R.nullable)((0,R.array)(dt))}),og=(0,R.object)({package:Fe,module:(0,R.string)(),function:(0,R.string)(),typeArguments:(0,R.array)((0,R.string)()),arguments:(0,R.array)(At)}),rg=(0,R.object)({name:(0,R.string)(),inputs:(0,R.record)((0,R.string)(),(0,R.union)([At,(0,R.array)(At)])),data:(0,R.record)((0,R.string)(),(0,R.unknown)())}),sg=Ti({MoveCall:og,TransferObjects:(0,R.object)({objects:(0,R.array)(At),address:At}),SplitCoins:(0,R.object)({coin:At,amounts:(0,R.array)(At)}),MergeCoins:(0,R.object)({destination:At,sources:(0,R.array)(At)}),Publish:(0,R.object)({modules:(0,R.array)(Ut),dependencies:(0,R.array)(Fe)}),MakeMoveVec:(0,R.object)({type:(0,R.nullable)((0,R.string)()),elements:(0,R.array)(At)}),Upgrade:(0,R.object)({modules:(0,R.array)(Ut),dependencies:(0,R.array)(Fe),package:Fe,ticket:At}),$Intent:rg}),dg=Ti({ImmOrOwnedObject:dt,SharedObject:(0,R.object)({objectId:Fe,initialSharedVersion:Ye,mutable:(0,R.boolean)()}),Receiving:dt}),cg=Ti({Object:dg,Pure:(0,R.object)({bytes:Ut}),UnresolvedPure:(0,R.object)({value:(0,R.unknown)()}),UnresolvedObject:(0,R.object)({objectId:Fe,version:(0,R.optional)((0,R.nullable)(Ye)),digest:(0,R.optional)((0,R.nullable)((0,R.string)())),initialSharedVersion:(0,R.optional)((0,R.nullable)(Ye))})}),Ag=Ti({None:(0,R.literal)(!0),Epoch:Ye}),ud=(0,R.object)({version:(0,R.literal)(2),sender:(0,R.nullish)(ln),expiration:(0,R.nullish)(Ag),gasData:ag,inputs:(0,R.array)(cg),commands:(0,R.array)(sg)});var pd=require("valibot");Ie();var gg=50,lg=1000n,ug=5e10;async function Cd(a,n,i){return await Ig(a,n),await bg(a,n),n.onlyTransactionKind||(await mg(a,n),await pg(a,n),await Cg(a,n)),await yg(a),await i()}async function mg(a,n){a.gasConfig.price||(a.gasConfig.price=String(await un(n).getReferenceGasPrice()))}async function pg(a,n){if(a.gasConfig.budget)return;let i=await un(n).dryRunTransactionBlock({transactionBlock:a.build({overrides:{gasData:{budget:String(ug),payment:[]}}})});if(i.effects.status.status!=="success")throw new Error(`Dry run failed, could not automatically determine a budget: ${i.effects.status.error}`,{cause:i});let o=lg*BigInt(a.gasConfig.price||1n),r=BigInt(i.effects.gasUsed.computationCost)+o,s=r+BigInt(i.effects.gasUsed.storageCost)-BigInt(i.effects.gasUsed.storageRebate);a.gasConfig.budget=String(s>r?s:r)}async function Cg(a,n){if(!a.gasConfig.payment){let o=(await un(n).getCoins({owner:a.gasConfig.owner||a.sender,coinType:ur})).data.filter(r=>!a.inputs.find(d=>d.Object?.ImmOrOwnedObject?r.coinObjectId===d.Object.ImmOrOwnedObject.objectId:!1)).map(r=>({objectId:r.coinObjectId,digest:r.digest,version:r.version}));if(!o.length)throw new Error("No valid gas coins found for the transaction.");a.gasConfig.payment=o.map(r=>(0,pd.parse)(dt,r))}}async function bg(a,n){let i=a.inputs.filter(l=>l.UnresolvedObject&&!(l.UnresolvedObject.version||l.UnresolvedObject?.initialSharedVersion)),o=[...new Set(i.map(l=>Ve(l.UnresolvedObject.objectId)))],r=o.length?Bg(o,gg):[],s=(await Promise.all(r.map(l=>un(n).multiGetObjects({ids:l,options:{showOwner:!0}})))).flat(),d=new Map(o.map((l,m)=>[l,s[m]])),c=Array.from(d).filter(([l,m])=>m.error).map(([l,m])=>JSON.stringify(m.error));if(c.length)throw new Error(`The following input objects are invalid: ${c.join(", ")}`);let A=s.map(l=>{if(l.error||!l.data)throw new Error(`Failed to fetch object: ${l.error}`);let m=l.data.owner,I=m&&typeof m=="object"&&"Shared"in m?m.Shared.initial_shared_version:null;return{objectId:l.data.objectId,digest:l.data.digest,version:l.data.version,initialSharedVersion:I}}),g=new Map(o.map((l,m)=>[l,A[m]]));for(let[l,m]of a.inputs.entries()){if(!m.UnresolvedObject)continue;let I,h=j(m.UnresolvedObject.objectId),W=g.get(h);m.UnresolvedObject.initialSharedVersion??W?.initialSharedVersion?I=je.SharedObjectRef({objectId:h,initialSharedVersion:m.UnresolvedObject.initialSharedVersion||W?.initialSharedVersion,mutable:hg(a,l)}):vg(a,l)&&(I=je.ReceivingRef({objectId:h,digest:m.UnresolvedObject.digest??W?.digest,version:m.UnresolvedObject.version??W?.version})),a.inputs[a.inputs.indexOf(m)]=I??je.ObjectRef({objectId:h,digest:m.UnresolvedObject.digest??W?.digest,version:m.UnresolvedObject.version??W?.version})}}async function Ig(a,n){let{inputs:i,commands:o}=a,r=[],s=new Set;o.forEach(c=>{if(c.MoveCall){if(c.MoveCall._argumentTypes)return;if(c.MoveCall.arguments.map(l=>l.$kind==="Input"?a.inputs[l.Input]:null).some(l=>l?.UnresolvedPure||l?.UnresolvedObject)){let l=`${c.MoveCall.package}::${c.MoveCall.module}::${c.MoveCall.function}`;s.add(l),r.push(c.MoveCall)}}switch(c.$kind){case"SplitCoins":c.SplitCoins.amounts.forEach(A=>{md(A,y.U64,a)});break;case"TransferObjects":md(c.TransferObjects.address,y.Address,a);break}});let d=new Map;if(s.size>0){let c=un(n);await Promise.all([...s].map(async A=>{let[g,l,m]=A.split("::"),I=await c.getNormalizedMoveFunction({package:g,module:l,function:m});d.set(A,I.parameters.map(h=>rd(h)))}))}r.length&&await Promise.all(r.map(async c=>{let A=d.get(`${c.package}::${c.module}::${c.function}`);if(!A)return;let l=A.length>0&&od(A.at(-1))?A.slice(0,A.length-1):A;c._argumentTypes=l})),o.forEach(c=>{if(!c.MoveCall)return;let A=c.MoveCall,g=`${A.package}::${A.module}::${A.function}`,l=A._argumentTypes;if(l){if(l.length!==c.MoveCall.arguments.length)throw new Error(`Incorrect number of arguments for ${g}`);l.forEach((m,I)=>{let h=A.arguments[I];if(h.$kind!=="Input")return;let W=i[h.Input];if(!W.UnresolvedPure&&!W.UnresolvedObject)return;let Y=W.UnresolvedPure?.value??W.UnresolvedObject?.objectId,f=Ga(m.body);if(f){h.type="pure",i[i.indexOf(W)]=je.Pure(f.serialize(Y));return}if(typeof Y!="string")throw new Error(`Expect the argument to be an object id string, got ${JSON.stringify(Y,null,2)}`);h.type="object";let T=W.UnresolvedPure?{$kind:"UnresolvedObject",UnresolvedObject:{objectId:Y}}:W;i[h.Input]=T})}})}function yg(a){a.inputs.forEach((n,i)=>{if(n.$kind!=="Object"&&n.$kind!=="Pure")throw new Error(`Input at index ${i} has not been resolved. Expected a Pure or Object input, but found ${JSON.stringify(n)}`)})}function md(a,n,i){if(a.$kind!=="Input")return;let o=i.inputs[a.Input];o.$kind==="UnresolvedPure"&&(i.inputs[a.Input]=je.Pure(n.serialize(o.UnresolvedPure.value)))}function hg(a,n){let i=!1;return a.getInputUses(n,(o,r)=>{if(r.MoveCall&&r.MoveCall._argumentTypes){let s=r.MoveCall.arguments.indexOf(o);i=r.MoveCall._argumentTypes[s].ref!=="&"||i}(r.$kind==="MakeMoveVec"||r.$kind==="MergeCoins"||r.$kind==="SplitCoins")&&(i=!0)}),i}function vg(a,n){let i=!1;return a.getInputUses(n,(o,r)=>{if(r.MoveCall&&r.MoveCall._argumentTypes){let s=r.MoveCall.arguments.indexOf(o);i=Rg(r.MoveCall._argumentTypes[s])||i}}),i}function Rg(a){return typeof a.body!="object"||!("datatype"in a.body)?!1:a.body.datatype.package==="0x2"&&a.body.datatype.module==="transfer"&&a.body.datatype.type==="Receiving"}function un(a){if(!a.client)throw new Error("No sui client passed to Transaction#build, but transaction data was not sufficient to build offline.");return a.client}function Bg(a,n){return Array.from({length:Math.ceil(a.length/n)},(i,o)=>a.slice(o*n,o*n+n))}function bd(a){function n(i){return a(i)}return n.system=()=>n("0x5"),n.clock=()=>n("0x6"),n.random=()=>n("0x8"),n.denyList=()=>n("0x403"),n.option=({type:i,value:o})=>r=>r.moveCall({typeArguments:[i],target:`0x1::option::${o===null?"none":"some"}`,arguments:o===null?[]:[r.object(o)]}),n}var Id=require("@mysten/bcs");Ie();function yd(a){function n(i,o){if(typeof i=="string")return a(Zi(i).serialize(o));if(i instanceof Uint8Array||(0,Id.isSerializedBcs)(i))return a(i);throw new Error("tx.pure must be called either a bcs type name, or a serialized bcs value")}return n.u8=i=>a(y.U8.serialize(i)),n.u16=i=>a(y.U16.serialize(i)),n.u32=i=>a(y.U32.serialize(i)),n.u64=i=>a(y.U64.serialize(i)),n.u128=i=>a(y.U128.serialize(i)),n.u256=i=>a(y.U256.serialize(i)),n.bool=i=>a(y.Bool.serialize(i)),n.string=i=>a(y.String.serialize(i)),n.address=i=>a(y.Address.serialize(i)),n.id=n.address,n.vector=(i,o)=>a(y.vector(Zi(i)).serialize(o)),n.option=(i,o)=>a(y.option(Zi(i)).serialize(o)),n}function Zi(a){switch(a){case"u8":return y.u8();case"u16":return y.u16();case"u32":return y.u32();case"u64":return y.u64();case"u128":return y.u128();case"u256":return y.u256();case"bool":return y.bool();case"string":return y.string();case"id":case"address":return y.Address}let n=a.match(/^(vector|option)<(.+)>$/);if(n){let[i,o]=n.slice(1);return i==="vector"?y.vector(Zi(o)):y.option(Zi(o))}throw new Error(`Invalid Pure type name: ${a}`)}var Bd=require("@mysten/bcs"),Fa=require("valibot");Ie();Xe();var hd=require("@noble/hashes/blake2b");function vd(a,n){let i=Array.from(`${a}::`).map(r=>r.charCodeAt(0)),o=new Uint8Array(i.length+n.length);return o.set(i),o.set(n,i.length),(0,hd.blake2b)(o,{dkLen:32})}function Rd(a){return j(a).replace("0x","")}var _t=class a{constructor(n){this.version=2,this.sender=n?.sender??null,this.expiration=n?.expiration??null,this.inputs=n?.inputs??[],this.commands=n?.commands??[],this.gasData=n?.gasData??{budget:null,price:null,owner:null,payment:null}}static fromKindBytes(n){let o=y.TransactionKind.parse(n).ProgrammableTransaction;if(!o)throw new Error("Unable to deserialize from bytes.");return a.restore({version:2,sender:null,expiration:null,gasData:{budget:null,owner:null,payment:null,price:null},inputs:o.inputs,commands:o.commands})}static fromBytes(n){let o=y.TransactionData.parse(n)?.V1,r=o.kind.ProgrammableTransaction;if(!o||!r)throw new Error("Unable to deserialize from bytes.");return a.restore({version:2,sender:o.sender,expiration:o.expiration,gasData:o.gasData,inputs:r.inputs,commands:r.commands})}static restore(n){return n.version===2?new a((0,Fa.parse)(Ln,n)):new a((0,Fa.parse)(Ln,ld(n)))}static getDigestFromBytes(n){let i=vd("TransactionData",n);return(0,Bd.toBase58)(i)}get gasConfig(){return this.gasData}set gasConfig(n){this.gasData=n}build({maxSizeBytes:n=1/0,overrides:i,onlyTransactionKind:o}={}){let r=this.inputs,s=this.commands,d={ProgrammableTransaction:{inputs:r,commands:s}};if(o)return y.TransactionKind.serialize(d,{maxSize:n}).toBytes();let c=i?.expiration??this.expiration,A=i?.sender??this.sender,g={...this.gasData,...i?.gasConfig,...i?.gasData};if(!A)throw new Error("Missing transaction sender");if(!g.budget)throw new Error("Missing gas budget");if(!g.payment)throw new Error("Missing gas payment");if(!g.price)throw new Error("Missing gas price");let l={sender:Rd(A),expiration:c||{None:!0},gasData:{payment:g.payment,owner:Rd(this.gasData.owner??A),price:BigInt(g.price),budget:BigInt(g.budget)},kind:{ProgrammableTransaction:{inputs:r,commands:s}}};return y.TransactionData.serialize({V1:l},{maxSize:n}).toBytes()}addInput(n,i){let o=this.inputs.length;return this.inputs.push(i),{Input:o,type:n,$kind:"Input"}}getInputUses(n,i){this.mapArguments((o,r)=>(o.$kind==="Input"&&o.Input===n&&i(o,r),o))}mapArguments(n){for(let i of this.commands)switch(i.$kind){case"MoveCall":i.MoveCall.arguments=i.MoveCall.arguments.map(r=>n(r,i));break;case"TransferObjects":i.TransferObjects.objects=i.TransferObjects.objects.map(r=>n(r,i)),i.TransferObjects.address=n(i.TransferObjects.address,i);break;case"SplitCoins":i.SplitCoins.coin=n(i.SplitCoins.coin,i),i.SplitCoins.amounts=i.SplitCoins.amounts.map(r=>n(r,i));break;case"MergeCoins":i.MergeCoins.destination=n(i.MergeCoins.destination,i),i.MergeCoins.sources=i.MergeCoins.sources.map(r=>n(r,i));break;case"MakeMoveVec":i.MakeMoveVec.elements=i.MakeMoveVec.elements.map(r=>n(r,i));break;case"Upgrade":i.Upgrade.ticket=n(i.Upgrade.ticket,i);break;case"$Intent":let o=i.$Intent.inputs;i.$Intent.inputs={};for(let[r,s]of Object.entries(o))i.$Intent.inputs[r]=Array.isArray(s)?s.map(d=>n(d,i)):n(s,i);break;case"Publish":break;default:throw new Error(`Unexpected transaction kind: ${i.$kind}`)}}replaceCommand(n,i){if(!Array.isArray(i)){this.commands[n]=i;return}let o=i.length-1;this.commands.splice(n,1,...i),o!==0&&this.mapArguments(r=>{switch(r.$kind){case"Result":r.Result>n&&(r.Result+=o);break;case"NestedResult":r.NestedResult[0]>n&&(r.NestedResult[0]+=o);break}return r})}getDigest(){let n=this.build({onlyTransactionKind:!1});return a.getDigestFromBytes(n)}snapshot(){return(0,Fa.parse)(Ln,this)}};Xe();function vr(a){if(typeof a=="string")return j(a);if(a.Object)return a.Object.ImmOrOwnedObject?j(a.Object.ImmOrOwnedObject.objectId):a.Object.Receiving?j(a.Object.Receiving.objectId):j(a.Object.SharedObject.objectId);if(a.UnresolvedObject)return j(a.UnresolvedObject.objectId)}var fd=a=>{throw TypeError(a)},Wr=(a,n,i)=>n.has(a)||fd("Cannot "+i),x=(a,n,i)=>(Wr(a,n,"read from private field"),i?i.call(a):n.get(a)),wi=(a,n,i)=>n.has(a)?fd("Cannot add the same private member more than once"):n instanceof WeakSet?n.add(a):n.set(a,i),mn=(a,n,i,o)=>(Wr(a,n,"write to private field"),o?o.call(a,i):n.set(a,i),i),Lt=(a,n,i)=>(Wr(a,n,"access private method"),i),Vi,Xi,pn,U,gt,Na,fr,Br,Gr;function Yd(a,n=1/0){let i={$kind:"Result",Result:a},o=[],r=s=>o[s]??(o[s]={$kind:"NestedResult",NestedResult:[a,s]});return new Proxy(i,{set(){throw new Error("The transaction result is a proxy, and does not support setting properties directly")},get(s,d){if(d in s)return Reflect.get(s,d);if(d===Symbol.iterator)return function*(){let A=0;for(;A<n;)yield r(A),A++};if(typeof d=="symbol")return;let c=parseInt(d,10);if(!(Number.isNaN(c)||c<0))return r(c)}})}var Gd=Symbol.for("@mysten/transaction");function Ta(a){return!!a&&typeof a=="object"&&a[Gd]===!0}var Wd={buildPlugins:new Map,serializationPlugins:new Map},Rr=Symbol.for("@mysten/transaction/registry");function Si(){try{let a=globalThis;return a[Rr]||(a[Rr]=Wd),a[Rr]}catch{return Wd}}var Yg=class Yr{constructor(){wi(this,gt),wi(this,Vi),wi(this,Xi),wi(this,pn,new Map),wi(this,U),this.object=bd(i=>{if(typeof i=="function")return this.object(i(this));if(typeof i=="object"&&(0,ft.is)(ne,i))return i;let o=vr(i),r=x(this,U).inputs.find(s=>o===vr(s));return r?.Object?.SharedObject&&typeof i=="object"&&i.Object?.SharedObject&&(r.Object.SharedObject.mutable=r.Object.SharedObject.mutable||i.Object.SharedObject.mutable),r?{$kind:"Input",Input:x(this,U).inputs.indexOf(r),type:"object"}:x(this,U).addInput("object",typeof i=="string"?{$kind:"UnresolvedObject",UnresolvedObject:{objectId:j(i)}}:i)});let n=Si();mn(this,U,new _t),mn(this,Xi,[...n.buildPlugins.values()]),mn(this,Vi,[...n.serializationPlugins.values()])}static fromKind(n){let i=new Yr;return mn(i,U,_t.fromKindBytes(typeof n=="string"?(0,Hn.fromBase64)(n):n)),i}static from(n){let i=new Yr;return Ta(n)?mn(i,U,new _t(n.getData())):typeof n!="string"||!n.startsWith("{")?mn(i,U,_t.fromBytes(typeof n=="string"?(0,Hn.fromBase64)(n):n)):mn(i,U,_t.restore(JSON.parse(n))),i}static registerGlobalSerializationPlugin(n,i){Si().serializationPlugins.set(n,i??n)}static unregisterGlobalSerializationPlugin(n){Si().serializationPlugins.delete(n)}static registerGlobalBuildPlugin(n,i){Si().buildPlugins.set(n,i??n)}static unregisterGlobalBuildPlugin(n){Si().buildPlugins.delete(n)}addSerializationPlugin(n){x(this,Vi).push(n)}addBuildPlugin(n){x(this,Xi).push(n)}addIntentResolver(n,i){if(x(this,pn).has(n)&&x(this,pn).get(n)!==i)throw new Error(`Intent resolver for ${n} already exists`);x(this,pn).set(n,i)}setSender(n){x(this,U).sender=n}setSenderIfNotSet(n){x(this,U).sender||(x(this,U).sender=n)}setExpiration(n){x(this,U).expiration=n?(0,ft.parse)(Cr,n):null}setGasPrice(n){x(this,U).gasConfig.price=String(n)}setGasBudget(n){x(this,U).gasConfig.budget=String(n)}setGasBudgetIfNotSet(n){x(this,U).gasData.budget==null&&(x(this,U).gasConfig.budget=String(n))}setGasOwner(n){x(this,U).gasConfig.owner=n}setGasPayment(n){x(this,U).gasConfig.payment=n.map(i=>(0,ft.parse)(dt,i))}get blockData(){return hr(x(this,U).snapshot())}getData(){return x(this,U).snapshot()}get[Gd](){return!0}get pure(){return Object.defineProperty(this,"pure",{enumerable:!1,value:yd(n=>(0,Hn.isSerializedBcs)(n)?x(this,U).addInput("pure",{$kind:"Pure",Pure:{bytes:n.toBase64()}}):x(this,U).addInput("pure",(0,ft.is)(pr,n)?(0,ft.parse)(pr,n):n instanceof Uint8Array?je.Pure(n):{$kind:"UnresolvedPure",UnresolvedPure:{value:n}}))}),this.pure}get gas(){return{$kind:"GasCoin",GasCoin:!0}}objectRef(...n){return this.object(je.ObjectRef(...n))}receivingRef(...n){return this.object(je.ReceivingRef(...n))}sharedObjectRef(...n){return this.object(je.SharedObjectRef(...n))}add(n){if(typeof n=="function")return n(this);let i=x(this,U).commands.push(n);return Yd(i-1)}splitCoins(n,i){let o=Qe.SplitCoins(typeof n=="string"?this.object(n):Lt(this,gt,fr).call(this,n),i.map(s=>typeof s=="number"||typeof s=="bigint"||typeof s=="string"?this.pure.u64(s):Lt(this,gt,Na).call(this,s))),r=x(this,U).commands.push(o);return Yd(r-1,i.length)}mergeCoins(n,i){return this.add(Qe.MergeCoins(this.object(n),i.map(o=>this.object(o))))}publish({modules:n,dependencies:i}){return this.add(Qe.Publish({modules:n,dependencies:i}))}upgrade({modules:n,dependencies:i,package:o,ticket:r}){return this.add(Qe.Upgrade({modules:n,dependencies:i,package:o,ticket:this.object(r)}))}moveCall({arguments:n,...i}){return this.add(Qe.MoveCall({...i,arguments:n?.map(o=>Lt(this,gt,Na).call(this,o))}))}transferObjects(n,i){return this.add(Qe.TransferObjects(n.map(o=>this.object(o)),typeof i=="string"?this.pure.address(i):Lt(this,gt,Na).call(this,i)))}makeMoveVec({type:n,elements:i}){return this.add(Qe.MakeMoveVec({type:n,elements:i.map(o=>this.object(o))}))}serialize(){return JSON.stringify(hr(x(this,U).snapshot()))}async toJSON(n={}){return await this.prepareForSerialization(n),JSON.stringify((0,ft.parse)(ud,x(this,U).snapshot()),(i,o)=>typeof o=="bigint"?o.toString():o,2)}async sign(n){let{signer:i,...o}=n,r=await this.build(o);return i.signTransaction(r)}async build(n={}){return await this.prepareForSerialization(n),await Lt(this,gt,Br).call(this,n),x(this,U).build({onlyTransactionKind:n.onlyTransactionKind})}async getDigest(n={}){return await Lt(this,gt,Br).call(this,n),x(this,U).getDigest()}async prepareForSerialization(n){let i=new Set;for(let r of x(this,U).commands)r.$Intent&&i.add(r.$Intent.name);let o=[...x(this,Vi)];for(let r of i)if(!n.supportedIntents?.includes(r)){if(!x(this,pn).has(r))throw new Error(`Missing intent resolver for ${r}`);o.push(x(this,pn).get(r))}await Lt(this,gt,Gr).call(this,o,n)}};Vi=new WeakMap;Xi=new WeakMap;pn=new WeakMap;U=new WeakMap;gt=new WeakSet;Na=function(a){return(0,Hn.isSerializedBcs)(a)?this.pure(a):Lt(this,gt,fr).call(this,a)};fr=function(a){return typeof a=="function"?(0,ft.parse)(ne,a(this)):(0,ft.parse)(ne,a)};Br=async function(a){if(!a.onlyTransactionKind&&!x(this,U).sender)throw new Error("Missing transaction sender");await Lt(this,gt,Gr).call(this,[...x(this,Xi),Cd],a)};Gr=async function(a,n){let i=o=>{if(o>=a.length)return()=>{};let r=a[o];return async()=>{let s=i(o+1),d=!1,c=!1;if(await r(x(this,U),n,async()=>{if(d)throw new Error(`next() was call multiple times in TransactionPlugin ${o}`);d=!0,await s(),c=!0}),!d)throw new Error(`next() was not called in TransactionPlugin ${o}`);if(!c)throw new Error(`next() was not awaited in TransactionPlugin ${o}`)}};await i(0)()};var Gt=Yg;var $t=require("valibot");Ie();Xe();var Za="CoinWithBalance",Fd=Fi("0x2::sui::SUI");function oe({type:a=Fd,balance:n,useGasCoin:i=!0}){return o=>{o.addIntentResolver(Za,fg);let r=a==="gas"?a:Fi(a);return o.add(Qe.Intent({name:Za,inputs:{},data:{type:r===Fd&&i?"gas":r,balance:BigInt(n)}}))}}var Wg=(0,$t.object)({type:(0,$t.string)(),balance:(0,$t.bigint)()});async function fg(a,n,i){let o=new Set,r=new Map;if(!a.sender)throw new Error("Sender must be set to resolve CoinWithBalance");for(let g of a.commands)if(g.$kind==="$Intent"&&g.$Intent.name===Za){let{type:l,balance:m}=(0,$t.parse)(Wg,g.$Intent.data);l!=="gas"&&m>0n&&o.add(l),r.set(l,(r.get(l)??0n)+m)}let s=new Set;for(let g of a.inputs)g.Object?.ImmOrOwnedObject&&s.add(g.Object.ImmOrOwnedObject.objectId),g.UnresolvedObject?.objectId&&s.add(g.UnresolvedObject.objectId);let d=new Map,c=un(n);await Promise.all([...o].map(async g=>{d.set(g,await Gg({coinType:g,balance:r.get(g),client:c,owner:a.sender,usedIds:s}))}));let A=new Map;A.set("gas",{$kind:"GasCoin",GasCoin:!0});for(let[g,l]of a.commands.entries()){if(l.$kind!=="$Intent"||l.$Intent.name!==Za)continue;let{type:m,balance:I}=l.$Intent.data;if(I===0n){a.replaceCommand(g,Qe.MoveCall({target:"0x2::coin::zero",typeArguments:[m]}));continue}let h=[];if(!A.has(m)){let[W,...Y]=d.get(m).map(f=>a.addInput("object",je.ObjectRef({objectId:f.coinObjectId,digest:f.digest,version:f.version})));Y.length>0&&h.push(Qe.MergeCoins(W,Y)),A.set(m,W)}h.push(Qe.SplitCoins(A.get(m),[a.addInput("pure",je.Pure(y.u64().serialize(I)))])),a.replaceCommand(g,h),a.mapArguments(W=>W.$kind==="Result"&&W.Result===g?{$kind:"NestedResult",NestedResult:[g+h.length-1,0]}:W)}return i()}async function Gg({coinType:a,balance:n,client:i,owner:o,usedIds:r}){let s=n,d=[];return c();async function c(A=null){let{data:g,hasNextPage:l,nextCursor:m}=await i.getCoins({owner:o,coinType:a,cursor:A}),I=g.sort((h,W)=>Number(BigInt(W.balance)-BigInt(h.balance)));for(let h of I){if(r.has(h.coinObjectId))continue;let W=BigInt(h.balance);if(d.push(h),s-=W,s<=0)return d}if(l)return c(m);throw new Error(`Not enough coins of type ${a} to satisfy requested balance`)}}Xe();var Fg=Symbol.for("@mysten/SuiClient");var Jt=class{get[Fg](){return!0}constructor(n){this.transport=n.transport??new va({url:n.url})}async getRpcApiVersion(){return(await this.transport.request({method:"rpc.discover",params:[]})).info.version}async getCoins(n){if(!n.owner||!xe(j(n.owner)))throw new Error("Invalid Sui address");return await this.transport.request({method:"suix_getCoins",params:[n.owner,n.coinType,n.cursor,n.limit]})}async getAllCoins(n){if(!n.owner||!xe(j(n.owner)))throw new Error("Invalid Sui address");return await this.transport.request({method:"suix_getAllCoins",params:[n.owner,n.cursor,n.limit]})}async getBalance(n){if(!n.owner||!xe(j(n.owner)))throw new Error("Invalid Sui address");return await this.transport.request({method:"suix_getBalance",params:[n.owner,n.coinType]})}async getAllBalances(n){if(!n.owner||!xe(j(n.owner)))throw new Error("Invalid Sui address");return await this.transport.request({method:"suix_getAllBalances",params:[n.owner]})}async getCoinMetadata(n){return await this.transport.request({method:"suix_getCoinMetadata",params:[n.coinType]})}async getTotalSupply(n){return await this.transport.request({method:"suix_getTotalSupply",params:[n.coinType]})}async call(n,i){return await this.transport.request({method:n,params:i})}async getMoveFunctionArgTypes(n){return await this.transport.request({method:"sui_getMoveFunctionArgTypes",params:[n.package,n.module,n.function]})}async getNormalizedMoveModulesByPackage(n){return await this.transport.request({method:"sui_getNormalizedMoveModulesByPackage",params:[n.package]})}async getNormalizedMoveModule(n){return await this.transport.request({method:"sui_getNormalizedMoveModule",params:[n.package,n.module]})}async getNormalizedMoveFunction(n){return await this.transport.request({method:"sui_getNormalizedMoveFunction",params:[n.package,n.module,n.function]})}async getNormalizedMoveStruct(n){return await this.transport.request({method:"sui_getNormalizedMoveStruct",params:[n.package,n.module,n.struct]})}async getOwnedObjects(n){if(!n.owner||!xe(j(n.owner)))throw new Error("Invalid Sui address");return await this.transport.request({method:"suix_getOwnedObjects",params:[n.owner,{filter:n.filter,options:n.options},n.cursor,n.limit]})}async getObject(n){if(!n.id||!jn(Ve(n.id)))throw new Error("Invalid Sui Object id");return await this.transport.request({method:"sui_getObject",params:[n.id,n.options]})}async tryGetPastObject(n){return await this.transport.request({method:"sui_tryGetPastObject",params:[n.id,n.version,n.options]})}async multiGetObjects(n){if(n.ids.forEach(o=>{if(!o||!jn(Ve(o)))throw new Error(`Invalid Sui Object id ${o}`)}),n.ids.length!==new Set(n.ids).size)throw new Error(`Duplicate object ids in batch call ${n.ids}`);return await this.transport.request({method:"sui_multiGetObjects",params:[n.ids,n.options]})}async queryTransactionBlocks(n){return await this.transport.request({method:"suix_queryTransactionBlocks",params:[{filter:n.filter,options:n.options},n.cursor,n.limit,(n.order||"descending")==="descending"]})}async getTransactionBlock(n){if(!Ba(n.digest))throw new Error("Invalid Transaction digest");return await this.transport.request({method:"sui_getTransactionBlock",params:[n.digest,n.options]})}async multiGetTransactionBlocks(n){if(n.digests.forEach(o=>{if(!Ba(o))throw new Error(`Invalid Transaction digest ${o}`)}),n.digests.length!==new Set(n.digests).size)throw new Error(`Duplicate digests in batch call ${n.digests}`);return await this.transport.request({method:"sui_multiGetTransactionBlocks",params:[n.digests,n.options]})}async executeTransactionBlock({transactionBlock:n,signature:i,options:o,requestType:r}){let s=await this.transport.request({method:"sui_executeTransactionBlock",params:[typeof n=="string"?n:(0,Ht.toBase64)(n),Array.isArray(i)?i:[i],o]});if(r==="WaitForLocalExecution")try{await this.waitForTransaction({digest:s.digest})}catch{}return s}async signAndExecuteTransaction({transaction:n,signer:i,...o}){let r;n instanceof Uint8Array?r=n:(n.setSenderIfNotSet(i.toSuiAddress()),r=await n.build({client:this}));let{signature:s,bytes:d}=await i.signTransaction(r);return this.executeTransactionBlock({transactionBlock:d,signature:s,...o})}async getTotalTransactionBlocks(){let n=await this.transport.request({method:"sui_getTotalTransactionBlocks",params:[]});return BigInt(n)}async getReferenceGasPrice(){let n=await this.transport.request({method:"suix_getReferenceGasPrice",params:[]});return BigInt(n)}async getStakes(n){if(!n.owner||!xe(j(n.owner)))throw new Error("Invalid Sui address");return await this.transport.request({method:"suix_getStakes",params:[n.owner]})}async getStakesByIds(n){return n.stakedSuiIds.forEach(i=>{if(!i||!jn(Ve(i)))throw new Error(`Invalid Sui Stake id ${i}`)}),await this.transport.request({method:"suix_getStakesByIds",params:[n.stakedSuiIds]})}async getLatestSuiSystemState(){return await this.transport.request({method:"suix_getLatestSuiSystemState",params:[]})}async queryEvents(n){return await this.transport.request({method:"suix_queryEvents",params:[n.query,n.cursor,n.limit,(n.order||"descending")==="descending"]})}async subscribeEvent(n){return this.transport.subscribe({method:"suix_subscribeEvent",unsubscribe:"suix_unsubscribeEvent",params:[n.filter],onMessage:n.onMessage})}async subscribeTransaction(n){return this.transport.subscribe({method:"suix_subscribeTransaction",unsubscribe:"suix_unsubscribeTransaction",params:[n.filter],onMessage:n.onMessage})}async devInspectTransactionBlock(n){let i;if(Ta(n.transactionBlock))n.transactionBlock.setSenderIfNotSet(n.sender),i=(0,Ht.toBase64)(await n.transactionBlock.build({client:this,onlyTransactionKind:!0}));else if(typeof n.transactionBlock=="string")i=n.transactionBlock;else if(n.transactionBlock instanceof Uint8Array)i=(0,Ht.toBase64)(n.transactionBlock);else throw new Error("Unknown transaction block format.");return await this.transport.request({method:"sui_devInspectTransactionBlock",params:[n.sender,i,n.gasPrice?.toString(),n.epoch]})}async dryRunTransactionBlock(n){return await this.transport.request({method:"sui_dryRunTransactionBlock",params:[typeof n.transactionBlock=="string"?n.transactionBlock:(0,Ht.toBase64)(n.transactionBlock)]})}async getDynamicFields(n){if(!n.parentId||!jn(Ve(n.parentId)))throw new Error("Invalid Sui Object id");return await this.transport.request({method:"suix_getDynamicFields",params:[n.parentId,n.cursor,n.limit]})}async getDynamicFieldObject(n){return await this.transport.request({method:"suix_getDynamicFieldObject",params:[n.parentId,n.name]})}async getLatestCheckpointSequenceNumber(){let n=await this.transport.request({method:"sui_getLatestCheckpointSequenceNumber",params:[]});return String(n)}async getCheckpoint(n){return await this.transport.request({method:"sui_getCheckpoint",params:[n.id]})}async getCheckpoints(n){return await this.transport.request({method:"sui_getCheckpoints",params:[n.cursor,n?.limit,n.descendingOrder]})}async getCommitteeInfo(n){return await this.transport.request({method:"suix_getCommitteeInfo",params:[n?.epoch]})}async getNetworkMetrics(){return await this.transport.request({method:"suix_getNetworkMetrics",params:[]})}async getAddressMetrics(){return await this.transport.request({method:"suix_getLatestAddressMetrics",params:[]})}async getEpochMetrics(n){return await this.transport.request({method:"suix_getEpochMetrics",params:[n?.cursor,n?.limit,n?.descendingOrder]})}async getAllEpochAddressMetrics(n){return await this.transport.request({method:"suix_getAllEpochAddressMetrics",params:[n?.descendingOrder]})}async getEpochs(n){return await this.transport.request({method:"suix_getEpochs",params:[n?.cursor,n?.limit,n?.descendingOrder]})}async getMoveCallMetrics(){return await this.transport.request({method:"suix_getMoveCallMetrics",params:[]})}async getCurrentEpoch(){return await this.transport.request({method:"suix_getCurrentEpoch",params:[]})}async getValidatorsApy(){return await this.transport.request({method:"suix_getValidatorsApy",params:[]})}async getChainIdentifier(){let n=await this.getCheckpoint({id:"0"}),i=(0,Ht.fromBase58)(n.digest);return(0,Ht.toHex)(i.slice(0,4))}async resolveNameServiceAddress(n){return await this.transport.request({method:"suix_resolveNameServiceAddress",params:[n.name]})}async resolveNameServiceNames({format:n="dot",...i}){let{nextCursor:o,hasNextPage:r,data:s}=await this.transport.request({method:"suix_resolveNameServiceNames",params:[i.address,i.cursor,i.limit]});return{hasNextPage:r,nextCursor:o,data:s.map(d=>ad(d,n))}}async getProtocolConfig(n){return await this.transport.request({method:"sui_getProtocolConfig",params:[n?.version]})}async waitForTransaction({signal:n,timeout:i=60*1e3,pollInterval:o=2*1e3,...r}){let s=AbortSignal.timeout(i),d=new Promise((c,A)=>{s.addEventListener("abort",()=>A(s.reason))});for(d.catch(()=>{});!s.aborted;){n?.throwIfAborted();try{return await this.getTransactionBlock(r)}catch{await Promise.race([new Promise(A=>setTimeout(A,o)),d])}}throw s.throwIfAborted(),new Error("Unexpected error while waiting for transaction block.")}};var ja=require("big.js");var jr=ge(qt());var kt=ge(qt());ye();function Zd(a,n,i){return a.moveCall({target:`${kt.PUBLISHED_AT}::bridge_interface::swap`,typeArguments:n,arguments:[X(a,i.bridge),X(a,i.coin),$e(a,i.receiveAmountMin,"u64")]})}function wd(a,n,i){return a.moveCall({target:`${kt.PUBLISHED_AT}::bridge_interface::deposit`,typeArguments:[n],arguments:[X(a,i.bridge),X(a,i.userDeposit),X(a,i.coin)]})}function Sd(a,n,i){return a.moveCall({target:`${kt.PUBLISHED_AT}::bridge_interface::withdraw`,typeArguments:[n],arguments:[X(a,i.bridge),X(a,i.userDeposit),$e(a,i.amountLp,"u64")]})}function Vd(a,n,i){return a.moveCall({target:`${kt.PUBLISHED_AT}::bridge_interface::claim_reward`,typeArguments:[n],arguments:[X(a,i.bridge),X(a,i.userDeposit)]})}function Xd(a,n,i){return a.moveCall({target:`${kt.PUBLISHED_AT}::bridge_interface::pool`,typeArguments:[n],arguments:[X(a,i)]})}function Nr(a,n,i){return a.moveCall({target:`${kt.PUBLISHED_AT}::bridge_interface::swap_and_bridge_wormhole`,typeArguments:[n],arguments:[X(a,i.bridge),X(a,i.messenger),X(a,i.wormholeState),X(a,i.theClock),X(a,i.gasOracle),X(a,i.amount),X(a,i.recipient),$e(a,i.destinationChainId,"u8"),X(a,i.receiveToken),$e(a,i.nonce,"u256"),X(a,i.feeSuiCoin),X(a,i.feeTokenCoin)]})}function Md(a,n){return a.moveCall({target:`${kt.PUBLISHED_AT}::bridge_interface::new_user_deposit`,typeArguments:[n],arguments:[]})}function Tr(a,n,i){return a.moveCall({target:`${kt.PUBLISHED_AT}::bridge_interface::swap_and_bridge`,typeArguments:[n],arguments:[X(a,i.bridge),X(a,i.messenger),X(a,i.gasOracle),X(a,i.amount),X(a,i.recipient),$e(a,i.destinationChainId,"u8"),X(a,i.receiveToken),$e(a,i.nonce,"u256"),X(a,i.feeSuiCoin),X(a,i.feeTokenCoin)]})}var kd=ge(wr());var Pd=ge(wr());ye();function Sr(a,n,i){return a.moveCall({target:`${Pd.PUBLISHED_AT}::cctp_bridge_interface::bridge`,typeArguments:[n],arguments:[X(a,i.cctpBridge),X(a,i.gasOracle),X(a,i.tokenMessengerMinterState),X(a,i.messageTransmitterState),X(a,i.treasury),X(a,i.denyList),X(a,i.amount),X(a,i.feeSuiCoin),X(a,i.feeTokenCoin),$e(a,i.destinationChainId,"u8"),X(a,i.recipient),X(a,i.recipientWalletAddress)]})}var zd=ge(Xr());var Jd=ge(Xr());Ie();ye();Ie();ye();var Mr=class a{__VectorClass=!0;static $typeName="vector";static $numTypeParams=1;static $isPhantom=[!1];$typeName="vector";$fullTypeName;$typeArgs;$isPhantom=[!1];elements;constructor(n,i){this.$fullTypeName=D(this.$typeName,...n),this.$typeArgs=n,this.elements=i}static reified(n){return{typeName:a.$typeName,fullTypeName:D(a.$typeName,M(n)),typeArgs:[M(n)],isPhantom:a.$isPhantom,reifiedTypeArgs:[n],fromFields:i=>a.fromFields(n,i),fromFieldsWithTypes:i=>a.fromFieldsWithTypes(n,i),fromBcs:i=>a.fromBcs(n,i),bcs:a.bcs(Mi(n)),fromJSONField:i=>a.fromJSONField(n,i),fromJSON:i=>a.fromJSON(n,i),new:i=>new a([M(n)],i),kind:"VectorClassReified"}}static get r(){return a.reified}static get bcs(){return y.vector}static fromFields(n,i){return a.reified(n).new(i.map(o=>O(n,o)))}static fromFieldsWithTypes(n,i){return a.reified(n).new(i.map(o=>J(n,o)))}static fromBcs(n,i){return a.fromFields(n,a.bcs(Mi(n)).parse(i))}toJSONField(){return this.elements.map(n=>Cn(this.$typeArgs[0],n))}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,elements:this.toJSONField()}}static fromJSONField(n,i){return a.reified(n).new(i.map(o=>k(n,o)))}static fromJSON(n,i){if(i.$typeName!==a.$typeName)throw new Error("not a vector json object");return a.fromJSONField(n,i.elements)}};function Jn(a){return Mr.r(a)}function ce(a){return typeof a=="string"?{phantomType:a,kind:"PhantomReified"}:{phantomType:a.fullTypeName,kind:"PhantomReified"}}var Vg=y.bytes(32).transform({input:a=>(0,K.fromHEX)(a),output:a=>(0,K.toHEX)(a)});function Mi(a){switch(a){case"bool":return y.bool();case"u8":return y.u8();case"u16":return y.u16();case"u32":return y.u32();case"u64":return y.u64();case"u128":return y.u128();case"u256":return y.u256();case"address":return Vg;default:return a.bcs}}function M(a){switch(a){case"u8":case"u16":case"u32":case"u64":case"u128":case"u256":case"bool":case"address":return a}switch(a.kind){case"PhantomReified":return a.phantomType;case"StructClassReified":return a.fullTypeName;case"VectorClassReified":return a.fullTypeName}throw new Error("unreachable")}function O(a,n){switch(a){case"bool":case"u8":case"u16":case"u32":return n;case"u64":case"u128":case"u256":return BigInt(n);case"address":return`0x${n}`}if(a.kind==="VectorClassReified")return a.fromFields(n).elements;switch(a.typeName){case"0x1::string::String":case"0x1::ascii::String":return new TextDecoder().decode(Uint8Array.from(n.bytes)).toString();case"0x2::url::Url":return new TextDecoder().decode(Uint8Array.from(n.url.bytes)).toString();case"0x2::object::ID":return`0x${n.bytes}`;case"0x2::object::UID":return`0x${n.id.bytes}`;case"0x1::option::Option":return n.vec.length===0?null:a.fromFields(n).vec[0];default:return a.fromFields(n)}}function J(a,n){switch(a){case"bool":case"u8":case"u16":case"u32":return n;case"u64":case"u128":case"u256":return BigInt(n);case"address":return n}if(a.kind==="VectorClassReified")return a.fromFieldsWithTypes(n).elements;switch(a.typeName){case"0x1::string::String":case"0x1::ascii::String":case"0x2::url::Url":case"0x2::object::ID":return n;case"0x2::object::UID":return n.id;case"0x2::balance::Balance":return a.fromFields({value:BigInt(n)});case"0x1::option::Option":return n===null?null:J(a.reifiedTypeArgs[0],n);default:return a.fromFieldsWithTypes(n)}}function lt(a,n,i){if(i.length!==n.length)throw new Error(`provided item has mismatching number of type argments ${a} (expected ${i.length}, got ${n.length}))`);for(let o=0;o<n.length;o++)if(w(n[o])!==w(M(i[o])))throw new Error(`provided item has mismatching type argments ${a} (expected ${M(i[o])}, got ${n[o]}))`)}function Ft(a,n){let{typeArgs:i}=We(a.type);lt(a.type,i,n)}function Cn(a,n){let{typeName:i,typeArgs:o}=We(a);switch(i){case"bool":return n;case"u8":case"u16":case"u32":return n;case"u64":case"u128":case"u256":return n.toString();case"address":case"signer":return n;case"vector":return n.map(r=>Cn(o[0],r));case"0x1::string::String":case"0x1::ascii::String":case"0x2::url::Url":case"0x2::object::ID":case"0x2::object::UID":return n;case"0x1::option::Option":return n===null?null:Cn(o[0],n);default:return n.toJSONField()}}function k(a,n){switch(a){case"bool":case"u8":case"u16":case"u32":return n;case"u64":case"u128":case"u256":return BigInt(n);case"address":return n}if(a.kind==="VectorClassReified")return a.fromJSONField(n).elements;switch(a.typeName){case"0x1::string::String":case"0x1::ascii::String":case"0x2::url::Url":case"0x2::object::ID":case"0x2::object::UID":return n;case"0x1::option::Option":return n===null?null:k(a.reifiedTypeArgs[0],n);default:return a.fromJSONField(n)}}ye();var wa="0x1";ye();Ie();function Sa(a){return a=w(a),a===`${wa}::string::String`}var Va=class a{__StructClass=!0;static get $typeName(){return`${wa}::string::String`}static $numTypeParams=0;static $isPhantom=[];$typeName=a.$typeName;$fullTypeName;$typeArgs;$isPhantom=a.$isPhantom;bytes;constructor(n,i){this.$fullTypeName=D(a.$typeName,...n),this.$typeArgs=n,this.bytes=i.bytes}static reified(){return{typeName:a.$typeName,fullTypeName:D(a.$typeName),typeArgs:[],isPhantom:a.$isPhantom,reifiedTypeArgs:[],fromFields:n=>a.fromFields(n),fromFieldsWithTypes:n=>a.fromFieldsWithTypes(n),fromBcs:n=>a.fromBcs(n),bcs:a.bcs,fromJSONField:n=>a.fromJSONField(n),fromJSON:n=>a.fromJSON(n),fromSuiParsedData:n=>a.fromSuiParsedData(n),fromSuiObjectData:n=>a.fromSuiObjectData(n),fetch:async(n,i)=>a.fetch(n,i),new:n=>new a([],n),kind:"StructClassReified"}}static get r(){return a.reified()}static phantom(){return ce(a.reified())}static get p(){return a.phantom()}static get bcs(){return y.struct("String",{bytes:y.vector(y.u8())})}static fromFields(n){return a.reified().new({bytes:O(Jn("u8"),n.bytes)})}static fromFieldsWithTypes(n){if(!Sa(n.type))throw new Error("not a String type");return a.reified().new({bytes:J(Jn("u8"),n.fields.bytes)})}static fromBcs(n){return a.fromFields(a.bcs.parse(n))}toJSONField(){return{bytes:Cn("vector<u8>",this.bytes)}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(n){return a.reified().new({bytes:k(Jn("u8"),n.bytes)})}static fromJSON(n){if(n.$typeName!==a.$typeName)throw new Error("not a WithTwoGenerics json object");return a.fromJSONField(n)}static fromSuiParsedData(n){if(n.dataType!=="moveObject")throw new Error("not an object");if(!Sa(n.type))throw new Error(`object at ${n.fields.id} is not a String object`);return a.fromFieldsWithTypes(n)}static fromSuiObjectData(n){if(n.bcs){if(n.bcs.dataType!=="moveObject"||!Sa(n.bcs.type))throw new Error("object at is not a String object");return a.fromBcs((0,K.fromB64)(n.bcs.bcsBytes))}if(n.content)return a.fromSuiParsedData(n.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(n,i){let o=await n.getObject({id:i,options:{showBcs:!0}});if(o.error)throw new Error(`error fetching String object at id ${i}: ${o.error.code}`);if(o.data?.bcs?.dataType!=="moveObject"||!Sa(o.data.bcs.type))throw new Error(`object at id ${i} is not a String object`);return a.fromSuiObjectData(o.data)}};ye();ye();var en="0x2";Ie();function Xa(a){return a=w(a),a===`${en}::object::ID`}var bn=class a{__StructClass=!0;static get $typeName(){return`${en}::object::ID`}static $numTypeParams=0;static $isPhantom=[];$typeName=a.$typeName;$fullTypeName;$typeArgs;$isPhantom=a.$isPhantom;bytes;constructor(n,i){this.$fullTypeName=D(a.$typeName,...n),this.$typeArgs=n,this.bytes=i.bytes}static reified(){return{typeName:a.$typeName,fullTypeName:D(a.$typeName),typeArgs:[],isPhantom:a.$isPhantom,reifiedTypeArgs:[],fromFields:n=>a.fromFields(n),fromFieldsWithTypes:n=>a.fromFieldsWithTypes(n),fromBcs:n=>a.fromBcs(n),bcs:a.bcs,fromJSONField:n=>a.fromJSONField(n),fromJSON:n=>a.fromJSON(n),fromSuiParsedData:n=>a.fromSuiParsedData(n),fromSuiObjectData:n=>a.fromSuiObjectData(n),fetch:async(n,i)=>a.fetch(n,i),new:n=>new a([],n),kind:"StructClassReified"}}static get r(){return a.reified()}static phantom(){return ce(a.reified())}static get p(){return a.phantom()}static get bcs(){return y.struct("ID",{bytes:y.bytes(32).transform({input:n=>(0,K.fromHEX)(n),output:n=>(0,K.toHEX)(n)})})}static fromFields(n){return a.reified().new({bytes:O("address",n.bytes)})}static fromFieldsWithTypes(n){if(!Xa(n.type))throw new Error("not a ID type");return a.reified().new({bytes:J("address",n.fields.bytes)})}static fromBcs(n){return a.fromFields(a.bcs.parse(n))}toJSONField(){return{bytes:this.bytes}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(n){return a.reified().new({bytes:k("address",n.bytes)})}static fromJSON(n){if(n.$typeName!==a.$typeName)throw new Error("not a WithTwoGenerics json object");return a.fromJSONField(n)}static fromSuiParsedData(n){if(n.dataType!=="moveObject")throw new Error("not an object");if(!Xa(n.type))throw new Error(`object at ${n.fields.id} is not a ID object`);return a.fromFieldsWithTypes(n)}static fromSuiObjectData(n){if(n.bcs){if(n.bcs.dataType!=="moveObject"||!Xa(n.bcs.type))throw new Error("object at is not a ID object");return a.fromBcs((0,K.fromB64)(n.bcs.bcsBytes))}if(n.content)return a.fromSuiParsedData(n.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(n,i){let o=await n.getObject({id:i,options:{showBcs:!0}});if(o.error)throw new Error(`error fetching ID object at id ${i}: ${o.error.code}`);if(o.data?.bcs?.dataType!=="moveObject"||!Xa(o.data.bcs.type))throw new Error(`object at id ${i} is not a ID object`);return a.fromSuiObjectData(o.data)}};function Ma(a){return a=w(a),a===`${en}::object::UID`}var qe=class a{__StructClass=!0;static get $typeName(){return`${en}::object::UID`}static $numTypeParams=0;static $isPhantom=[];$typeName=a.$typeName;$fullTypeName;$typeArgs;$isPhantom=a.$isPhantom;id;constructor(n,i){this.$fullTypeName=D(a.$typeName,...n),this.$typeArgs=n,this.id=i.id}static reified(){return{typeName:a.$typeName,fullTypeName:D(a.$typeName),typeArgs:[],isPhantom:a.$isPhantom,reifiedTypeArgs:[],fromFields:n=>a.fromFields(n),fromFieldsWithTypes:n=>a.fromFieldsWithTypes(n),fromBcs:n=>a.fromBcs(n),bcs:a.bcs,fromJSONField:n=>a.fromJSONField(n),fromJSON:n=>a.fromJSON(n),fromSuiParsedData:n=>a.fromSuiParsedData(n),fromSuiObjectData:n=>a.fromSuiObjectData(n),fetch:async(n,i)=>a.fetch(n,i),new:n=>new a([],n),kind:"StructClassReified"}}static get r(){return a.reified()}static phantom(){return ce(a.reified())}static get p(){return a.phantom()}static get bcs(){return y.struct("UID",{id:bn.bcs})}static fromFields(n){return a.reified().new({id:O(bn.reified(),n.id)})}static fromFieldsWithTypes(n){if(!Ma(n.type))throw new Error("not a UID type");return a.reified().new({id:J(bn.reified(),n.fields.id)})}static fromBcs(n){return a.fromFields(a.bcs.parse(n))}toJSONField(){return{id:this.id}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(n){return a.reified().new({id:k(bn.reified(),n.id)})}static fromJSON(n){if(n.$typeName!==a.$typeName)throw new Error("not a WithTwoGenerics json object");return a.fromJSONField(n)}static fromSuiParsedData(n){if(n.dataType!=="moveObject")throw new Error("not an object");if(!Ma(n.type))throw new Error(`object at ${n.fields.id} is not a UID object`);return a.fromFieldsWithTypes(n)}static fromSuiObjectData(n){if(n.bcs){if(n.bcs.dataType!=="moveObject"||!Ma(n.bcs.type))throw new Error("object at is not a UID object");return a.fromBcs((0,K.fromB64)(n.bcs.bcsBytes))}if(n.content)return a.fromSuiParsedData(n.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(n,i){let o=await n.getObject({id:i,options:{showBcs:!0}});if(o.error)throw new Error(`error fetching UID object at id ${i}: ${o.error.code}`);if(o.data?.bcs?.dataType!=="moveObject"||!Ma(o.data.bcs.type))throw new Error(`object at id ${i} is not a UID object`);return a.fromSuiObjectData(o.data)}};function ut(a,n){return a.moveCall({target:`${Jd.PUBLISHED_AT}::bytes32::from_hex`,arguments:[$e(a,n,`${Va.$typeName}`)]})}async function Nt(a,n,i=[]){let o=await a(n),r=i.concat(o.data);return o.hasNextPage&&o.nextCursor?Nt(a,o.nextCursor,r):r}var kn=class extends Ge{constructor(i,o){super();this.nodeRpcUrlsConfig=i;this.api=o;this.client=new Jt({url:i.getNodeRpcUrl(this.chainSymbol)})}chainType="SUI";chainSymbol="SUI";client;send(){throw new B("Method send not implemented.")}async buildRawTransactionSwap(i){let o=i.sourceToken.suiAddresses;if(!o)throw new B("SUI token must contain 'suiAddresses'");(0,jr.setAddress)(o.bridgeAddress,o.bridgeAddressOrigin);let r=De(this.chainType,i);return await this.buildRawTransactionSwapFromParams(r,o)}async buildRawTransactionSwapFromParams(i,o){let{amount:r,fromAccountAddress:s,fromTokenAddress:d,toTokenAddress:c,minimumReceiveAmount:A}=i,g=new Gt;g.setSender(s);let l={bridge:o.bridgeObjectAddress,coin:oe({balance:BigInt(r),type:d}),receiveAmountMin:BigInt(A)},m=Zd(g,[d,c],l),I=await Nt(h=>this.client.getCoins({owner:i.toAccountAddress,coinType:c,cursor:h}));return I.length===0||!I[0]?g.transferObjects([m],i.toAccountAddress):g.mergeCoins(I[0].coinObjectId,[m]),await g.toJSON({client:this.client})}async buildRawTransactionSendFromCustomTx(i,o,r){let s=Gt.from(i);return this.buildRawTransactionSendFromTx(r,s,o)}async buildRawTransactionSend(i){return this.buildRawTransactionSendFromTx(i,new Gt)}async buildRawTransactionSendFromTx(i,o,r){let s=await ke(this.chainType,i,this.api),{messenger:d}=s,c=i.sourceToken.suiAddresses;if(!c)throw new B("SUI token must contain 'suiAddresses'");switch((0,jr.setAddress)(c.bridgeAddress,c.bridgeAddressOrigin),(0,zd.setAddress)(c.utilsAddress),d){case 1:return this.buildRawTransactionAllbridgeSend(s,c,o,r);case 2:return this.buildRawTransactionWormholeSend(s,c,o,r);case 3:case 4:return this.buildRawTransactionCctpSend(i,s,c,o,r);case 5:throw new ve("Messenger OFT is not supported yet.")}}async buildRawTransactionAllbridgeSend(i,o,r,s){let{amount:d,fromAccountAddress:c,fromTokenAddress:A,toChainId:g,toAccountAddress:l,toTokenAddress:m,fee:I,gasFeePaymentMethod:h,extraGas:W}=i,Y=I;if(W&&(Y=(0,ja.Big)(Y).plus(W).toFixed()),r.setSender(c),h==="stablecoin"){let f=BigInt(d)-BigInt(Y),T,G;if(s){let[P]=r.splitCoins(s,[Y]);T=s,G=P}else T=oe({balance:f,type:A}),G=oe({balance:BigInt(Y),type:A});let Z={bridge:o.bridgeObjectAddress,messenger:o.allbridgeMessengerObjectAddress,amount:T,destinationChainId:g,nonce:Wt(),recipient:ut(r,it(l)),receiveToken:ut(r,it(m)),gasOracle:o.gasOracleObjectAddress,feeTokenCoin:G,feeSuiCoin:oe({balance:BigInt(0),useGasCoin:!1})};Tr(r,A,Z)}else{let f=Y==="0"?oe({balance:BigInt(Y),useGasCoin:!1}):oe({balance:BigInt(Y)}),T={bridge:o.bridgeObjectAddress,messenger:o.allbridgeMessengerObjectAddress,amount:s??oe({balance:BigInt(d),type:A}),destinationChainId:g,nonce:Wt(),recipient:ut(r,it(l)),receiveToken:ut(r,it(m)),gasOracle:o.gasOracleObjectAddress,feeTokenCoin:oe({balance:BigInt(0),type:A}),feeSuiCoin:f};Tr(r,A,T)}return await r.toJSON({client:this.client})}async buildRawTransactionWormholeSend(i,o,r,s){let{amount:d,fromAccountAddress:c,fromTokenAddress:A,toChainId:g,toAccountAddress:l,toTokenAddress:m,fee:I,gasFeePaymentMethod:h,extraGas:W}=i,Y=I;if(W&&(Y=(0,ja.Big)(Y).plus(W).toFixed()),r.setSender(c),h==="stablecoin"){let f=BigInt(d)-BigInt(Y),T,G;if(s){let[P]=r.splitCoins(s,[Y]);T=s,G=P}else T=oe({balance:f,type:A}),G=oe({balance:BigInt(Y),type:A});let Z={bridge:o.bridgeObjectAddress,messenger:o.wormholeMessengerObjectAddress,wormholeState:o.wormholeStateObjectAddress,theClock:fa,amount:T,destinationChainId:g,nonce:Wt(),recipient:ut(r,it(l)),receiveToken:ut(r,it(m)),gasOracle:o.gasOracleObjectAddress,feeTokenCoin:G,feeSuiCoin:oe({balance:BigInt(0),useGasCoin:!1})};Nr(r,A,Z)}else{let f=Y==="0"?oe({balance:BigInt(Y),useGasCoin:!1}):oe({balance:BigInt(Y)}),T={bridge:o.bridgeObjectAddress,messenger:o.wormholeMessengerObjectAddress,wormholeState:o.wormholeStateObjectAddress,theClock:fa,amount:s??oe({balance:BigInt(d),type:A}),destinationChainId:g,nonce:Wt(),recipient:ut(r,it(l)),receiveToken:ut(r,it(m)),gasOracle:o.gasOracleObjectAddress,feeTokenCoin:oe({balance:BigInt(0),type:A}),feeSuiCoin:f};Nr(r,A,T)}return await r.toJSON({client:this.client})}async buildRawTransactionCctpSend(i,o,r,s,d){let{amount:c,fromAccountAddress:A,fromTokenAddress:g,toChainId:l,toAccountAddress:m,fee:I,gasFeePaymentMethod:h,extraGas:W}=o;(0,kd.setAddress)(r.cctpAddress,r.cctpAddressOrigin);let Y=I;W&&(Y=(0,ja.Big)(Y).plus(W).toFixed()),s.setSender(A);let f=ut(s,it(m)),T;if(i.destinationToken.chainType==="SOLANA"){let G=await da(this.chainType,i.toAccountAddress,i.destinationToken.tokenAddress,this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"));T=ut(s,it(G))}else T=f;if(h==="stablecoin"){let G=BigInt(c)-BigInt(Y),Z,P;if(d){let[Q]=s.splitCoins(d,[Y]);Z=d,P=Q}else Z=oe({balance:G,type:g}),P=oe({balance:BigInt(Y),type:g});let te={cctpBridge:r.cctpObjectAddress,tokenMessengerMinterState:r.cctpTokenMessengerMinterStateObjectAddress,messageTransmitterState:r.cctpMessageTransmitterStateObjectAddress,treasury:r.cctpTreasuryObjectAddress,denyList:r.cctpDenyListObjectAddress,amount:Z,destinationChainId:l,recipient:T,recipientWalletAddress:f,gasOracle:r.gasOracleObjectAddress,feeTokenCoin:P,feeSuiCoin:oe({balance:BigInt(0),useGasCoin:!1})};Sr(s,g,te)}else{let G=Y==="0"?oe({balance:BigInt(Y),useGasCoin:!1}):oe({balance:BigInt(Y)}),Z={cctpBridge:r.cctpObjectAddress,tokenMessengerMinterState:r.cctpTokenMessengerMinterStateObjectAddress,messageTransmitterState:r.cctpMessageTransmitterStateObjectAddress,treasury:r.cctpTreasuryObjectAddress,denyList:r.cctpDenyListObjectAddress,amount:d??oe({balance:BigInt(c),type:g}),destinationChainId:l,recipient:T,recipientWalletAddress:f,gasOracle:r.gasOracleObjectAddress,feeTokenCoin:oe({balance:BigInt(0),type:g}),feeSuiCoin:G};Sr(s,g,Z)}return await s.toJSON({client:this.client})}};var Qd=require("big.js");var xd=ge(require("bn.js"));function Pa(a){return"0x"+new xd.default(a).toString("hex")}function Od(a){return new Promise(n=>setTimeout(()=>n(),a))}async function La(a,n){let i=await a.trx.sign(n);if(!i.signature)throw new nn("Transaction was not signed properly");let r=(await a.trx.sendRawTransaction(i)).transaction.txID;return await Xg(a,r),{txId:r}}async function Xg(a,n,i=1e4){let o=Date.now();for(;;){if(Date.now()-o>i)throw new Yn("Transaction not found");let r=await a.trx.getUnconfirmedTransactionInfo(n);if(!r?.receipt){await Od(2e3);continue}if(r.receipt.result==="SUCCESS")return r;throw new Yn(`Transaction status is ${r.receipt.result}`)}}var ji=class extends Ge{constructor(i,o){super();this.tronWeb=i;this.api=o}chainType="TRX";async send(i){let o=await ke(this.chainType,i,this.api),r=await this.buildRawTransactionSendFromParams(i,o);return await La(this.tronWeb,r)}async buildRawTransactionSwap(i){let o=De(this.chainType,i);return await this.buildRawTransactionSwapFromParams(o)}async buildRawTransactionSwapFromParams(i){let{amount:o,contractAddress:r,fromAccountAddress:s,fromTokenAddress:d,toAccountAddress:c,toTokenAddress:A,minimumReceiveAmount:g}=i,l=[{type:"uint256",value:o},{type:"bytes32",value:d},{type:"bytes32",value:A},{type:"address",value:c},{type:"uint256",value:g}];return this.buildRawTransaction(r,"swap(uint256,bytes32,bytes32,address,uint256)",l,"0",s)}async buildRawTransactionSend(i){let o=await ke(this.chainType,i,this.api);return this.buildRawTransactionSendFromParams(i,o)}async buildRawTransactionSendFromParams(i,o){let{amount:r,contractAddress:s,fromAccountAddress:d,fromTokenAddress:c,toChainId:A,toAccountAddress:g,toTokenAddress:l,messenger:m,fee:I,gasFeePaymentMethod:h,extraGas:W,extraGasDest:Y}=o,f=I;W&&(f=(0,Qd.Big)(f).plus(W).toFixed());let T=Wt().toString(),G,Z,P;switch(m){case 3:case 4:h==="stablecoin"?(G=[{type:"uint256",value:r},{type:"bytes32",value:g},{type:"uint256",value:A},{type:"uint256",value:f}],Z="0"):(G=[{type:"uint256",value:r},{type:"bytes32",value:g},{type:"uint256",value:A},{type:"uint256",value:0}],Z=f),P="bridge(uint256,bytes32,uint256,uint256)";break;case 5:h==="stablecoin"?(G=[{type:"address",value:i.sourceToken.tokenAddress},{type:"uint256",value:r},{type:"bytes32",value:g},{type:"uint256",value:A},{type:"uint256",value:f},{type:"uint256",value:Y??"0"},{type:"uint256",value:"10"}],Z="0"):(G=[{type:"address",value:i.sourceToken.tokenAddress},{type:"uint256",value:r},{type:"bytes32",value:g},{type:"uint256",value:A},{type:"uint256",value:0},{type:"uint256",value:Y??"0"},{type:"uint256",value:"10"}],Z=f),P="bridge(address,uint256,bytes32,uint256,uint256,uint256,uint256)";break;case 1:case 2:h==="stablecoin"?(G=[{type:"bytes32",value:c},{type:"uint256",value:r},{type:"bytes32",value:g},{type:"uint256",value:A},{type:"bytes32",value:l},{type:"uint256",value:T},{type:"uint8",value:m},{type:"uint256",value:f}],Z="0"):(G=[{type:"bytes32",value:c},{type:"uint256",value:r},{type:"bytes32",value:g},{type:"uint256",value:A},{type:"bytes32",value:l},{type:"uint256",value:T},{type:"uint8",value:m},{type:"uint256",value:0}],Z=f),P="swapAndBridge(bytes32,uint256,bytes32,uint256,bytes32,uint256,uint8,uint256)";break}return this.buildRawTransaction(s,P,G,Z,d)}async buildRawTransaction(i,o,r,s,d){let c=await this.tronWeb.transactionBuilder.triggerSmartContract(i,o,{callValue:+s},r,d);if(!c?.result?.result)throw new B("Unknown error: "+JSON.stringify(c,null,2));return c.transaction}};var Ha=class{constructor(n,i,o,r){this.api=n;this.nodeRpcUrlsConfig=i;this.params=o;this.tokenService=r;this.rawTxBuilder=new ca(n,i,o,r)}rawTxBuilder;async getAllowance(n,i){let o,r;i?(o=n,r=i):r=n;let s=yi(r.token,r.messenger);return await this.tokenService.getAllowance({...r,spender:s},o)}async checkAllowance(n,i){let o,r;i?(o=n,r=i):r=n;let s=yi(r.token,r.messenger);return this.tokenService.checkAllowance({...r,spender:s},o)}async approve(n,i){let o=yi(i.token,i.messenger);return this.tokenService.approve(n,{...i,spender:o})}async send(n,i){return H(i.amount),z("amount",i.amount,i.sourceToken.decimals),Aa(i.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,n).send(i)}};function yi(a,n=1){switch(n){case 3:if(a.cctpAddress)return a.cctpAddress;throw new he("Such route does not support CCTP protocol");case 4:if(a.cctpV2Address)return a.cctpV2Address;throw new he("Such route does not support CCTP V2 protocol");case 5:if(a.oftBridgeAddress)return a.oftBridgeAddress;throw new ve("Such route does not support OFT protocol");case 1:case 2:return a.bridgeAddress}}function Aa(a,n,i,o,r){switch(L.getChainProperty(a).chainType){case"EVM":{if(r)return new Ii(r,n,i);{let s=i.getNodeRpcUrl(a);return new Ii(new Ud.Web3(s),n,i)}}case"TRX":{if(r)return new ji(r,n);{let s=i.getNodeRpcUrl(a);return new ji(new Kd.TronWeb({fullHost:s,solidityNode:s,eventServer:s}),n)}}case"SOLANA":return new ua(i.getNodeRpcUrl("SOL"),{wormholeMessengerProgramId:o.wormholeMessengerProgramId,solanaLookUpTable:o.solanaLookUpTable,cctpParams:o.cctpParams,jupiterParams:{jupiterUrl:o.jupiterUrl,jupiterApiKeyHeader:o.jupiterApiKeyHeader,jupiterMaxAccounts:o.jupiterMaxAccounts}},n);case"SRB":return new pa(i,o,n);case"SUI":return new kn(i,n);case"ALG":if(r){let s=r,d=Pr.AlgorandClient.fromClients({algod:s});return new Ci(d,n)}else{let s=i.getNodeRpcUrl(a),d=Pr.AlgorandClient.fromConfig({algodConfig:{server:s}});return new Ci(d,n)}}}var Qr=require("@algorandfoundation/algokit-utils"),rc=require("big.js");var Mg=(a,n)=>a!==null&&Object.prototype.hasOwnProperty.call(a,n),Dd="__cache__",Lr=function(a){return typeof a!="string"?Dd+JSON.stringify(a):Dd+a},Hr=class{constructor(n={defaultTtl:60*1e3}){this.cache={},this.defaultTtl=n.defaultTtl||60*1e3}put(n,i,o){let r=(o?o.ttl:void 0)||this.defaultTtl,s=(o?o.callback:void 0)||function(){},d=Lr(n),c=this.cache[d];c&&clearTimeout(c.handle);let A=setTimeout(()=>this.remove(n),r);this.cache[d]={handle:A,data:i,callback:s}}get(n){let i=this.cache[Lr(n)];return i&&i.data}remove(n){let i=Lr(n),o=this.cache[i];o&&(clearTimeout(o.handle),delete this.cache[i],o.callback(n,o.data))}clear(){for(let n in this.cache)Mg(this.cache,n)&&clearTimeout(this.cache[n].handle);this.cache={}}size(){return Object.keys(this.cache).length}},zt=Hr;var sc=require("tronweb"),Kn=require("web3");var Tt=require("big.js");function Ed(a,n,i,o,r){let s=V(a,3),d=(0,Tt.Big)(s),c=(0,Tt.Big)(i),A=(0,Tt.Big)(o).plus(r),g,l;if(c.eq(0)||A.eq(0)){let I=d.div(2);g=(0,Tt.Big)(o).plus(I),l=(0,Tt.Big)(r).plus(I)}else g=(0,Tt.Big)(o).plus(d.mul(o).div(A)),l=(0,Tt.Big)(r).plus(d.mul(r).div(A));return(0,Tt.Big)(cs(n,g.toFixed(),l.toFixed())).minus(c).toFixed()}function _d(a){let n=V(a,3);return(0,Tt.Big)(n).round().toFixed()}var ec=require("algosdk");var $d=require("@algorandfoundation/algokit-utils/types/app-arc56"),Pi=require("@algorandfoundation/algokit-utils/types/app-client"),jg=require("@algorandfoundation/algokit-utils/types/app-factory"),qd=require("algosdk"),Ja={name:"Pool",structs:{},methods:[{name:"createApplication",args:[{type:"address",name:"owner"},{type:"address",name:"router"},{type:"uint64",name:"a"},{type:"uint64",name:"assetId"},{type:"uint64",name:"feeShareBP"},{type:"uint64",name:"balanceRatioMinBP"}],returns:{type:"void"},actions:{create:["NoOp"],call:[]},readonly:!1,events:[],recommendations:{}},{name:"optInToApplication",args:[],returns:{type:"void"},actions:{create:[],call:["OptIn"]},readonly:!1,events:[],recommendations:{}},{name:"optInAsset",args:[],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,desc:"Opt-in the application account to the ASA stored in `this.asset`.\nThis performs an inner axfer of 0 to the app's own address.\nCall once after deploy (or whenever you change the asset).",events:[],recommendations:{}},{name:"noop",args:[],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"deposit",args:[],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[{name:"RewardsClaimed",args:[{type:"address",name:"user"},{type:"uint64",name:"pending"}]},{name:"Deposit",args:[{type:"address",name:"to"},{type:"uint64",name:"lpAmount"}]}],recommendations:{}},{name:"withdraw",args:[{type:"uint64",name:"amountLp",desc:"The Withdrawn amount"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[{name:"RewardsClaimed",args:[{type:"address",name:"user"},{type:"uint64",name:"pending"}]},{name:"Withdraw",args:[{type:"address",name:"from"},{type:"uint64",name:"lpAmount"}]}],recommendations:{}},{name:"swapToVUsd",args:[{type:"address",name:"user"},{type:"uint64",name:"amount",desc:"The amount of tokens to swap."},{type:"bool",name:"zeroFee",desc:`When true it allows to swap without incurring any fees. It is intended for use with service
|
|
1
|
+
"use strict";var Tc=Object.create;var ea=Object.defineProperty;var Zc=Object.getOwnPropertyDescriptor;var wc=Object.getOwnPropertyNames;var Sc=Object.getPrototypeOf,Vc=Object.prototype.hasOwnProperty;var Bn=(a,n)=>()=>(a&&(n=a(a=0)),n);var ho=(a,n)=>()=>(n||a((n={exports:{}}).exports,n),n.exports),Xc=(a,n)=>{for(var i in n)ea(a,i,{get:n[i],enumerable:!0})},ns=(a,n,i,o)=>{if(n&&typeof n=="object"||typeof n=="function")for(let r of wc(n))!Vc.call(a,r)&&r!==i&&ea(a,r,{get:()=>n[r],enumerable:!(o=Zc(n,r))||o.enumerable});return a};var ge=(a,n,i)=>(i=a!=null?Tc(Sc(a)):{},ns(n||!a||!a.__esModule?ea(i,"default",{value:a,enumerable:!0}):i,a)),Mc=a=>ns(ea({},"__esModule",{value:!0}),a);function Ya(a){try{return(0,Ba.fromBase58)(a).length===rA}catch{return!1}}function xe(a){return dA(a)&&cA(a)===Fi}function Pn(a){return xe(a)}function sA(a){return a.includes("::")?Jo(a):a}function Jo(a){let[n,i]=a.split("::"),o=a.slice(n.length+i.length+4),r=o.includes("<")?o.slice(0,o.indexOf("<")):o,s=o.includes("<")?(0,Ba.splitGenericParameters)(o.slice(o.indexOf("<")+1,o.lastIndexOf(">"))).map(d=>sA(d.trim())):[];return{address:j(n),module:i,name:r,typeParams:s}}function Ni(a){let{address:n,module:i,name:o,typeParams:r}=typeof a=="string"?Jo(a):a,s=r?.length>0?`<${r.map(d=>typeof d=="string"?d:Ni(d)).join(",")}>`:"";return`${n}::${i}::${o}${s}`}function j(a,n=!1){let i=a.toLowerCase();return!n&&i.startsWith("0x")&&(i=i.slice(2)),`0x${i.padStart(Fi*2,"0")}`}function Ve(a,n=!1){return j(a,n)}function dA(a){return/^(0x|0X)?[a-fA-F0-9]+$/.test(a)&&a.length%2===0}function cA(a){return/^(0x|0X)/.test(a)?(a.length-2)/2:a.length/2}var Ba,rA,Fi,Xe=Bn(()=>{Ba=require("@mysten/bcs"),rA=32;Fi=32});var $s,AA,gA,Vt,ko=Bn(()=>{$s=require("@mysten/bcs");Xe();AA=/^vector<(.+)>$/,gA=/^([^:]+)::([^:]+)::([^<]+)(<(.+)>)?/,Vt=class a{static parseFromStr(n,i=!1){if(n==="address")return{address:null};if(n==="bool")return{bool:null};if(n==="u8")return{u8:null};if(n==="u16")return{u16:null};if(n==="u32")return{u32:null};if(n==="u64")return{u64:null};if(n==="u128")return{u128:null};if(n==="u256")return{u256:null};if(n==="signer")return{signer:null};let o=n.match(AA);if(o)return{vector:a.parseFromStr(o[1],i)};let r=n.match(gA);if(r)return{struct:{address:i?j(r[1]):r[1],module:r[2],name:r[3],typeParams:r[5]===void 0?[]:a.parseStructTypeArgs(r[5],i)}};throw new Error(`Encountered unexpected token when parsing type args for ${n}`)}static parseStructTypeArgs(n,i=!1){return(0,$s.splitGenericParameters)(n).map(o=>a.parseFromStr(o,i))}static tagToString(n){if("bool"in n)return"bool";if("u8"in n)return"u8";if("u16"in n)return"u16";if("u32"in n)return"u32";if("u64"in n)return"u64";if("u128"in n)return"u128";if("u256"in n)return"u256";if("address"in n)return"address";if("signer"in n)return"signer";if("vector"in n)return`vector<${a.tagToString(n.vector)}>`;if("struct"in n){let i=n.struct,o=i.typeParams.map(a.tagToString).join(", ");return`${i.address}::${i.module}::${i.name}${o?`<${o}>`:""}`}throw new Error("Invalid TypeTag")}}});function lA(a){return C.bcs.u64({name:"unsafe_u64",...a}).transform({input:n=>n,output:n=>Number(n)})}function uA(a){return C.bcs.enum("Option",{None:null,Some:a})}function rr(a){return C.bcs.struct(`IntentMessage<${a.name}>`,{intent:or,value:a})}var C,ae,Oe,Me,zo,xo,Oo,Qo,Wa,rt,Ko,Uo,Do,Eo,_o,$o,qo,er,tr,nr,ir,ar,or,sr,dr,cr,Ar,qs,mA,gr,ed,td,lr=Bn(()=>{C=require("@mysten/bcs");Xe();ko();ae=C.bcs.bytes(Fi).transform({validate:a=>{let n=typeof a=="string"?a:(0,C.toHex)(a);if(!n||!xe(j(n)))throw new Error(`Invalid Sui address ${n}`)},input:a=>typeof a=="string"?(0,C.fromHex)(j(a)):a,output:a=>j((0,C.toHex)(a))}),Oe=C.bcs.vector(C.bcs.u8()).transform({name:"ObjectDigest",input:a=>(0,C.fromBase58)(a),output:a=>(0,C.toBase58)(new Uint8Array(a)),validate:a=>{if((0,C.fromBase58)(a).length!==32)throw new Error("ObjectDigest must be 32 bytes")}}),Me=C.bcs.struct("SuiObjectRef",{objectId:ae,version:C.bcs.u64(),digest:Oe}),zo=C.bcs.struct("SharedObjectRef",{objectId:ae,initialSharedVersion:C.bcs.u64(),mutable:C.bcs.bool()}),xo=C.bcs.enum("ObjectArg",{ImmOrOwnedObject:Me,SharedObject:zo,Receiving:Me}),Oo=C.bcs.enum("CallArg",{Pure:C.bcs.struct("Pure",{bytes:C.bcs.vector(C.bcs.u8()).transform({input:a=>typeof a=="string"?(0,C.fromBase64)(a):a,output:a=>(0,C.toBase64)(new Uint8Array(a))})}),Object:xo}),Qo=C.bcs.enum("TypeTag",{bool:null,u8:null,u64:null,u128:null,address:null,signer:null,vector:C.bcs.lazy(()=>Qo),struct:C.bcs.lazy(()=>$o),u16:null,u32:null,u256:null}),Wa=Qo.transform({input:a=>typeof a=="string"?Vt.parseFromStr(a,!0):a,output:a=>Vt.tagToString(a)}),rt=C.bcs.enum("Argument",{GasCoin:null,Input:C.bcs.u16(),Result:C.bcs.u16(),NestedResult:C.bcs.tuple([C.bcs.u16(),C.bcs.u16()])}),Ko=C.bcs.struct("ProgrammableMoveCall",{package:ae,module:C.bcs.string(),function:C.bcs.string(),typeArguments:C.bcs.vector(Wa),arguments:C.bcs.vector(rt)}),Uo=C.bcs.enum("Command",{MoveCall:Ko,TransferObjects:C.bcs.struct("TransferObjects",{objects:C.bcs.vector(rt),address:rt}),SplitCoins:C.bcs.struct("SplitCoins",{coin:rt,amounts:C.bcs.vector(rt)}),MergeCoins:C.bcs.struct("MergeCoins",{destination:rt,sources:C.bcs.vector(rt)}),Publish:C.bcs.struct("Publish",{modules:C.bcs.vector(C.bcs.vector(C.bcs.u8()).transform({input:a=>typeof a=="string"?(0,C.fromBase64)(a):a,output:a=>(0,C.toBase64)(new Uint8Array(a))})),dependencies:C.bcs.vector(ae)}),MakeMoveVec:C.bcs.struct("MakeMoveVec",{type:uA(Wa).transform({input:a=>a===null?{None:!0}:{Some:a},output:a=>a.Some??null}),elements:C.bcs.vector(rt)}),Upgrade:C.bcs.struct("Upgrade",{modules:C.bcs.vector(C.bcs.vector(C.bcs.u8()).transform({input:a=>typeof a=="string"?(0,C.fromBase64)(a):a,output:a=>(0,C.toBase64)(new Uint8Array(a))})),dependencies:C.bcs.vector(ae),package:ae,ticket:rt})}),Do=C.bcs.struct("ProgrammableTransaction",{inputs:C.bcs.vector(Oo),commands:C.bcs.vector(Uo)}),Eo=C.bcs.enum("TransactionKind",{ProgrammableTransaction:Do,ChangeEpoch:null,Genesis:null,ConsensusCommitPrologue:null}),_o=C.bcs.enum("TransactionExpiration",{None:null,Epoch:lA()}),$o=C.bcs.struct("StructTag",{address:ae,module:C.bcs.string(),name:C.bcs.string(),typeParams:C.bcs.vector(Qo)}),qo=C.bcs.struct("GasData",{payment:C.bcs.vector(Me),owner:ae,price:C.bcs.u64(),budget:C.bcs.u64()}),er=C.bcs.struct("TransactionDataV1",{kind:Eo,sender:ae,gasData:qo,expiration:_o}),tr=C.bcs.enum("TransactionData",{V1:er}),nr=C.bcs.enum("IntentScope",{TransactionData:null,TransactionEffects:null,CheckpointSummary:null,PersonalMessage:null}),ir=C.bcs.enum("IntentVersion",{V0:null}),ar=C.bcs.enum("AppId",{Sui:null}),or=C.bcs.struct("Intent",{scope:nr,version:ir,appId:ar});sr=C.bcs.enum("CompressedSignature",{ED25519:C.bcs.fixedArray(64,C.bcs.u8()),Secp256k1:C.bcs.fixedArray(64,C.bcs.u8()),Secp256r1:C.bcs.fixedArray(64,C.bcs.u8()),ZkLogin:C.bcs.vector(C.bcs.u8())}),dr=C.bcs.enum("PublicKey",{ED25519:C.bcs.fixedArray(32,C.bcs.u8()),Secp256k1:C.bcs.fixedArray(33,C.bcs.u8()),Secp256r1:C.bcs.fixedArray(33,C.bcs.u8()),ZkLogin:C.bcs.vector(C.bcs.u8())}),cr=C.bcs.struct("MultiSigPkMap",{pubKey:dr,weight:C.bcs.u8()}),Ar=C.bcs.struct("MultiSigPublicKey",{pk_map:C.bcs.vector(cr),threshold:C.bcs.u16()}),qs=C.bcs.struct("MultiSig",{sigs:C.bcs.vector(sr),bitmap:C.bcs.u16(),multisig_pk:Ar}),mA=C.bcs.vector(C.bcs.u8()).transform({input:a=>typeof a=="string"?(0,C.fromBase64)(a):a,output:a=>(0,C.toBase64)(new Uint8Array(a))}),gr=C.bcs.struct("SenderSignedTransaction",{intentMessage:rr(tr),txSignatures:C.bcs.vector(mA)}),ed=C.bcs.vector(gr,{name:"SenderSignedData"}),td=C.bcs.struct("PasskeyAuthenticator",{authenticatorData:C.bcs.vector(C.bcs.u8()),clientDataJson:C.bcs.string(),userSignature:C.bcs.vector(C.bcs.u8())})});var b,pA,CA,nd,bA,IA,yA,id,ad,Ln,hA,ur,vA,RA,BA,YA,WA,fA,od,rd=Bn(()=>{b=require("@mysten/bcs");lr();pA=b.bcs.enum("PackageUpgradeError",{UnableToFetchPackage:b.bcs.struct("UnableToFetchPackage",{packageId:ae}),NotAPackage:b.bcs.struct("NotAPackage",{objectId:ae}),IncompatibleUpgrade:null,DigestDoesNotMatch:b.bcs.struct("DigestDoesNotMatch",{digest:b.bcs.vector(b.bcs.u8())}),UnknownUpgradePolicy:b.bcs.struct("UnknownUpgradePolicy",{policy:b.bcs.u8()}),PackageIDDoesNotMatch:b.bcs.struct("PackageIDDoesNotMatch",{packageId:ae,ticketId:ae})}),CA=b.bcs.struct("ModuleId",{address:ae,name:b.bcs.string()}),nd=b.bcs.struct("MoveLocation",{module:CA,function:b.bcs.u16(),instruction:b.bcs.u16(),functionName:b.bcs.option(b.bcs.string())}),bA=b.bcs.enum("CommandArgumentError",{TypeMismatch:null,InvalidBCSBytes:null,InvalidUsageOfPureArg:null,InvalidArgumentToPrivateEntryFunction:null,IndexOutOfBounds:b.bcs.struct("IndexOutOfBounds",{idx:b.bcs.u16()}),SecondaryIndexOutOfBounds:b.bcs.struct("SecondaryIndexOutOfBounds",{resultIdx:b.bcs.u16(),secondaryIdx:b.bcs.u16()}),InvalidResultArity:b.bcs.struct("InvalidResultArity",{resultIdx:b.bcs.u16()}),InvalidGasCoinUsage:null,InvalidValueUsage:null,InvalidObjectByValue:null,InvalidObjectByMutRef:null,SharedObjectOperationNotAllowed:null}),IA=b.bcs.enum("TypeArgumentError",{TypeNotFound:null,ConstraintNotSatisfied:null}),yA=b.bcs.enum("ExecutionFailureStatus",{InsufficientGas:null,InvalidGasObject:null,InvariantViolation:null,FeatureNotYetSupported:null,MoveObjectTooBig:b.bcs.struct("MoveObjectTooBig",{objectSize:b.bcs.u64(),maxObjectSize:b.bcs.u64()}),MovePackageTooBig:b.bcs.struct("MovePackageTooBig",{objectSize:b.bcs.u64(),maxObjectSize:b.bcs.u64()}),CircularObjectOwnership:b.bcs.struct("CircularObjectOwnership",{object:ae}),InsufficientCoinBalance:null,CoinBalanceOverflow:null,PublishErrorNonZeroAddress:null,SuiMoveVerificationError:null,MovePrimitiveRuntimeError:b.bcs.option(nd),MoveAbort:b.bcs.tuple([nd,b.bcs.u64()]),VMVerificationOrDeserializationError:null,VMInvariantViolation:null,FunctionNotFound:null,ArityMismatch:null,TypeArityMismatch:null,NonEntryFunctionInvoked:null,CommandArgumentError:b.bcs.struct("CommandArgumentError",{argIdx:b.bcs.u16(),kind:bA}),TypeArgumentError:b.bcs.struct("TypeArgumentError",{argumentIdx:b.bcs.u16(),kind:IA}),UnusedValueWithoutDrop:b.bcs.struct("UnusedValueWithoutDrop",{resultIdx:b.bcs.u16(),secondaryIdx:b.bcs.u16()}),InvalidPublicFunctionReturnType:b.bcs.struct("InvalidPublicFunctionReturnType",{idx:b.bcs.u16()}),InvalidTransferObject:null,EffectsTooLarge:b.bcs.struct("EffectsTooLarge",{currentSize:b.bcs.u64(),maxSize:b.bcs.u64()}),PublishUpgradeMissingDependency:null,PublishUpgradeDependencyDowngrade:null,PackageUpgradeError:b.bcs.struct("PackageUpgradeError",{upgradeError:pA}),WrittenObjectsTooLarge:b.bcs.struct("WrittenObjectsTooLarge",{currentSize:b.bcs.u64(),maxSize:b.bcs.u64()}),CertificateDenied:null,SuiMoveVerificationTimedout:null,SharedObjectOperationNotAllowed:null,InputObjectDeleted:null,ExecutionCancelledDueToSharedObjectCongestion:b.bcs.struct("ExecutionCancelledDueToSharedObjectCongestion",{congestedObjects:b.bcs.vector(ae)}),AddressDeniedForCoin:b.bcs.struct("AddressDeniedForCoin",{address:ae,coinType:b.bcs.string()}),CoinTypeGlobalPause:b.bcs.struct("CoinTypeGlobalPause",{coinType:b.bcs.string()}),ExecutionCancelledDueToRandomnessUnavailable:null}),id=b.bcs.enum("ExecutionStatus",{Success:null,Failed:b.bcs.struct("ExecutionFailed",{error:yA,command:b.bcs.option(b.bcs.u64())})}),ad=b.bcs.struct("GasCostSummary",{computationCost:b.bcs.u64(),storageCost:b.bcs.u64(),storageRebate:b.bcs.u64(),nonRefundableStorageFee:b.bcs.u64()}),Ln=b.bcs.enum("Owner",{AddressOwner:ae,ObjectOwner:ae,Shared:b.bcs.struct("Shared",{initialSharedVersion:b.bcs.u64()}),Immutable:null}),hA=b.bcs.struct("TransactionEffectsV1",{status:id,executedEpoch:b.bcs.u64(),gasUsed:ad,modifiedAtVersions:b.bcs.vector(b.bcs.tuple([ae,b.bcs.u64()])),sharedObjects:b.bcs.vector(Me),transactionDigest:Oe,created:b.bcs.vector(b.bcs.tuple([Me,Ln])),mutated:b.bcs.vector(b.bcs.tuple([Me,Ln])),unwrapped:b.bcs.vector(b.bcs.tuple([Me,Ln])),deleted:b.bcs.vector(Me),unwrappedThenDeleted:b.bcs.vector(Me),wrapped:b.bcs.vector(Me),gasObject:b.bcs.tuple([Me,Ln]),eventsDigest:b.bcs.option(Oe),dependencies:b.bcs.vector(Oe)}),ur=b.bcs.tuple([b.bcs.u64(),Oe]),vA=b.bcs.enum("ObjectIn",{NotExist:null,Exist:b.bcs.tuple([ur,Ln])}),RA=b.bcs.enum("ObjectOut",{NotExist:null,ObjectWrite:b.bcs.tuple([Oe,Ln]),PackageWrite:ur}),BA=b.bcs.enum("IDOperation",{None:null,Created:null,Deleted:null}),YA=b.bcs.struct("EffectsObjectChange",{inputState:vA,outputState:RA,idOperation:BA}),WA=b.bcs.enum("UnchangedSharedKind",{ReadOnlyRoot:ur,MutateDeleted:b.bcs.u64(),ReadDeleted:b.bcs.u64(),Cancelled:b.bcs.u64(),PerEpochConfig:null}),fA=b.bcs.struct("TransactionEffectsV2",{status:id,executedEpoch:b.bcs.u64(),gasUsed:ad,transactionDigest:Oe,gasObjectIndex:b.bcs.option(b.bcs.u32()),eventsDigest:b.bcs.option(Oe),dependencies:b.bcs.vector(Oe),lamportVersion:b.bcs.u64(),changedObjects:b.bcs.vector(b.bcs.tuple([ae,YA])),unchangedSharedObjects:b.bcs.vector(b.bcs.tuple([ae,WA])),auxDataDigest:b.bcs.option(Oe)}),od=b.bcs.enum("TransactionEffects",{V1:hA,V2:fA})});var st,GA,y,Ie=Bn(()=>{st=require("@mysten/bcs");lr();rd();ko();GA=require("@mysten/bcs"),y={...st.bcs,U8:st.bcs.u8(),U16:st.bcs.u16(),U32:st.bcs.u32(),U64:st.bcs.u64(),U128:st.bcs.u128(),U256:st.bcs.u256(),ULEB128:st.bcs.uleb128(),Bool:st.bcs.bool(),String:st.bcs.string(),Address:ae,AppId:ar,Argument:rt,CallArg:Oo,CompressedSignature:sr,GasData:qo,Intent:or,IntentMessage:rr,IntentScope:nr,IntentVersion:ir,MultiSig:qs,MultiSigPkMap:cr,MultiSigPublicKey:Ar,ObjectArg:xo,ObjectDigest:Oe,ProgrammableMoveCall:Ko,ProgrammableTransaction:Do,PublicKey:dr,SenderSignedData:ed,SenderSignedTransaction:gr,SharedObjectRef:zo,StructTag:$o,SuiObjectRef:Me,Command:Uo,TransactionData:tr,TransactionDataV1:er,TransactionExpiration:_o,TransactionKind:Eo,TypeTag:Wa,TransactionEffects:od,PasskeyAuthenticator:td}});function wg(a,n=["<",">"]){let[i,o]=n,r=[],s="",d=0;for(let c=0;c<a.length;c++){let A=a[c];if(A===i&&d++,A===o&&d--,d===0&&A===","){r.push(s.trim()),s="";continue}s+=A}return r.push(s.trim()),r}function We(a){if(typeof a!="string")throw new Error(`Illegal type passed as a name of the type: ${a}`);let[n,i]=["<",">"],o=a.indexOf(n),r=Array.from(a).reverse().indexOf(i);if(o===-1&&r===-1)return{typeName:a,typeArgs:[]};if(o===-1||r===-1)throw new Error(`Unclosed generic in name '${a}'`);let s=a.slice(0,o),d=wg(a.slice(o+1,a.length-r-1),[n,i]);return{typeName:s,typeArgs:d}}function wd(a){return!a||typeof a!="object"||Array.isArray(a)?!1:"GasCoin"in a||"Input"in a||"Result"in a||"NestedResult"in a}function X(a,n){return wd(n)?n:a.object(n)}function $e(a,n,i){if(wd(n))return X(a,n);function o(g){let{typeName:l,typeArgs:m}=We(g);switch(l){case"bool":return y.Bool;case"u8":return y.U8;case"u16":return y.U16;case"u32":return y.U32;case"u64":return y.U64;case"u128":return y.U128;case"u256":return y.U256;case"address":return y.Address;case"0x1::string::String":case"0x1::ascii::String":return y.String;case"0x2::object::ID":return y.Address;case"0x1::option::Option":return y.option(o(m[0]));case"vector":return y.vector(o(m[0]));default:throw new Error(`invalid primitive type ${g}`)}}function r(g){for(let l of g){if(typeof l>"u"||l===null)return!0;if(Array.isArray(l))return r(l)}return!1}function s(g){for(let l of g){if(!Array.isArray(l)){if(l===null)continue;switch(typeof l){case"string":case"number":case"bigint":case"boolean":continue;default:return!1}}return s(l)}return!0}function d(g){for(let l of g){if(!Array.isArray(l))switch(typeof l){case"string":case"number":case"bigint":case"boolean":return!0;default:continue}return d(l)}return!1}let{typeName:c,typeArgs:A}=We(i);switch(c){case"0x1::option::Option":if(n===null)return a.pure.option("bool",null);if(s([n]))return a.pure(o(i).serialize(n));if(d([n]))throw new Error("mixing primitive and TransactionArgument values is not supported");return a.moveCall({target:"0x1::option::some",typeArguments:[A[0]],arguments:[$e(a,n,A[0])]});case"vector":if(!Array.isArray(n))throw new Error("expected an array for vector type");if(n.length===0)return a.pure(y.vector(y.Bool).serialize([]));if(r(n))throw new Error("the provided array contains undefined or null values");if(s(n))return a.pure(o(i).serialize(n));if(d(n))throw new Error("mixing primitive and TransactionArgument values is not supported");return a.makeMoveVec({type:A[0],elements:n});default:return a.pure(o(i).serialize(n))}}function Sg(a){let n=a.split("0x").join("");for(let i=0;i<n.length;i++)if(n[i]!=="0")return`0x${n.substring(i)}`;return"0x0"}function w(a){let{typeName:n,typeArgs:i}=We(a);switch(n){case"bool":case"u8":case"u16":case"u32":case"u64":case"u128":case"u256":case"address":case"signer":return n;case"vector":return`vector<${w(i[0])}>`;default:{let o=n.split("::");o[0]=Sg(o[0]);let r=o.join("::");return i.length>0?`${r}<${i.map(s=>w(s)).join(",")}>`:r}}}function D(a,...n){return n.length>0?`${a}<${n.join(", ")}>`:a}var ye=Bn(()=>{"use strict";Ie()});var en=ho((db,Sd)=>{"use strict";ye();var Tr=class a{static $PACKAGE_ID="";static $PUBLISHED_AT="";static $PKG_V=[];get PACKAGE_ID(){return w(a.$PACKAGE_ID)}get PUBLISHED_AT(){return w(a.$PUBLISHED_AT)}get PKG_V1(){return w(a.$PKG_V[1])}setPackageId(n){a.$PACKAGE_ID=n}setPublishedAt(n){a.$PUBLISHED_AT=n}setPkgV(n,i){a.$PKG_V[n]=i}setAddress(n,i){a.$PACKAGE_ID=n,a.$PUBLISHED_AT=n,a.$PKG_V[1]=i||n}},Vg=new Tr;Sd.exports=Vg});var Vr=ho((lb,Hd)=>{"use strict";ye();var Sr=class a{static $PACKAGE_ID="";static $PUBLISHED_AT="";static $PKG_V=[];get PACKAGE_ID(){return w(a.$PACKAGE_ID)}get PUBLISHED_AT(){return w(a.$PUBLISHED_AT)}get PKG_V1(){return w(a.$PKG_V[1])}setPackageId(n){a.$PACKAGE_ID=n}setPublishedAt(n){a.$PUBLISHED_AT=n}setPkgV(n,i){a.$PKG_V[n]=i}setAddress(n,i){a.$PACKAGE_ID=n,a.$PUBLISHED_AT=n,a.$PKG_V[1]=i||n}},Xg=new Sr;Hd.exports=Xg});var jr=ho((Cb,kd)=>{"use strict";ye();var Mr=class a{static $PACKAGE_ID="";static $PUBLISHED_AT="";static $PKG_V=[];get PACKAGE_ID(){return w(a.$PACKAGE_ID)}get PUBLISHED_AT(){return w(a.$PUBLISHED_AT)}get PKG_V1(){return w(a.$PKG_V[1])}setPackageId(n){a.$PACKAGE_ID=n}setPublishedAt(n){a.$PUBLISHED_AT=n}setPkgV(n,i){a.$PKG_V[n]=i}setAddress(n,i){a.$PACKAGE_ID=n,a.$PUBLISHED_AT=n,a.$PKG_V[1]=i||n}},Mg=new Mr;kd.exports=Mg});var ml={};Xc(ml,{AddressStatus:()=>ta,AllbridgeCoreSdk:()=>ts,AmountFormat:()=>Ci,AmountNotEnoughError:()=>nn,ArgumentInvalidDecimalsError:()=>di,CCTPDoesNotSupportedError:()=>he,ChainSymbol:()=>we,ChainType:()=>$,ErrorCode:()=>is,ExtraGasMaxLimitExceededError:()=>si,FeePaymentMethod:()=>wt,InsufficientPoolLiquidityError:()=>vt,InvalidAmountError:()=>ht,InvalidGasFeePaymentOptionError:()=>Yn,InvalidMessengerOptionError:()=>ri,InvalidTxError:()=>an,JupiterError:()=>Ce,Messenger:()=>He,MethodNotSupportedError:()=>_,NodeRpcUrlNotInitializedError:()=>ci,OFTDoesNotSupportedError:()=>ve,SdkError:()=>B,SdkRootError:()=>re,SolanaAutoTxFee:()=>la,TimeoutError:()=>fn,TxTooLargeError:()=>gi,VerifyTxError:()=>Wn,YieldDoesNotSupportedError:()=>Ai,assertYieldIsSupported:()=>gc,isYieldSupported:()=>Ki,mainnet:()=>oi,nodeRpcUrlsDefault:()=>Pc,nodeUrlsDefault:()=>jc});module.exports=Mc(ml);var oi={coreApiUrl:"https://core.api.allbridgecoreapi.net",coreApiQueryParams:{},coreApiHeaders:{},jupiterUrl:"https://lite-api.jup.ag/swap/v1",wormholeMessengerProgramId:"worm2ZoG2kUd4vFXhvjh93UUH596ayRfgQ2MgjNMTth",solanaLookUpTable:"2JcBAEVnAwVo4u8d61iqgHPrzZuugur7cVTjWubsVLHj",sorobanNetworkPassphrase:"Public Global Stellar Network ; September 2015",tronJsonRpc:"https://api.trongrid.io/jsonrpc",cctpParams:{cctpTransmitterProgramId:"CCTPmbSD7gX1bxKPAmg77w8oFzNFpaQiQUWD43TKaecd",cctpTokenMessengerMinter:"CCTPiPYPc6AsJuwueEnWgSgucamXDZwBd53dQ11YiKX3",cctpDomains:{ETH:0,AVA:1,OPT:2,ARB:3,SOL:5,BAS:6,POL:7,SUI:8}},cachePoolInfoChainSec:20},jc={solanaRpcUrl:"https://api.mainnet-beta.solana.com",tronRpcUrl:"https://api.trongrid.io"},Pc={SOL:"https://api.mainnet-beta.solana.com",TRX:"https://api.trongrid.io",SRB:"https://rpc.stellar.org:443",STLR:"https://horizon.stellar.org",SUI:"https://fullnode.mainnet.sui.io"};var Hr=require("@algorandfoundation/algokit-utils"),Ed=require("tronweb"),_d=require("web3");var re=class extends Error{errorCode;constructor(n,i){super(i),this.errorCode=n}},B=class extends re{constructor(n){super("SdkError",n)}},ht=class extends re{constructor(n){super("InvalidAmountError",n)}},nn=class extends re{constructor(n){super("AmountNotEnoughError",n)}},vt=class extends re{constructor(n){super("InsufficientPoolLiquidityError",n)}},Ce=class extends re{constructor(n){super("JupiterError",n)}},Yn=class extends re{constructor(n){super("InvalidGasFeePaymentOptionError",n)}},ri=class extends re{constructor(n){super("InvalidMessengerOptionError",n)}},_=class extends re{constructor(n){super("MethodNotSupportedError",n)}},Wn=class extends re{constructor(n){super("VerifyTxError",n)}},an=class extends re{constructor(n){super("InvalidTxError",n)}},si=class extends re{constructor(n){super("ExtraGasMaxLimitExceededError",n)}},di=class extends re{constructor(n,i,o){super("ArgumentInvalidDecimalsError",`Argument '${n}' decimals '${i}' cannot be greater than '${o}'`)}},fn=class extends re{constructor(n){super("TimeoutError",n)}},ci=class extends re{constructor(n){super("NodeRpcUrlNotInitializedError",`For chain '${n}' Node RPC URL not initialized`)}},he=class extends re{constructor(n){super("CCTPDoesNotSupportedError",n)}},ve=class extends re{constructor(n){super("OFTDoesNotSupportedError",n)}},Ai=class extends re{constructor(n){super("YieldDoesNotSupportedError",n)}},gi=class extends re{constructor(){super("TxTooLargeError","Transaction too large: try again later or switch to another messenger or pay relayer fee in native gas currency")}},is=(G=>(G.SDK_ERROR="SdkError",G.INVALID_AMOUNT_ERROR="InvalidAmountError",G.AMOUNT_NOT_ENOUGH_ERROR="AmountNotEnoughError",G.INSUFFICIENT_POOL_LIQUIDITY_ERROR="InsufficientPoolLiquidityError",G.JUPITER_ERROR="JupiterError",G.INVALID_GAS_FEE_PAYMENT_OPTION_ERROR="InvalidGasFeePaymentOptionError",G.INVALID_MESSENGER_OPTION_ERROR="InvalidMessengerOptionError",G.METHOD_NOT_SUPPORTED_ERROR="MethodNotSupportedError",G.VERIFY_TX_ERROR="VerifyTxError",G.INVALID_TX_ERROR="InvalidTxError",G.EXTRA_GAS_MAX_LIMIT_EXCEEDED_ERROR="ExtraGasMaxLimitExceededError",G.ARGUMENT_INVALID_DECIMALS_ERROR="ArgumentInvalidDecimalsError",G.TIMEOUT_ERROR="TimeoutError",G.NODE_RPC_URL_NOT_INITIALIZED_ERROR="NodeRpcUrlNotInitializedError",G.CCTP_DOES_NOT_SUPPORTED_ERROR="CCTPDoesNotSupportedError",G.OFT_DOES_NOT_SUPPORTED_ERROR="OFTDoesNotSupportedError",G.YIELD_DOES_NOT_SUPPORTED_ERROR="YieldDoesNotSupportedError",G.TX_TOO_LARGE="TxTooLargeError",G))(is||{});var we=(f=>(f.BSC="BSC",f.ETH="ETH",f.BAS="BAS",f.SOL="SOL",f.TRX="TRX",f.POL="POL",f.ARB="ARB",f.CEL="CEL",f.AVA="AVA",f.SRB="SRB",f.STLR="STLR",f.OPT="OPT",f.SUI="SUI",f.SNC="SNC",f.UNI="UNI",f.ALG="ALG",f))(we||{}),$=(d=>(d.EVM="EVM",d.SOLANA="SOLANA",d.TRX="TRX",d.SRB="SRB",d.SUI="SUI",d.ALG="ALG",d))($||{});var Lc={EVM:18,SOLANA:9,TRX:6,SRB:7,SUI:9,ALG:6},Hc={BSC:{chainSymbol:"BSC",chainId:"0x38",name:"BNB Chain",chainType:"EVM"},ETH:{chainSymbol:"ETH",chainId:"0x1",name:"Ethereum",chainType:"EVM"},BAS:{chainSymbol:"BAS",chainId:"0x2105",name:"Base",chainType:"EVM"},ARB:{chainSymbol:"ARB",chainId:"0xa4b1",name:"Arbitrum",chainType:"EVM"},AVA:{chainSymbol:"AVA",chainId:"0xa86a",name:"Avalanche",chainType:"EVM"},CEL:{chainSymbol:"CEL",chainId:"0xa4ec",name:"Celo",chainType:"EVM"},POL:{chainSymbol:"POL",chainId:"0x89",name:"Polygon",chainType:"EVM"},OPT:{chainSymbol:"OPT",chainId:"0xa",name:"OP Mainnet",chainType:"EVM"},SNC:{chainSymbol:"SNC",chainId:"0x92",name:"Sonic",chainType:"EVM"},UNI:{chainSymbol:"UNI",chainId:"0x82",name:"Unichain",chainType:"EVM"},SOL:{chainSymbol:"SOL",name:"Solana",chainType:"SOLANA"},TRX:{chainSymbol:"TRX",name:"Tron",chainType:"TRX"},SRB:{chainSymbol:"SRB",name:"Stellar",chainType:"SRB"},STLR:{chainSymbol:"STLR",name:"Stellar",chainType:"SRB"},SUI:{chainSymbol:"SUI",name:"Sui",chainType:"SUI"},ALG:{chainSymbol:"ALG",name:"Algorand",chainType:"ALG"}},L=(()=>{let a={...Hc};return{addChainsProperties(n){a={...a,...n}},getChainProperty(n){let i=a[n];if(!i)throw new B(`Cannot find chain properties for ${n}`);return i},getChainsProperties(){return a},getChainDecimalsByType(n){return Lc[n]}}})();var ta=(d=>(d.OK="OK",d.INVALID="INVALID",d.FORBIDDEN="FORBIDDEN",d.UNINITIALIZED="UNINITIALIZED",d.CONTRACT_ADDRESS="CONTRACT_ADDRESS",d.WRONG_ASSOCIATED_ACCOUNT_OWNER="WRONG_ASSOCIATED_ACCOUNT_OWNER",d))(ta||{});var He=(s=>(s[s.ALLBRIDGE=1]="ALLBRIDGE",s[s.WORMHOLE=2]="WORMHOLE",s[s.CCTP=3]="CCTP",s[s.CCTP_V2=4]="CCTP_V2",s[s.OFT=5]="OFT",s))(He||{});var vo=require("big.js");async function me(a,n){return await a.getPoolInfoByKey({chainSymbol:n.chainSymbol,poolAddress:n.poolAddress})}function H(a){if((0,vo.Big)(a).lte(0))throw new ht("Amount must be greater than zero")}function z(a,n,i){let o=(0,vo.Big)(n).toFixed(),[r,s]=o.split(".");if(s&&s.length>i)throw new di(a,s.length,i)}async function na(a,n,i){return await Promise.race([a,new Promise((o,r)=>{setTimeout(()=>r(new fn(n)),i)})])}async function Ro(a,n,i,o){if(i<1)throw new Error(`Bad argument: 'maxRetries' must be greater than 0, but ${i} was received.`);let r=0;for(;;)try{return await na(a(),n,o)}catch{if(++r>=i)throw new fn(n)}}async function as(a,n,i,o=1.5,r=!1){let s=[],d=0,c=await a();if(s.push(c),!n(c))return s;let A=new Date(Date.now()+i*1e3).valueOf(),g=1e3,l=g;for(;Date.now()<A;){let m=s[s.length-1];if(m===void 0||!n(m))break;d++,r&&console.info(`Waiting ${g}ms before trying again (bringing the total wait time to ${l}ms so far, of total ${i*1e3}ms)`),await new Promise(h=>setTimeout(h,g)),g=g*o,new Date(Date.now()+g).valueOf()>A&&(g=A-Date.now(),r&&console.info(`was gonna wait too long; new waitTime: ${g}ms`)),l=g+l;let I=await a(m);s.push(I),r&&n(I)&&console.info(`${d}. Called ${a.name}; ${s.length} prev attempts. Most recent: ${JSON.stringify(s[s.length-1],null,2)}`)}return s}var ys=require("@algorandfoundation/algokit-utils/types/amount"),Nn=ge(require("algosdk"));var os=require("@algorandfoundation/algokit-utils/types/app-arc56"),li=require("@algorandfoundation/algokit-utils/types/app-client"),Jc=require("@algorandfoundation/algokit-utils/types/app-factory"),ia={name:"Bridge",structs:{},methods:[{name:"createApplication",args:[{type:"address",name:"owner"},{type:"byte",name:"chainId"},{type:"application",name:"messenger"},{type:"application",name:"gasOracle"}],returns:{type:"void"},actions:{create:["NoOp"],call:[]},readonly:!1,events:[],recommendations:{}},{name:"optInAsset",args:[{type:"uint64",name:"assetId"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"noop",args:[],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"swapAndBridge",args:[{type:"uint64",name:"tokenId"},{type:"byte[32]",name:"recipient"},{type:"byte",name:"destinationChainId"},{type:"byte[32]",name:"receiveToken"},{type:"byte[32]",name:"nonce"},{type:"uint64",name:"feeTokenAmount",defaultValue:{source:"literal",data:"AAAAAAAAAAA=",type:"uint64"}}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[{name:"BridgingFeeFromTokens",args:[{type:"uint64",name:"fee"}]},{name:"ReceiveFee",args:[{type:"uint64",name:"bridgeTransactionCost"},{type:"uint64",name:"messageTransactionCost"}]},{name:"TokensSent",args:[{type:"uint64",name:"amount"},{type:"byte[32]",name:"recipient"},{type:"byte",name:"destinationChainId"},{type:"byte[32]",name:"receiveToken"},{type:"byte[32]",name:"nonce"},{type:"byte",name:"messenger"}]}],recommendations:{}},{name:"receiveTokens",args:[{type:"uint64",name:"amount"},{type:"byte[32]",name:"recipient"},{type:"byte",name:"sourceChainId"},{type:"byte[32]",name:"receiveToken"},{type:"byte[32]",name:"nonce"},{type:"uint64",name:"receiveAmountMin"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[{name:"TokensReceived",args:[{type:"uint64",name:"receiveAmount"},{type:"address",name:"recipient"},{type:"byte[32]",name:"nonce"},{type:"byte",name:"messenger"},{type:"byte[32]",name:"message"}]}],recommendations:{}},{name:"registerBridge",args:[{type:"byte",name:"chainId"},{type:"byte[32]",name:"bridgeAddress"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"addBridgeToken",args:[{type:"byte",name:"chainId"},{type:"byte[32]",name:"tokenAddress"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"removeBridgeToken",args:[{type:"byte",name:"chainId"},{type:"byte[32]",name:"tokenAddress"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"withdrawGasTokens",args:[{type:"uint64",name:"amount"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"withdrawBridgingFeeInTokens",args:[{type:"uint64",name:"assetId"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"getBridgingCostInTokens",args:[{type:"byte",name:"destinationChainId"},{type:"uint64",name:"tokenId"}],returns:{type:"uint64"},actions:{create:[],call:["NoOp"]},readonly:!0,events:[],recommendations:{}},{name:"hashMessage",args:[{type:"uint64",name:"amount"},{type:"byte[32]",name:"recipient"},{type:"byte",name:"sourceChainId"},{type:"byte",name:"destinationChainId"},{type:"byte[32]",name:"receiveToken"},{type:"byte[32]",name:"nonce"}],returns:{type:"byte[32]"},actions:{create:[],call:["NoOp"]},readonly:!0,events:[],recommendations:{}},{name:"isOtherBridgeTokenSupported",args:[{type:"byte",name:"chainId"},{type:"byte[32]",name:"token"}],returns:{type:"bool"},actions:{create:[],call:["NoOp"]},readonly:!0,events:[],recommendations:{}},{name:"getTransactionCost",args:[{type:"byte",name:"chainId"}],returns:{type:"uint64"},actions:{create:[],call:["NoOp"]},readonly:!0,events:[],recommendations:{}},{name:"getReceiveTokensCost",args:[],returns:{type:"uint64"},actions:{create:[],call:["NoOp"]},readonly:!0,events:[],recommendations:{}},{name:"getSendTransactionStorageCost",args:[],returns:{type:"uint64"},actions:{create:[],call:["NoOp"]},readonly:!0,events:[],recommendations:{}},{name:"swap",args:[{type:"uint64",name:"tokenId",desc:"The token to be swapped."},{type:"uint64",name:"receiveTokenId",desc:"The token to receive in exchange for the swapped token."},{type:"address",name:"recipient",desc:"The address to receive the tokens."},{type:"uint64",name:"receiveAmountMin",desc:"The minimum amount of tokens required to receive during the swap."}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[{name:"Swapped",args:[{type:"address",name:"sender"},{type:"address",name:"recipient"},{type:"uint64",name:"tokenId"},{type:"uint64",name:"receiveTokenId"},{type:"uint64",name:"amount"},{type:"uint64",name:"receivedAmount"}]}],recommendations:{}},{name:"addPool",args:[{type:"uint64",name:"poolId",desc:"The address of the `Pool` contract."},{type:"uint64",name:"tokenId",desc:"The address of the token in the liquidity pool."}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"removePool",args:[{type:"uint64",name:"tokenId"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"stopSwap",args:[],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"startSwap",args:[],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"setStopAuthority",args:[{type:"address",name:"stopAuthority"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"setRebalancer",args:[{type:"address",name:"rebalancer"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"getGasUsage",args:[{type:"byte",name:"chainId"}],returns:{type:"uint64"},actions:{create:[],call:["NoOp"]},readonly:!0,events:[],recommendations:{}},{name:"setGasUsage",args:[{type:"byte",name:"chainId"},{type:"uint64",name:"gasAmount"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"setGasOracle",args:[{type:"application",name:"gasOracle"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"getTransactionRelayerCost",args:[{type:"byte",name:"chainId"}],returns:{type:"uint64"},actions:{create:[],call:["NoOp"]},readonly:!0,events:[],recommendations:{}},{name:"transferOwnership",args:[{type:"address",name:"newOwner"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}}],arcs:[22,28],networks:{},state:{schema:{global:{ints:3,bytes:4},local:{ints:0,bytes:0}},keys:{global:{chainId:{keyType:"AVMString",valueType:"byte",key:"Y2hhaW5JZA=="},messenger:{keyType:"AVMString",valueType:"AVMUint64",key:"bWVzc2VuZ2Vy"},stopAuthority:{keyType:"AVMString",valueType:"address",key:"c3RvcEF1dGhvcml0eQ=="},rebalancer:{keyType:"AVMString",valueType:"address",key:"cmViYWxhbmNlcg=="},canSwap:{keyType:"AVMString",valueType:"AVMUint64",key:"Y2FuU3dhcA=="},gasOracle:{keyType:"AVMString",valueType:"AVMUint64",key:"Z2FzT3JhY2xl"},owner:{keyType:"AVMString",valueType:"address",key:"b3duZXI="}},local:{},box:{}},maps:{global:{},local:{},box:{processedMessages:{keyType:"byte[32]",valueType:"byte[0]",prefix:"bQ=="},sentMessages:{keyType:"byte[32]",valueType:"byte[0]",prefix:"cw=="},otherBridges:{keyType:"byte",valueType:"byte[32]",prefix:"Yg=="},otherBridgeTokens:{keyType:"AVMBytes",valueType:"byte[0]",prefix:"dA=="},pools:{keyType:"uint64",valueType:"uint64",prefix:"cA=="},fromGasOracleScalingFactor:{keyType:"uint64",valueType:"uint64",prefix:"ZQ=="},bridgingFeeConversionScalingFactor:{keyType:"uint64",valueType:"uint64",prefix:"Zg=="},gasUsage:{keyType:"byte",valueType:"uint64",prefix:"Zw=="}}}},bareActions:{create:[],call:[]},sourceInfo:{approval:{sourceInfo:[{pc:[906],errorMessage:"Asset must go to app"},{pc:[889],errorMessage:"Asset txn missing"},{pc:[1366,1844,2135,2221,2315,2357],errorMessage:"Box must have value"},{pc:[1122],errorMessage:"Bridge: amount too low for fee"},{pc:[1130],errorMessage:"Bridge: bridge to the zero address"},{pc:[1504],errorMessage:"Bridge: message processed"},{pc:[1547],errorMessage:"Bridge: no message"},{pc:[1327,1455],errorMessage:"Bridge: not enough fee"},{pc:[1446],errorMessage:"Bridge: source not registered"},{pc:[1217],errorMessage:"Bridge: tokens already sent"},{pc:[1180],errorMessage:"Bridge: unknown chain or token"},{pc:[1167],errorMessage:"Bridge: wrong destination chain"},{pc:[1258,1412,1544,1783,1830,2199,2300,2401],errorMessage:"Bytes has valid prefix"},{pc:[927],errorMessage:"CloseTo not allowed"},{pc:[1223],errorMessage:"Index access is out of bounds"},{pc:[341,356,376,394,413,433,448,463,475,487,503,523,550,562,574,594,622,657,681,697,713,731,749,767,799,831,840,856],errorMessage:"OnCompletion is not NoOp"},{pc:[2411],errorMessage:"Only owner"},{pc:[920],errorMessage:"Rekey not allowed"},{pc:[2080],errorMessage:"Router: is not stopAuthority"},{pc:[2216],errorMessage:"Router: no pool"},{pc:[2130],errorMessage:"Router: no receive pool"},{pc:[1112,1436,1933],errorMessage:"Router: swap prohibited"},{pc:[913],errorMessage:"Wrong asset"},{pc:[1710],errorMessage:"account opted into asset"},{pc:[1266,2226],errorMessage:"application exists"},{pc:[2021],errorMessage:"asset exists"},{pc:[860],errorMessage:"can only call when creating"},{pc:[344,359,379,397,416,436,451,466,478,490,506,526,553,565,577,597,625,660,684,700,716,734,752,770,802,834,843],errorMessage:"can only call when not creating"},{pc:[1111,1163,1185,1230,1263,1270,1375,1380,1435,1460,1512,1678,1718,1753,1790,1932,2078,2147,2252,2363,2409],errorMessage:"check GlobalState exists"},{pc:[1896],errorMessage:"invalid size"},{pc:[899],errorMessage:"transaction type is axfer"},{pc:[975],errorMessage:"transaction type is pay"}],pcOffsetMethod:"none"},clear:{sourceInfo:[],pcOffsetMethod:"none"}},source:{approval:"I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxIDYgNCAxNTcwMAogICAgYnl0ZWNibG9jayAweDE1MWY3Yzc1ICJjYW5Td2FwIiAibWVzc2VuZ2VyIiAib3duZXIiICJnYXNPcmFjbGUiICJjaGFpbklkIiAicmViYWxhbmNlciIgInQiICJwIiAweDAwICJzdG9wQXV0aG9yaXR5IiAweDAxICJnIiAweDQzNDE3YWEzIDB4Zjc0NzViODIgMHgxNTFmN2M3NTAwMDAwMDAwMDAwMDNkNTQKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6NDkKICAgIC8vIHByaXZhdGUgcmViYWxhbmNlciA9IEdsb2JhbFN0YXRlPEFkZHJlc3M+KHsgaW5pdGlhbFZhbHVlOiBuZXcgQWRkcmVzcyhiemVybygwKSkgfSk7Ly8gY2FuIHJlc3RyaWN0IGRlcG9zaXQgb3Igd2l0aGRyYXcgb3BlcmF0aW9ucwogICAgaW50Y18wIC8vIDAKICAgIGJ6ZXJvCiAgICBieXRlYyA2IC8vICJyZWJhbGFuY2VyIgogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6NTAKICAgIC8vIGNhblN3YXAgPSBHbG9iYWxTdGF0ZTxib29sZWFuPih7IGluaXRpYWxWYWx1ZTogdHJ1ZSB9KTsKICAgIGJ5dGVjXzEgLy8gImNhblN3YXAiCiAgICBpbnRjXzEgLy8gMQogICAgYXBwX2dsb2JhbF9wdXQKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo1NAogICAgLy8gZXhwb3J0IGNsYXNzIEJyaWRnZSBleHRlbmRzIFJvdXRlciBpbXBsZW1lbnRzIENvbnZlbnRpb25hbFJvdXRpbmcsIElCcmlkZ2UgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fYWZ0ZXJfaWZfZWxzZUAzNgogICAgcHVzaGJ5dGVzcyAweGZmZjgyODQxIDB4NjVmNzA1NzMgMHhlODNhODdhYiAweDJjOWY2ODQ3IDB4MzE5MTliMjggMHg0ZWJhMDcyMSAweGM2MTdlZDczIDB4NTc1MzE1NjAgMHg2MzgwODI3OCAweDA2NTA3YzZhIDB4ZjVmOTZlYjMgMHg0YjA2MmNhMCAweGMzY2RkOTJhIC8vIG1ldGhvZCAiY3JlYXRlQXBwbGljYXRpb24oYWRkcmVzcyxieXRlLGFwcGxpY2F0aW9uLGFwcGxpY2F0aW9uKXZvaWQiLCBtZXRob2QgIm9wdEluQXNzZXQodWludDY0KXZvaWQiLCBtZXRob2QgIm5vb3AoKXZvaWQiLCBtZXRob2QgInN3YXBBbmRCcmlkZ2UodWludDY0LGJ5dGVbMzJdLGJ5dGUsYnl0ZVszMl0sYnl0ZVszMl0sdWludDY0KXZvaWQiLCBtZXRob2QgInJlY2VpdmVUb2tlbnModWludDY0LGJ5dGVbMzJdLGJ5dGUsYnl0ZVszMl0sYnl0ZVszMl0sdWludDY0KXZvaWQiLCBtZXRob2QgInJlZ2lzdGVyQnJpZGdlKGJ5dGUsYnl0ZVszMl0pdm9pZCIsIG1ldGhvZCAiYWRkQnJpZGdlVG9rZW4oYnl0ZSxieXRlWzMyXSl2b2lkIiwgbWV0aG9kICJyZW1vdmVCcmlkZ2VUb2tlbihieXRlLGJ5dGVbMzJdKXZvaWQiLCBtZXRob2QgIndpdGhkcmF3R2FzVG9rZW5zKHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJ3aXRoZHJhd0JyaWRnaW5nRmVlSW5Ub2tlbnModWludDY0KXZvaWQiLCBtZXRob2QgImdldEJyaWRnaW5nQ29zdEluVG9rZW5zKGJ5dGUsdWludDY0KXVpbnQ2NCIsIG1ldGhvZCAiaGFzaE1lc3NhZ2UodWludDY0LGJ5dGVbMzJdLGJ5dGUsYnl0ZSxieXRlWzMyXSxieXRlWzMyXSlieXRlWzMyXSIsIG1ldGhvZCAiaXNPdGhlckJyaWRnZVRva2VuU3VwcG9ydGVkKGJ5dGUsYnl0ZVszMl0pYm9vbCIKICAgIGJ5dGVjIDEzIC8vIG1ldGhvZCAiZ2V0VHJhbnNhY3Rpb25Db3N0KGJ5dGUpdWludDY0IgogICAgcHVzaGJ5dGVzcyAweDA3ZGY4NDI5IDB4ODBjNWM3MGYgMHhmYWIxMTFhMiAweGVmMTVmODU1IDB4NmIxZWUyMjMgMHgxODcwYTQ5MiAweDM1NTczMjRkIDB4MDRiMTYxZjEgMHhkMmIzNTdlYiAvLyBtZXRob2QgImdldFJlY2VpdmVUb2tlbnNDb3N0KCl1aW50NjQiLCBtZXRob2QgImdldFNlbmRUcmFuc2FjdGlvblN0b3JhZ2VDb3N0KCl1aW50NjQiLCBtZXRob2QgInN3YXAodWludDY0LHVpbnQ2NCxhZGRyZXNzLHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJhZGRQb29sKHVpbnQ2NCx1aW50NjQpdm9pZCIsIG1ldGhvZCAicmVtb3ZlUG9vbCh1aW50NjQpdm9pZCIsIG1ldGhvZCAic3RvcFN3YXAoKXZvaWQiLCBtZXRob2QgInN0YXJ0U3dhcCgpdm9pZCIsIG1ldGhvZCAic2V0U3RvcEF1dGhvcml0eShhZGRyZXNzKXZvaWQiLCBtZXRob2QgInNldFJlYmFsYW5jZXIoYWRkcmVzcyl2b2lkIgogICAgYnl0ZWMgMTQgLy8gbWV0aG9kICJnZXRHYXNVc2FnZShieXRlKXVpbnQ2NCIKICAgIHB1c2hieXRlc3MgMHgwY2E1YWU3YSAweDM5N2I5MThiIDB4Y2JmYzZkMDIgMHhlMTdiYWZiNCAvLyBtZXRob2QgInNldEdhc1VzYWdlKGJ5dGUsdWludDY0KXZvaWQiLCBtZXRob2QgInNldEdhc09yYWNsZShhcHBsaWNhdGlvbil2b2lkIiwgbWV0aG9kICJnZXRUcmFuc2FjdGlvblJlbGF5ZXJDb3N0KGJ5dGUpdWludDY0IiwgbWV0aG9kICJ0cmFuc2Zlck93bmVyc2hpcChhZGRyZXNzKXZvaWQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBtYWluX2NyZWF0ZUFwcGxpY2F0aW9uX3JvdXRlQDUgbWFpbl9vcHRJbkFzc2V0X3JvdXRlQDYgbWFpbl9ub29wX3JvdXRlQDcgbWFpbl9zd2FwQW5kQnJpZGdlX3JvdXRlQDggbWFpbl9yZWNlaXZlVG9rZW5zX3JvdXRlQDkgbWFpbl9yZWdpc3RlckJyaWRnZV9yb3V0ZUAxMCBtYWluX2FkZEJyaWRnZVRva2VuX3JvdXRlQDExIG1haW5fcmVtb3ZlQnJpZGdlVG9rZW5fcm91dGVAMTIgbWFpbl93aXRoZHJhd0dhc1Rva2Vuc19yb3V0ZUAxMyBtYWluX3dpdGhkcmF3QnJpZGdpbmdGZWVJblRva2Vuc19yb3V0ZUAxNCBtYWluX2dldEJyaWRnaW5nQ29zdEluVG9rZW5zX3JvdXRlQDE1IG1haW5faGFzaE1lc3NhZ2Vfcm91dGVAMTYgbWFpbl9pc090aGVyQnJpZGdlVG9rZW5TdXBwb3J0ZWRfcm91dGVAMTcgbWFpbl9nZXRUcmFuc2FjdGlvbkNvc3Rfcm91dGVAMTggbWFpbl9nZXRSZWNlaXZlVG9rZW5zQ29zdF9yb3V0ZUAxOSBtYWluX2dldFNlbmRUcmFuc2FjdGlvblN0b3JhZ2VDb3N0X3JvdXRlQDIwIG1haW5fc3dhcF9yb3V0ZUAyMSBtYWluX2FkZFBvb2xfcm91dGVAMjIgbWFpbl9yZW1vdmVQb29sX3JvdXRlQDIzIG1haW5fc3RvcFN3YXBfcm91dGVAMjQgbWFpbl9zdGFydFN3YXBfcm91dGVAMjUgbWFpbl9zZXRTdG9wQXV0aG9yaXR5X3JvdXRlQDI2IG1haW5fc2V0UmViYWxhbmNlcl9yb3V0ZUAyNyBtYWluX2dldEdhc1VzYWdlX3JvdXRlQDI4IG1haW5fc2V0R2FzVXNhZ2Vfcm91dGVAMjkgbWFpbl9zZXRHYXNPcmFjbGVfcm91dGVAMzAgbWFpbl9nZXRUcmFuc2FjdGlvblJlbGF5ZXJDb3N0X3JvdXRlQDMxIG1haW5fdHJhbnNmZXJPd25lcnNoaXBfcm91dGVAMzIKCm1haW5fYWZ0ZXJfaWZfZWxzZUAzNjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NTQKICAgIC8vIGV4cG9ydCBjbGFzcyBCcmlkZ2UgZXh0ZW5kcyBSb3V0ZXIgaW1wbGVtZW50cyBDb252ZW50aW9uYWxSb3V0aW5nLCBJQnJpZGdlIHsKICAgIGludGNfMCAvLyAwCiAgICByZXR1cm4KCm1haW5fdHJhbnNmZXJPd25lcnNoaXBfcm91dGVAMzI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czoxNgogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NTQKICAgIC8vIGV4cG9ydCBjbGFzcyBCcmlkZ2UgZXh0ZW5kcyBSb3V0ZXIgaW1wbGVtZW50cyBDb252ZW50aW9uYWxSb3V0aW5nLCBJQnJpZGdlIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjE2CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdHJhbnNmZXJPd25lcnNoaXAKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0VHJhbnNhY3Rpb25SZWxheWVyQ29zdF9yb3V0ZUAzMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MzQKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjU0CiAgICAvLyBleHBvcnQgY2xhc3MgQnJpZGdlIGV4dGVuZHMgUm91dGVyIGltcGxlbWVudHMgQ29udmVudGlvbmFsUm91dGluZywgSUJyaWRnZSB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjM0CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIGNhbGxzdWIgZ2V0VHJhbnNhY3Rpb25SZWxheWVyQ29zdAogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9zZXRHYXNPcmFjbGVfcm91dGVAMzA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjI4CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo1NAogICAgLy8gZXhwb3J0IGNsYXNzIEJyaWRnZSBleHRlbmRzIFJvdXRlciBpbXBsZW1lbnRzIENvbnZlbnRpb25hbFJvdXRpbmcsIElCcmlkZ2UgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQXBwbGljYXRpb25zCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjI4CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgc2V0R2FzT3JhY2xlCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX3NldEdhc1VzYWdlX3JvdXRlQDI5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czoyMgogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NTQKICAgIC8vIGV4cG9ydCBjbGFzcyBCcmlkZ2UgZXh0ZW5kcyBSb3V0ZXIgaW1wbGVtZW50cyBDb252ZW50aW9uYWxSb3V0aW5nLCBJQnJpZGdlIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MjIKICAgIC8vIEBhYmltZXRob2QoKQogICAgY2FsbHN1YiBzZXRHYXNVc2FnZQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRHYXNVc2FnZV9yb3V0ZUAyODoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MTcKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjU0CiAgICAvLyBleHBvcnQgY2xhc3MgQnJpZGdlIGV4dGVuZHMgUm91dGVyIGltcGxlbWVudHMgQ29udmVudGlvbmFsUm91dGluZywgSUJyaWRnZSB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjE3CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIGNhbGxzdWIgZ2V0R2FzVXNhZ2UKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fc2V0UmViYWxhbmNlcl9yb3V0ZUAyNzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTQ2CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo1NAogICAgLy8gZXhwb3J0IGNsYXNzIEJyaWRnZSBleHRlbmRzIFJvdXRlciBpbXBsZW1lbnRzIENvbnZlbnRpb25hbFJvdXRpbmcsIElCcmlkZ2UgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNDYKICAgIC8vIEBhYmltZXRob2QoKQogICAgY2FsbHN1YiBzZXRSZWJhbGFuY2VyCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX3NldFN0b3BBdXRob3JpdHlfcm91dGVAMjY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjEzNwogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NTQKICAgIC8vIGV4cG9ydCBjbGFzcyBCcmlkZ2UgZXh0ZW5kcyBSb3V0ZXIgaW1wbGVtZW50cyBDb252ZW50aW9uYWxSb3V0aW5nLCBJQnJpZGdlIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTM3CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgc2V0U3RvcEF1dGhvcml0eQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9zdGFydFN3YXBfcm91dGVAMjU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjEyOAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgc3RhcnRTd2FwCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX3N0b3BTd2FwX3JvdXRlQDI0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxMTkKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIHN0b3BTd2FwCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX3JlbW92ZVBvb2xfcm91dGVAMjM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjExMAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NTQKICAgIC8vIGV4cG9ydCBjbGFzcyBCcmlkZ2UgZXh0ZW5kcyBSb3V0ZXIgaW1wbGVtZW50cyBDb252ZW50aW9uYWxSb3V0aW5nLCBJQnJpZGdlIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTEwCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgcmVtb3ZlUG9vbAogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9hZGRQb29sX3JvdXRlQDIyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxMDAKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjU0CiAgICAvLyBleHBvcnQgY2xhc3MgQnJpZGdlIGV4dGVuZHMgUm91dGVyIGltcGxlbWVudHMgQ29udmVudGlvbmFsUm91dGluZywgSUJyaWRnZSB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjEwMAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIGFkZFBvb2wKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fc3dhcF9yb3V0ZUAyMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6NzgKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjU0CiAgICAvLyBleHBvcnQgY2xhc3MgQnJpZGdlIGV4dGVuZHMgUm91dGVyIGltcGxlbWVudHMgQ29udmVudGlvbmFsUm91dGluZywgSUJyaWRnZSB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjc4CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgc3dhcAogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRTZW5kVHJhbnNhY3Rpb25TdG9yYWdlQ29zdF9yb3V0ZUAyMDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzIzCiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgYnl0ZWMgMTUgLy8gMHgxNTFmN2M3NTAwMDAwMDAwMDAwMDNkNTQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRSZWNlaXZlVG9rZW5zQ29zdF9yb3V0ZUAxOToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzE2CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgYnl0ZWMgMTUgLy8gMHgxNTFmN2M3NTAwMDAwMDAwMDAwMDNkNTQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRUcmFuc2FjdGlvbkNvc3Rfcm91dGVAMTg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMxMQogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NTQKICAgIC8vIGV4cG9ydCBjbGFzcyBCcmlkZ2UgZXh0ZW5kcyBSb3V0ZXIgaW1wbGVtZW50cyBDb252ZW50aW9uYWxSb3V0aW5nLCBJQnJpZGdlIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzExCiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIGNhbGxzdWIgZ2V0VHJhbnNhY3Rpb25Db3N0CiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2lzT3RoZXJCcmlkZ2VUb2tlblN1cHBvcnRlZF9yb3V0ZUAxNzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzA2CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo1NAogICAgLy8gZXhwb3J0IGNsYXNzIEJyaWRnZSBleHRlbmRzIFJvdXRlciBpbXBsZW1lbnRzIENvbnZlbnRpb25hbFJvdXRpbmcsIElCcmlkZ2UgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozMDYKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgY2FsbHN1YiBpc090aGVyQnJpZGdlVG9rZW5TdXBwb3J0ZWQKICAgIGJ5dGVjIDkgLy8gMHgwMAogICAgaW50Y18wIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2hhc2hNZXNzYWdlX3JvdXRlQDE2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyNzkKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjU0CiAgICAvLyBleHBvcnQgY2xhc3MgQnJpZGdlIGV4dGVuZHMgUm91dGVyIGltcGxlbWVudHMgQ29udmVudGlvbmFsUm91dGluZywgSUJyaWRnZSB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA0CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA1CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA2CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI3OQogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICBjYWxsc3ViIGhhc2hNZXNzYWdlCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2dldEJyaWRnaW5nQ29zdEluVG9rZW5zX3JvdXRlQDE1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyNjIKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjU0CiAgICAvLyBleHBvcnQgY2xhc3MgQnJpZGdlIGV4dGVuZHMgUm91dGVyIGltcGxlbWVudHMgQ29udmVudGlvbmFsUm91dGluZywgSUJyaWRnZSB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI2MgogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICBjYWxsc3ViIGdldEJyaWRnaW5nQ29zdEluVG9rZW5zCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX3dpdGhkcmF3QnJpZGdpbmdGZWVJblRva2Vuc19yb3V0ZUAxNDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjQ2CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo1NAogICAgLy8gZXhwb3J0IGNsYXNzIEJyaWRnZSBleHRlbmRzIFJvdXRlciBpbXBsZW1lbnRzIENvbnZlbnRpb25hbFJvdXRpbmcsIElCcmlkZ2UgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyNDYKICAgIC8vIEBhYmltZXRob2QoKQogICAgY2FsbHN1YiB3aXRoZHJhd0JyaWRnaW5nRmVlSW5Ub2tlbnMKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fd2l0aGRyYXdHYXNUb2tlbnNfcm91dGVAMTM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI0MAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NTQKICAgIC8vIGV4cG9ydCBjbGFzcyBCcmlkZ2UgZXh0ZW5kcyBSb3V0ZXIgaW1wbGVtZW50cyBDb252ZW50aW9uYWxSb3V0aW5nLCBJQnJpZGdlIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjQwCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgd2l0aGRyYXdHYXNUb2tlbnMKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fcmVtb3ZlQnJpZGdlVG9rZW5fcm91dGVAMTI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIzNAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NTQKICAgIC8vIGV4cG9ydCBjbGFzcyBCcmlkZ2UgZXh0ZW5kcyBSb3V0ZXIgaW1wbGVtZW50cyBDb252ZW50aW9uYWxSb3V0aW5nLCBJQnJpZGdlIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjM0CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgcmVtb3ZlQnJpZGdlVG9rZW4KICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fYWRkQnJpZGdlVG9rZW5fcm91dGVAMTE6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIyOAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NTQKICAgIC8vIGV4cG9ydCBjbGFzcyBCcmlkZ2UgZXh0ZW5kcyBSb3V0ZXIgaW1wbGVtZW50cyBDb252ZW50aW9uYWxSb3V0aW5nLCBJQnJpZGdlIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjI4CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgYWRkQnJpZGdlVG9rZW4KICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fcmVnaXN0ZXJCcmlkZ2Vfcm91dGVAMTA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIyMgogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NTQKICAgIC8vIGV4cG9ydCBjbGFzcyBCcmlkZ2UgZXh0ZW5kcyBSb3V0ZXIgaW1wbGVtZW50cyBDb252ZW50aW9uYWxSb3V0aW5nLCBJQnJpZGdlIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjIyCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgcmVnaXN0ZXJCcmlkZ2UKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fcmVjZWl2ZVRva2Vuc19yb3V0ZUA5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxNzQKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjU0CiAgICAvLyBleHBvcnQgY2xhc3MgQnJpZGdlIGV4dGVuZHMgUm91dGVyIGltcGxlbWVudHMgQ29udmVudGlvbmFsUm91dGluZywgSUJyaWRnZSB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA0CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA1CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA2CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjE3NAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHJlY2VpdmVUb2tlbnMKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fc3dhcEFuZEJyaWRnZV9yb3V0ZUA4OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo5My05NwogICAgLy8gQGFiaW1ldGhvZCh7CiAgICAvLyAgIGRlZmF1bHRBcmd1bWVudHM6IHsKICAgIC8vICAgICBmZWVUb2tlbkFtb3VudDogeyBjb25zdGFudDogMCB9LAogICAgLy8gICB9LAogICAgLy8gfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo1NAogICAgLy8gZXhwb3J0IGNsYXNzIEJyaWRnZSBleHRlbmRzIFJvdXRlciBpbXBsZW1lbnRzIENvbnZlbnRpb25hbFJvdXRpbmcsIElCcmlkZ2UgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNgogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo5My05NwogICAgLy8gQGFiaW1ldGhvZCh7CiAgICAvLyAgIGRlZmF1bHRBcmd1bWVudHM6IHsKICAgIC8vICAgICBmZWVUb2tlbkFtb3VudDogeyBjb25zdGFudDogMCB9LAogICAgLy8gICB9LAogICAgLy8gfSkKICAgIGNhbGxzdWIgc3dhcEFuZEJyaWRnZQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9ub29wX3JvdXRlQDc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjg5CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9vcHRJbkFzc2V0X3JvdXRlQDY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjc0CiAgICAvLyBvcHRJbkFzc2V0KGFzc2V0SWQ6IHVpbnQ2NCk6IHZvaWQgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjU0CiAgICAvLyBleHBvcnQgY2xhc3MgQnJpZGdlIGV4dGVuZHMgUm91dGVyIGltcGxlbWVudHMgQ29udmVudGlvbmFsUm91dGluZywgSUJyaWRnZSB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjc0CiAgICAvLyBvcHRJbkFzc2V0KGFzc2V0SWQ6IHVpbnQ2NCk6IHZvaWQgewogICAgY2FsbHN1YiBvcHRJbkFzc2V0CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2NyZWF0ZUFwcGxpY2F0aW9uX3JvdXRlQDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjY4CiAgICAvLyBjcmVhdGVBcHBsaWNhdGlvbihvd25lcjogQWRkcmVzcywgY2hhaW5JZDogQnl0ZSwgbWVzc2VuZ2VyOiBBcHBsaWNhdGlvbiwgZ2FzT3JhY2xlOiBBcHBsaWNhdGlvbik6IHZvaWQgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NTQKICAgIC8vIGV4cG9ydCBjbGFzcyBCcmlkZ2UgZXh0ZW5kcyBSb3V0ZXIgaW1wbGVtZW50cyBDb252ZW50aW9uYWxSb3V0aW5nLCBJQnJpZGdlIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGJ0b2kKICAgIHR4bmFzIEFwcGxpY2F0aW9ucwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNAogICAgYnRvaQogICAgdHhuYXMgQXBwbGljYXRpb25zCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjY4CiAgICAvLyBjcmVhdGVBcHBsaWNhdGlvbihvd25lcjogQWRkcmVzcywgY2hhaW5JZDogQnl0ZSwgbWVzc2VuZ2VyOiBBcHBsaWNhdGlvbiwgZ2FzT3JhY2xlOiBBcHBsaWNhdGlvbik6IHZvaWQgewogICAgY2FsbHN1YiBjcmVhdGVBcHBsaWNhdGlvbgogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czo6Z2V0UHJldkFzc2V0UGF5KGFzc2V0SWQ6IHVpbnQ2NCkgLT4gdWludDY0OgpnZXRQcmV2QXNzZXRQYXk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6MzQKICAgIC8vIGV4cG9ydCBmdW5jdGlvbiBnZXRQcmV2QXNzZXRQYXkoYXNzZXRJZDogdWludDY0KTogdWludDY0IHsKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjM2CiAgICAvLyBhc3NlcnQoVHhuLmdyb3VwSW5kZXggPiAwLCBgQXNzZXQgdHhuIG1pc3NpbmdgKTsKICAgIHR4biBHcm91cEluZGV4CiAgICBhc3NlcnQgLy8gQXNzZXQgdHhuIG1pc3NpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czozOQogICAgLy8gY29uc3QgcHJldklkeDogdWludDY0ID0gVHhuLmdyb3VwSW5kZXggLSAxOwogICAgdHhuIEdyb3VwSW5kZXgKICAgIGludGNfMSAvLyAxCiAgICAtCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6NDEKICAgIC8vIGNvbnN0IHBheSA9IGd0eG4uQXNzZXRUcmFuc2ZlclR4bihwcmV2SWR4KTsKICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIGludGNfMyAvLyBheGZlcgogICAgPT0KICAgIGFzc2VydCAvLyB0cmFuc2FjdGlvbiB0eXBlIGlzIGF4ZmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6NDQKICAgIC8vIGFzc2VydChwYXkuYXNzZXRSZWNlaXZlciA9PT0gR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsIGBBc3NldCBtdXN0IGdvIHRvIGFwcGApOwogICAgZHVwCiAgICBndHhucyBBc3NldFJlY2VpdmVyCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgPT0KICAgIGFzc2VydCAvLyBBc3NldCBtdXN0IGdvIHRvIGFwcAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjQ1CiAgICAvLyBhc3NlcnQocGF5LnhmZXJBc3NldC5pZCA9PT0gYXNzZXRJZCwgYFdyb25nIGFzc2V0YCk7CiAgICBkdXAKICAgIGd0eG5zIFhmZXJBc3NldAogICAgZnJhbWVfZGlnIC0xCiAgICA9PQogICAgYXNzZXJ0IC8vIFdyb25nIGFzc2V0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6NDgKICAgIC8vIGFzc2VydChwYXkucmVrZXlUbyA9PT0gR2xvYmFsLnplcm9BZGRyZXNzLCBgUmVrZXkgbm90IGFsbG93ZWRgKTsKICAgIGR1cAogICAgZ3R4bnMgUmVrZXlUbwogICAgZ2xvYmFsIFplcm9BZGRyZXNzCiAgICA9PQogICAgYXNzZXJ0IC8vIFJla2V5IG5vdCBhbGxvd2VkCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6NDkKICAgIC8vIGFzc2VydChwYXkuYXNzZXRDbG9zZVRvID09PSBHbG9iYWwuemVyb0FkZHJlc3MsIGBDbG9zZVRvIG5vdCBhbGxvd2VkYCk7CiAgICBkdXAKICAgIGd0eG5zIEFzc2V0Q2xvc2VUbwogICAgZ2xvYmFsIFplcm9BZGRyZXNzCiAgICA9PQogICAgYXNzZXJ0IC8vIENsb3NlVG8gbm90IGFsbG93ZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czo1MAogICAgLy8gcmV0dXJuIHBheS5hc3NldEFtb3VudDsKICAgIGd0eG5zIEFzc2V0QW1vdW50CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6OmdldFByZXZQYXkocmVsVHhJbmRleDogdWludDY0KSAtPiB1aW50NjQ6CmdldFByZXZQYXk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6NTMKICAgIC8vIGV4cG9ydCBmdW5jdGlvbiBnZXRQcmV2UGF5KHJlbFR4SW5kZXg6IHVpbnQ2NCk6IHVpbnQ2NCB7CiAgICBwcm90byAxIDEKICAgIHB1c2hieXRlcyAiIgogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6NTQKICAgIC8vIGlmIChUeG4uZ3JvdXBJbmRleCA8IHJlbFR4SW5kZXgpIHJldHVybiAwOwogICAgdHhuIEdyb3VwSW5kZXgKICAgIGZyYW1lX2RpZyAtMQogICAgPAogICAgYnogZ2V0UHJldlBheV9hZnRlcl9pZl9lbHNlQDIKICAgIGludGNfMCAvLyAwCiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1YgoKZ2V0UHJldlBheV9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6NTYKICAgIC8vIGNvbnN0IHR4SWR4OiB1aW50NjQgPSBUeG4uZ3JvdXBJbmRleCAtIHJlbFR4SW5kZXg7CiAgICB0eG4gR3JvdXBJbmRleAogICAgZnJhbWVfZGlnIC0xCiAgICAtCiAgICBkdXAKICAgIGZyYW1lX2J1cnkgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjU4CiAgICAvLyBpZiAoZ3R4bi5UcmFuc2FjdGlvbih0eElkeCkudHlwZSAhPT0gVHJhbnNhY3Rpb25UeXBlLlBheW1lbnQpIHJldHVybiAwOwogICAgZ3R4bnMgVHlwZUVudW0KICAgIGR1cAogICAgZnJhbWVfYnVyeSAwCiAgICBpbnRjXzEgLy8gMQogICAgIT0KICAgIGJ6IGdldFByZXZQYXlfYWZ0ZXJfaWZfZWxzZUA0CiAgICBpbnRjXzAgLy8gMAogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCmdldFByZXZQYXlfYWZ0ZXJfaWZfZWxzZUA0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjU5CiAgICAvLyBjb25zdCBwYXkgPSBndHhuLlBheW1lbnRUeG4odHhJZHgpOwogICAgZnJhbWVfZGlnIDAKICAgIGludGNfMSAvLyBwYXkKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBwYXkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czo2MQogICAgLy8gaWYgKHBheS5yZWNlaXZlciAhPT0gR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MpIHJldHVybiAwOwogICAgZnJhbWVfZGlnIDEKICAgIGd0eG5zIFJlY2VpdmVyCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgIT0KICAgIGJ6IGdldFByZXZQYXlfYWZ0ZXJfaWZfZWxzZUA2CiAgICBpbnRjXzAgLy8gMAogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCmdldFByZXZQYXlfYWZ0ZXJfaWZfZWxzZUA2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjYzCiAgICAvLyBpZiAocGF5LnJla2V5VG8gIT09IEdsb2JhbC56ZXJvQWRkcmVzcykgcmV0dXJuIDA7CiAgICBmcmFtZV9kaWcgMQogICAgZ3R4bnMgUmVrZXlUbwogICAgZ2xvYmFsIFplcm9BZGRyZXNzCiAgICAhPQogICAgYnogZ2V0UHJldlBheV9hZnRlcl9pZl9lbHNlQDgKICAgIGludGNfMCAvLyAwCiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1YgoKZ2V0UHJldlBheV9hZnRlcl9pZl9lbHNlQDg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6NjQKICAgIC8vIGlmIChwYXkuY2xvc2VSZW1haW5kZXJUbyAhPT0gR2xvYmFsLnplcm9BZGRyZXNzKSByZXR1cm4gMDsKICAgIGZyYW1lX2RpZyAxCiAgICBndHhucyBDbG9zZVJlbWFpbmRlclRvCiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKICAgICE9CiAgICBieiBnZXRQcmV2UGF5X2FmdGVyX2lmX2Vsc2VAMTAKICAgIGludGNfMCAvLyAwCiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1YgoKZ2V0UHJldlBheV9hZnRlcl9pZl9lbHNlQDEwOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjY2CiAgICAvLyByZXR1cm4gcGF5LmFtb3VudDsKICAgIGZyYW1lX2RpZyAxCiAgICBndHhucyBBbW91bnQKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo6QnJpZGdlLmNyZWF0ZUFwcGxpY2F0aW9uKG93bmVyOiBieXRlcywgY2hhaW5JZDogYnl0ZXMsIG1lc3NlbmdlcjogdWludDY0LCBnYXNPcmFjbGU6IHVpbnQ2NCkgLT4gdm9pZDoKY3JlYXRlQXBwbGljYXRpb246CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjY4CiAgICAvLyBjcmVhdGVBcHBsaWNhdGlvbihvd25lcjogQWRkcmVzcywgY2hhaW5JZDogQnl0ZSwgbWVzc2VuZ2VyOiBBcHBsaWNhdGlvbiwgZ2FzT3JhY2xlOiBBcHBsaWNhdGlvbik6IHZvaWQgewogICAgcHJvdG8gNCAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czo2CiAgICAvLyBwcm90ZWN0ZWQgb3duZXIgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPigpOwogICAgYnl0ZWNfMyAvLyAib3duZXIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czo5CiAgICAvLyB0aGlzLm93bmVyLnZhbHVlID0gb3duZXI7CiAgICBmcmFtZV9kaWcgLTQKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjkKICAgIC8vIGdhc09yYWNsZSA9IEdsb2JhbFN0YXRlPEFwcGxpY2F0aW9uPigpOwogICAgYnl0ZWMgNCAvLyAiZ2FzT3JhY2xlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czoxNAogICAgLy8gdGhpcy5nYXNPcmFjbGUudmFsdWUgPSBnYXNPcmFjbGU7CiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjM5CiAgICAvLyBwcml2YXRlIHN0b3BBdXRob3JpdHkgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPigpOy8vIGNhbiByZXN0cmljdCBkZXBvc2l0IG9yIHdpdGhkcmF3IG9wZXJhdGlvbnMKICAgIGJ5dGVjIDEwIC8vICJzdG9wQXV0aG9yaXR5IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo1NAogICAgLy8gdGhpcy5zdG9wQXV0aG9yaXR5LnZhbHVlID0gb3duZXI7CiAgICBmcmFtZV9kaWcgLTQKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjU2CiAgICAvLyBjaGFpbklkID0gR2xvYmFsU3RhdGU8Qnl0ZT4oKTsKICAgIGJ5dGVjIDUgLy8gImNoYWluSWQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjcwCiAgICAvLyB0aGlzLmNoYWluSWQudmFsdWUgPSBjaGFpbklkOwogICAgZnJhbWVfZGlnIC0zCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo1NwogICAgLy8gbWVzc2VuZ2VyID0gR2xvYmFsU3RhdGU8QXBwbGljYXRpb24+KCk7CiAgICBieXRlY18yIC8vICJtZXNzZW5nZXIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjcxCiAgICAvLyB0aGlzLm1lc3Nlbmdlci52YWx1ZSA9IG1lc3NlbmdlcjsKICAgIGZyYW1lX2RpZyAtMgogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6OkJyaWRnZS5vcHRJbkFzc2V0KGFzc2V0SWQ6IHVpbnQ2NCkgLT4gdm9pZDoKb3B0SW5Bc3NldDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NzQKICAgIC8vIG9wdEluQXNzZXQoYXNzZXRJZDogdWludDY0KTogdm9pZCB7CiAgICBwcm90byAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NzUKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo3OC04NAogICAgLy8gaXR4bgogICAgLy8gICAuYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgICAgeGZlckFzc2V0OiBBc3NldChhc3NldElkKSwKICAgIC8vICAgICBhc3NldEFtb3VudDogMCwKICAgIC8vICAgICBhc3NldFJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpOwogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo4MgogICAgLy8gYXNzZXRSZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjgxCiAgICAvLyBhc3NldEFtb3VudDogMCwKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjc4LTgzCiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICB4ZmVyQXNzZXQ6IEFzc2V0KGFzc2V0SWQpLAogICAgLy8gICAgIGFzc2V0QW1vdW50OiAwLAogICAgLy8gICAgIGFzc2V0UmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICB9KQogICAgaW50Y18zIC8vIDQKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo3OC04NAogICAgLy8gaXR4bgogICAgLy8gICAuYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgICAgeGZlckFzc2V0OiBBc3NldChhc3NldElkKSwKICAgIC8vICAgICBhc3NldEFtb3VudDogMCwKICAgIC8vICAgICBhc3NldFJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpOwogICAgaXR4bl9zdWJtaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6ODYKICAgIC8vIGxvZygnQnJpZGdlOiBvcHQtaW4gY29tcGxldGVkJyk7CiAgICBwdXNoYnl0ZXMgIkJyaWRnZTogb3B0LWluIGNvbXBsZXRlZCIKICAgIGxvZwogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo6QnJpZGdlLnN3YXBBbmRCcmlkZ2UodG9rZW5JZDogdWludDY0LCByZWNpcGllbnQ6IGJ5dGVzLCBkZXN0aW5hdGlvbkNoYWluSWQ6IGJ5dGVzLCByZWNlaXZlVG9rZW46IGJ5dGVzLCBub25jZTogYnl0ZXMsIGZlZVRva2VuQW1vdW50OiB1aW50NjQpIC0+IHZvaWQ6CnN3YXBBbmRCcmlkZ2U6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjkzLTEwNQogICAgLy8gQGFiaW1ldGhvZCh7CiAgICAvLyAgIGRlZmF1bHRBcmd1bWVudHM6IHsKICAgIC8vICAgICBmZWVUb2tlbkFtb3VudDogeyBjb25zdGFudDogMCB9LAogICAgLy8gICB9LAogICAgLy8gfSkKICAgIC8vIHN3YXBBbmRCcmlkZ2UoCiAgICAvLyAgIHRva2VuSWQ6IHVpbnQ2NCwKICAgIC8vICAgcmVjaXBpZW50OiBTdGF0aWNCeXRlczwzMj4sCiAgICAvLyAgIGRlc3RpbmF0aW9uQ2hhaW5JZDogQnl0ZSwKICAgIC8vICAgcmVjZWl2ZVRva2VuOiBTdGF0aWNCeXRlczwzMj4sCiAgICAvLyAgIG5vbmNlOiBTdGF0aWNCeXRlczwzMj4sCiAgICAvLyAgIGZlZVRva2VuQW1vdW50OiB1aW50NjQsCiAgICAvLyApOiB2b2lkIHsKICAgIHByb3RvIDYgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo1MAogICAgLy8gY2FuU3dhcCA9IEdsb2JhbFN0YXRlPGJvb2xlYW4+KHsgaW5pdGlhbFZhbHVlOiB0cnVlIH0pOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gImNhblN3YXAiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo2MQogICAgLy8gYXNzZXJ0KHRoaXMuY2FuU3dhcC52YWx1ZSwgJ1JvdXRlcjogc3dhcCBwcm9oaWJpdGVkJyk7CiAgICBhc3NlcnQgLy8gUm91dGVyOiBzd2FwIHByb2hpYml0ZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTA3CiAgICAvLyBjb25zdCBhbW91bnQgPSBnZXRQcmV2QXNzZXRQYXkodG9rZW5JZCk7CiAgICBmcmFtZV9kaWcgLTYKICAgIGNhbGxzdWIgZ2V0UHJldkFzc2V0UGF5CiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTA4CiAgICAvLyBhc3NlcnQoYW1vdW50ID4gZmVlVG9rZW5BbW91bnQsICdCcmlkZ2U6IGFtb3VudCB0b28gbG93IGZvciBmZWUnKTsKICAgIGZyYW1lX2RpZyAtMQogICAgPgogICAgYXNzZXJ0IC8vIEJyaWRnZTogYW1vdW50IHRvbyBsb3cgZm9yIGZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxMDkKICAgIC8vIGFzc2VydCghcmVjaXBpZW50LmJ5dGVzLmVxdWFscyhiemVybygzMikpLCAnQnJpZGdlOiBicmlkZ2UgdG8gdGhlIHplcm8gYWRkcmVzcycpOwogICAgcHVzaGludCAzMiAvLyAzMgogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtNQogICAgPT0KICAgICEKICAgIGFzc2VydCAvLyBCcmlkZ2U6IGJyaWRnZSB0byB0aGUgemVybyBhZGRyZXNzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjExMQogICAgLy8gY29uc3QgYnJpZGdpbmdGZWU6IHVpbnQ2NCA9IGdldFByZXZQYXkoMikgKyB0aGlzLl9jb252ZXJ0QnJpZGdpbmdGZWVJblRva2Vuc1RvTmF0aXZlVG9rZW4odG9rZW5JZCwgZmVlVG9rZW5BbW91bnQpOwogICAgcHVzaGludCAyIC8vIDIKICAgIGNhbGxzdWIgZ2V0UHJldlBheQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozMzcKICAgIC8vIGlmIChmZWVUb2tlbkFtb3VudCA9PT0gMCkgcmV0dXJuIDA7CiAgICBmcmFtZV9kaWcgLTEKICAgIGJueiBzd2FwQW5kQnJpZGdlX2FmdGVyX2lmX2Vsc2VAMwogICAgaW50Y18wIC8vIDAKCnN3YXBBbmRCcmlkZ2VfYWZ0ZXJfaW5saW5lZF9zbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2UuX2NvbnZlcnRCcmlkZ2luZ0ZlZUluVG9rZW5zVG9OYXRpdmVUb2tlbkA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxMTEKICAgIC8vIGNvbnN0IGJyaWRnaW5nRmVlOiB1aW50NjQgPSBnZXRQcmV2UGF5KDIpICsgdGhpcy5fY29udmVydEJyaWRnaW5nRmVlSW5Ub2tlbnNUb05hdGl2ZVRva2VuKHRva2VuSWQsIGZlZVRva2VuQW1vdW50KTsKICAgIGZyYW1lX2RpZyAxCiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjExMgogICAgLy8gY29uc3QgYW1vdW50QWZ0ZXJGZWU6IHVpbnQ2NCA9IGFtb3VudCAtIGZlZVRva2VuQW1vdW50OwogICAgZnJhbWVfZGlnIDAKICAgIGZyYW1lX2RpZyAtMQogICAgLQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxMTQKICAgIC8vIGNvbnN0IHZVc2RBbW91bnQgPSB0aGlzLnNlbmRBbmRTd2FwVG9WVXNkKHRva2VuSWQsIHNlbmRlciwgYW1vdW50QWZ0ZXJGZWUpOwogICAgZnJhbWVfZGlnIC02CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjExMwogICAgLy8gY29uc3Qgc2VuZGVyID0gbmV3IEFkZHJlc3MoVHhuLnNlbmRlcik7CiAgICB0eG4gU2VuZGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjExNAogICAgLy8gY29uc3QgdlVzZEFtb3VudCA9IHRoaXMuc2VuZEFuZFN3YXBUb1ZVc2QodG9rZW5JZCwgc2VuZGVyLCBhbW91bnRBZnRlckZlZSk7CiAgICB1bmNvdmVyIDIKICAgIGNhbGxzdWIgc2VuZEFuZFN3YXBUb1ZVc2QKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NTYKICAgIC8vIGNoYWluSWQgPSBHbG9iYWxTdGF0ZTxCeXRlPigpOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDUgLy8gImNoYWluSWQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxMjYKICAgIC8vIGFzc2VydChkZXN0aW5hdGlvbkNoYWluSWQgIT09IHRoaXMuY2hhaW5JZC52YWx1ZSwgJ0JyaWRnZTogd3JvbmcgZGVzdGluYXRpb24gY2hhaW4nKTsKICAgIGZyYW1lX2RpZyAtNAogICAgIT0KICAgIGFzc2VydCAvLyBCcmlkZ2U6IHdyb25nIGRlc3RpbmF0aW9uIGNoYWluCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMzMwogICAgLy8gcmV0dXJuIGNoYWluSWQuYnl0ZXMuY29uY2F0KHRva2VuLmJ5dGVzKTsKICAgIGZyYW1lX2RpZyAtNAogICAgZnJhbWVfZGlnIC0zCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NjYKICAgIC8vIG90aGVyQnJpZGdlVG9rZW5zID0gQm94TWFwPGJ5dGVzLCBTdGF0aWNCeXRlcz4oeyBrZXlQcmVmaXg6ICd0JyB9KTsKICAgIGJ5dGVjIDcgLy8gInQiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTI3CiAgICAvLyBhc3NlcnQodGhpcy5vdGhlckJyaWRnZVRva2Vucyh0aGlzLl9nZXRPdGhlckJyaWRnZVRva2Vuc0tleShkZXN0aW5hdGlvbkNoYWluSWQsIHJlY2VpdmVUb2tlbikpLmV4aXN0cywgJ0JyaWRnZTogdW5rbm93biBjaGFpbiBvciB0b2tlbicpOwogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gQnJpZGdlOiB1bmtub3duIGNoYWluIG9yIHRva2VuCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjU2CiAgICAvLyBjaGFpbklkID0gR2xvYmFsU3RhdGU8Qnl0ZT4oKTsKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA1IC8vICJjaGFpbklkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTI5CiAgICAvLyBjb25zdCBtZXNzYWdlID0gdGhpcy5oYXNoTWVzc2FnZShhbW91bnQsIHJlY2lwaWVudCwgdGhpcy5jaGFpbklkLnZhbHVlLCBkZXN0aW5hdGlvbkNoYWluSWQsIHJlY2VpdmVUb2tlbiwgbm9uY2UpOwogICAgZGlnIDEKICAgIGZyYW1lX2RpZyAtNQogICAgdW5jb3ZlciAyCiAgICBmcmFtZV9kaWcgLTQKICAgIGZyYW1lX2RpZyAtMwogICAgZnJhbWVfZGlnIC0yCiAgICBjYWxsc3ViIGhhc2hNZXNzYWdlCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjEzMAogICAgLy8gY29uc3QgYnJpZGdlVHJhbnNhY3Rpb25Db3N0ID0gdGhpcy5nZXRUcmFuc2FjdGlvbkNvc3QoZGVzdGluYXRpb25DaGFpbklkKTsKICAgIGZyYW1lX2RpZyAtNAogICAgY2FsbHN1YiBnZXRUcmFuc2FjdGlvbkNvc3QKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NjEKICAgIC8vIHNlbnRNZXNzYWdlcyA9IEJveE1hcDxTdGF0aWNCeXRlczwzMj4sIFN0YXRpY0J5dGVzPih7IGtleVByZWZpeDogJ3MnIH0pOwogICAgcHVzaGJ5dGVzICJzIgogICAgZGlnIDIKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxNDgKICAgIC8vIGFzc2VydCghdGhpcy5zZW50TWVzc2FnZXMobWVzc2FnZSkuZXhpc3RzLCAnQnJpZGdlOiB0b2tlbnMgYWxyZWFkeSBzZW50Jyk7CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgIQogICAgYXNzZXJ0IC8vIEJyaWRnZTogdG9rZW5zIGFscmVhZHkgc2VudAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxNTAKICAgIC8vIHRoaXMuc2VudE1lc3NhZ2VzKG1lc3NhZ2UpLnZhbHVlID0gbmV3IFN0YXRpY0J5dGVzKCk7CiAgICBwdXNoYnl0ZXMgMHgKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTUyCiAgICAvLyBjb25zdCBkZXN0aW5hdGlvbkNoYWluSWQgPSBtZXNzYWdlLmF0KDEpOwogICAgZGlnIDEKICAgIGV4dHJhY3QgMSAxIC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxNTMtMTU2CiAgICAvLyBjb25zdCBtZXNzYWdlQ29zdCA9IGFiaUNhbGwoTWVzc2VuZ2VyLnByb3RvdHlwZS5nZXRUcmFuc2FjdGlvbkNvc3QsIHsKICAgIC8vICAgYXBwSWQ6IHRoaXMubWVzc2VuZ2VyLnZhbHVlLmlkLAogICAgLy8gICBhcmdzOiBbZGVzdGluYXRpb25DaGFpbklkXSwKICAgIC8vIH0pLnJldHVyblZhbHVlOwogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo1NwogICAgLy8gbWVzc2VuZ2VyID0gR2xvYmFsU3RhdGU8QXBwbGljYXRpb24+KCk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMiAvLyAibWVzc2VuZ2VyIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTUzLTE1NgogICAgLy8gY29uc3QgbWVzc2FnZUNvc3QgPSBhYmlDYWxsKE1lc3Nlbmdlci5wcm90b3R5cGUuZ2V0VHJhbnNhY3Rpb25Db3N0LCB7CiAgICAvLyAgIGFwcElkOiB0aGlzLm1lc3Nlbmdlci52YWx1ZS5pZCwKICAgIC8vICAgYXJnczogW2Rlc3RpbmF0aW9uQ2hhaW5JZF0sCiAgICAvLyB9KS5yZXR1cm5WYWx1ZTsKICAgIGJ5dGVjIDEzIC8vIG1ldGhvZCAiZ2V0VHJhbnNhY3Rpb25Db3N0KGJ5dGUpdWludDY0IgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGludGNfMiAvLyBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIGR1cAogICAgZXh0cmFjdCA0IDAKICAgIHN3YXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQnl0ZXMgaGFzIHZhbGlkIHByZWZpeAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo1NwogICAgLy8gbWVzc2VuZ2VyID0gR2xvYmFsU3RhdGU8QXBwbGljYXRpb24+KCk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMiAvLyAibWVzc2VuZ2VyIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTYwCiAgICAvLyByZWNlaXZlcjogdGhpcy5tZXNzZW5nZXIudmFsdWUuYWRkcmVzcywKICAgIGFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKICAgIGFzc2VydCAvLyBhcHBsaWNhdGlvbiBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NTcKICAgIC8vIG1lc3NlbmdlciA9IEdsb2JhbFN0YXRlPEFwcGxpY2F0aW9uPigpOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzIgLy8gIm1lc3NlbmdlciIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjE3MAogICAgLy8gaXR4bi5zdWJtaXRHcm91cChwYXltZW50UGFyYW1zLCBhcHBDYWxsUGFyYW1zKTsKICAgIGl0eG5fYmVnaW4KICAgIHN3YXAKICAgIGl0eG5fZmllbGQgUmVjZWl2ZXIKICAgIGRpZyAxCiAgICBpdHhuX2ZpZWxkIEFtb3VudAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxNTgtMTYxCiAgICAvLyBjb25zdCBwYXltZW50UGFyYW1zID0gaXR4bi5wYXltZW50KHsKICAgIC8vICAgYW1vdW50OiBtZXNzYWdlQ29zdCwKICAgIC8vICAgcmVjZWl2ZXI6IHRoaXMubWVzc2VuZ2VyLnZhbHVlLmFkZHJlc3MsCiAgICAvLyB9KTsKICAgIGludGNfMSAvLyAxCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTcwCiAgICAvLyBpdHhuLnN1Ym1pdEdyb3VwKHBheW1lbnRQYXJhbXMsIGFwcENhbGxQYXJhbXMpOwogICAgaXR4bl9uZXh0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjE2NgogICAgLy8gYXJjNC5tZXRob2RTZWxlY3Rvcignc2VuZE1lc3NhZ2UoYnl0ZVszMl0pdm9pZCcpLAogICAgcHVzaGJ5dGVzIDB4YTMyNDk5ODkgLy8gbWV0aG9kICJzZW5kTWVzc2FnZShieXRlWzMyXSl2b2lkIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIHVuY292ZXIgMwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxNjMtMTY5CiAgICAvLyBjb25zdCBhcHBDYWxsUGFyYW1zID0gaXR4bi5hcHBsaWNhdGlvbkNhbGwoewogICAgLy8gICBhcHBJZDogdGhpcy5tZXNzZW5nZXIudmFsdWUuaWQsCiAgICAvLyAgIGFwcEFyZ3M6IFsKICAgIC8vICAgICBhcmM0Lm1ldGhvZFNlbGVjdG9yKCdzZW5kTWVzc2FnZShieXRlWzMyXSl2b2lkJyksCiAgICAvLyAgICAgbWVzc2FnZSwKICAgIC8vICAgXSwKICAgIC8vIH0pOwogICAgaW50Y18yIC8vIDYKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxNzAKICAgIC8vIGl0eG4uc3VibWl0R3JvdXAocGF5bWVudFBhcmFtcywgYXBwQ2FsbFBhcmFtcyk7CiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxMzIKICAgIC8vIGVtaXQ8UmVjZWl2ZUZlZT4oeyBicmlkZ2VUcmFuc2FjdGlvbkNvc3QsIG1lc3NhZ2VUcmFuc2FjdGlvbkNvc3QgfSk7CiAgICBkaWcgMQogICAgaXRvYgogICAgZGlnIDEKICAgIGl0b2IKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4NGI1NTQxOWIgLy8gbWV0aG9kICJSZWNlaXZlRmVlKHVpbnQ2NCx1aW50NjQpIgogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTMzCiAgICAvLyBhc3NlcnQoYnJpZGdpbmdGZWUgPj0gYnJpZGdlVHJhbnNhY3Rpb25Db3N0ICsgbWVzc2FnZVRyYW5zYWN0aW9uQ29zdCwgJ0JyaWRnZTogbm90IGVub3VnaCBmZWUnKTsKICAgICsKICAgIHVuY292ZXIgMgogICAgPD0KICAgIGFzc2VydCAvLyBCcmlkZ2U6IG5vdCBlbm91Z2ggZmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjEzNQogICAgLy8gYW1vdW50LAogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxMzQtMTQxCiAgICAvLyBlbWl0PFRva2Vuc1NlbnQ+KHsKICAgIC8vICAgICBhbW91bnQsCiAgICAvLyAgICAgcmVjaXBpZW50LAogICAgLy8gICAgIGRlc3RpbmF0aW9uQ2hhaW5JZCwKICAgIC8vICAgICByZWNlaXZlVG9rZW4sCiAgICAvLyAgICAgbm9uY2UsCiAgICAvLyAgICAgbWVzc2VuZ2VyOiBBTExCUklER0VfTUVTU0VOR0VSLAogICAgLy8gICB9LAogICAgZnJhbWVfZGlnIC01CiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtNAogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTMKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC0yCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NTIKICAgIC8vIGNvbnN0IEFMTEJSSURHRV9NRVNTRU5HRVIgPSBuZXcgQnl0ZSgxKTsKICAgIGJ5dGVjIDExIC8vIDB4MDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTM0LTE0MQogICAgLy8gZW1pdDxUb2tlbnNTZW50Pih7CiAgICAvLyAgICAgYW1vdW50LAogICAgLy8gICAgIHJlY2lwaWVudCwKICAgIC8vICAgICBkZXN0aW5hdGlvbkNoYWluSWQsCiAgICAvLyAgICAgcmVjZWl2ZVRva2VuLAogICAgLy8gICAgIG5vbmNlLAogICAgLy8gICAgIG1lc3NlbmdlcjogQUxMQlJJREdFX01FU1NFTkdFUiwKICAgIC8vICAgfSwKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxMzQtMTQyCiAgICAvLyBlbWl0PFRva2Vuc1NlbnQ+KHsKICAgIC8vICAgICBhbW91bnQsCiAgICAvLyAgICAgcmVjaXBpZW50LAogICAgLy8gICAgIGRlc3RpbmF0aW9uQ2hhaW5JZCwKICAgIC8vICAgICByZWNlaXZlVG9rZW4sCiAgICAvLyAgICAgbm9uY2UsCiAgICAvLyAgICAgbWVzc2VuZ2VyOiBBTExCUklER0VfTUVTU0VOR0VSLAogICAgLy8gICB9LAogICAgLy8gKTsKICAgIHB1c2hieXRlcyAweDIyOWZiYWVjIC8vIG1ldGhvZCAiVG9rZW5zU2VudCh1aW50NjQsYnl0ZVszMl0sYnl0ZSxieXRlWzMyXSxieXRlWzMyXSxieXRlKSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICByZXRzdWIKCnN3YXBBbmRCcmlkZ2VfYWZ0ZXJfaWZfZWxzZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozMzkKICAgIC8vIGNvbnN0IGZlZTogdWludDY0ID0gdGhpcy5icmlkZ2luZ0ZlZUNvbnZlcnNpb25TY2FsaW5nRmFjdG9yKHRva2VuSWQpLnZhbHVlICogZmVlVG9rZW5BbW91bnQgLyBhYmlDYWxsKEdhc09yYWNsZS5wcm90b3R5cGUuZ2V0UHJpY2UsIHsKICAgIGZyYW1lX2RpZyAtNgogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czozNgogICAgLy8gcHJvdGVjdGVkIGJyaWRnaW5nRmVlQ29udmVyc2lvblNjYWxpbmdGYWN0b3IgPSBCb3hNYXA8dWludDY0LCB1aW50NjQ+KHsga2V5UHJlZml4OiAnZicgfSk7CiAgICBwdXNoYnl0ZXMgImYiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzM5CiAgICAvLyBjb25zdCBmZWU6IHVpbnQ2NCA9IHRoaXMuYnJpZGdpbmdGZWVDb252ZXJzaW9uU2NhbGluZ0ZhY3Rvcih0b2tlbklkKS52YWx1ZSAqIGZlZVRva2VuQW1vdW50IC8gYWJpQ2FsbChHYXNPcmFjbGUucHJvdG90eXBlLmdldFByaWNlLCB7CiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBidG9pCiAgICBzd2FwCiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgZnJhbWVfZGlnIC0xCiAgICAqCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMzOS0zNDIKICAgIC8vIGNvbnN0IGZlZTogdWludDY0ID0gdGhpcy5icmlkZ2luZ0ZlZUNvbnZlcnNpb25TY2FsaW5nRmFjdG9yKHRva2VuSWQpLnZhbHVlICogZmVlVG9rZW5BbW91bnQgLyBhYmlDYWxsKEdhc09yYWNsZS5wcm90b3R5cGUuZ2V0UHJpY2UsIHsKICAgIC8vICAgYXBwSWQ6IHRoaXMuZ2FzT3JhY2xlLnZhbHVlLmlkLAogICAgLy8gICBhcmdzOiBbdGhpcy5jaGFpbklkLnZhbHVlXSwKICAgIC8vIH0pLnJldHVyblZhbHVlOwogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czo5CiAgICAvLyBnYXNPcmFjbGUgPSBHbG9iYWxTdGF0ZTxBcHBsaWNhdGlvbj4oKTsKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA0IC8vICJnYXNPcmFjbGUiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo1NgogICAgLy8gY2hhaW5JZCA9IEdsb2JhbFN0YXRlPEJ5dGU+KCk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNSAvLyAiY2hhaW5JZCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMzOS0zNDIKICAgIC8vIGNvbnN0IGZlZTogdWludDY0ID0gdGhpcy5icmlkZ2luZ0ZlZUNvbnZlcnNpb25TY2FsaW5nRmFjdG9yKHRva2VuSWQpLnZhbHVlICogZmVlVG9rZW5BbW91bnQgLyBhYmlDYWxsKEdhc09yYWNsZS5wcm90b3R5cGUuZ2V0UHJpY2UsIHsKICAgIC8vICAgYXBwSWQ6IHRoaXMuZ2FzT3JhY2xlLnZhbHVlLmlkLAogICAgLy8gICBhcmdzOiBbdGhpcy5jaGFpbklkLnZhbHVlXSwKICAgIC8vIH0pLnJldHVyblZhbHVlOwogICAgcHVzaGJ5dGVzIDB4MWRiNzBjZGQgLy8gbWV0aG9kICJnZXRQcmljZShieXRlKXVpbnQ2NCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBpbnRjXzIgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEJ5dGVzIGhhcyB2YWxpZCBwcmVmaXgKICAgIGJ0b2kKICAgIC8KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzQ0CiAgICAvLyBlbWl0PEJyaWRnaW5nRmVlRnJvbVRva2Vucz4oeyBmZWUgfSk7CiAgICBkdXAKICAgIGl0b2IKICAgIHB1c2hieXRlcyAweGUwN2Y2YjM2IC8vIG1ldGhvZCAiQnJpZGdpbmdGZWVGcm9tVG9rZW5zKHVpbnQ2NCkiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxMTEKICAgIC8vIGNvbnN0IGJyaWRnaW5nRmVlOiB1aW50NjQgPSBnZXRQcmV2UGF5KDIpICsgdGhpcy5fY29udmVydEJyaWRnaW5nRmVlSW5Ub2tlbnNUb05hdGl2ZVRva2VuKHRva2VuSWQsIGZlZVRva2VuQW1vdW50KTsKICAgIGIgc3dhcEFuZEJyaWRnZV9hZnRlcl9pbmxpbmVkX3NtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6OkJyaWRnZS5fY29udmVydEJyaWRnaW5nRmVlSW5Ub2tlbnNUb05hdGl2ZVRva2VuQDUKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2UucmVjZWl2ZVRva2VucyhhbW91bnQ6IHVpbnQ2NCwgcmVjaXBpZW50OiBieXRlcywgc291cmNlQ2hhaW5JZDogYnl0ZXMsIHJlY2VpdmVUb2tlbjogYnl0ZXMsIG5vbmNlOiBieXRlcywgcmVjZWl2ZUFtb3VudE1pbjogdWludDY0KSAtPiB2b2lkOgpyZWNlaXZlVG9rZW5zOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxNzQtMTgyCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIC8vIHJlY2VpdmVUb2tlbnMoCiAgICAvLyAgIGFtb3VudDogdWludDY0LAogICAgLy8gICByZWNpcGllbnQ6IFN0YXRpY0J5dGVzPDMyPiwKICAgIC8vICAgc291cmNlQ2hhaW5JZDogQnl0ZSwKICAgIC8vICAgcmVjZWl2ZVRva2VuOiBTdGF0aWNCeXRlczwzMj4sCiAgICAvLyAgIG5vbmNlOiBTdGF0aWNCeXRlczwzMj4sCiAgICAvLyAgIHJlY2VpdmVBbW91bnRNaW46IHVpbnQ2NCwKICAgIC8vICk6IHZvaWQgewogICAgcHJvdG8gNiAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjUwCiAgICAvLyBjYW5Td2FwID0gR2xvYmFsU3RhdGU8Ym9vbGVhbj4oeyBpbml0aWFsVmFsdWU6IHRydWUgfSk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAiY2FuU3dhcCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjYxCiAgICAvLyBhc3NlcnQodGhpcy5jYW5Td2FwLnZhbHVlLCAnUm91dGVyOiBzd2FwIHByb2hpYml0ZWQnKTsKICAgIGFzc2VydCAvLyBSb3V0ZXI6IHN3YXAgcHJvaGliaXRlZAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo2MwogICAgLy8gb3RoZXJCcmlkZ2VzID0gQm94TWFwPEJ5dGUsIFN0YXRpY0J5dGVzPDMyPj4oeyBrZXlQcmVmaXg6ICdiJyB9KTsKICAgIHB1c2hieXRlcyAiYiIKICAgIGZyYW1lX2RpZyAtNAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjE4NAogICAgLy8gYXNzZXJ0KHRoaXMub3RoZXJCcmlkZ2VzKHNvdXJjZUNoYWluSWQpLmV4aXN0cywgJ0JyaWRnZTogc291cmNlIG5vdCByZWdpc3RlcmVkJyk7CiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBCcmlkZ2U6IHNvdXJjZSBub3QgcmVnaXN0ZXJlZAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxODUKICAgIC8vIGNvbnN0IHZhbHVlOiB1aW50NjQgPSBnZXRQcmV2UGF5KDEpOwogICAgaW50Y18xIC8vIDEKICAgIGNhbGxzdWIgZ2V0UHJldlBheQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxODcKICAgIC8vIGFzc2VydCh2YWx1ZSA+PSBzdG9yYWdlRmVlLCAnQnJpZGdlOiBub3QgZW5vdWdoIGZlZScpOwogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMyMAogICAgLy8gcmV0dXJuIDE1NzAwOwogICAgaW50YyA0IC8vIDE1NzAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjE4NwogICAgLy8gYXNzZXJ0KHZhbHVlID49IHN0b3JhZ2VGZWUsICdCcmlkZ2U6IG5vdCBlbm91Z2ggZmVlJyk7CiAgICA+PQogICAgYXNzZXJ0IC8vIEJyaWRnZTogbm90IGVub3VnaCBmZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NTYKICAgIC8vIGNoYWluSWQgPSBHbG9iYWxTdGF0ZTxCeXRlPigpOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDUgLy8gImNoYWluSWQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxODkKICAgIC8vIGNvbnN0IG1lc3NhZ2UgPSB0aGlzLmhhc2hNZXNzYWdlKGFtb3VudCwgcmVjaXBpZW50LCBzb3VyY2VDaGFpbklkLCB0aGlzLmNoYWluSWQudmFsdWUsIHJlY2VpdmVUb2tlbiwgbm9uY2UpOwogICAgZnJhbWVfZGlnIC02CiAgICBmcmFtZV9kaWcgLTUKICAgIGZyYW1lX2RpZyAtNAogICAgdW5jb3ZlciAzCiAgICBmcmFtZV9kaWcgLTMKICAgIGZyYW1lX2RpZyAtMgogICAgY2FsbHN1YiBoYXNoTWVzc2FnZQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjgwCiAgICAvLyBjb25zdCBoOiBieXRlcyA9IG9wLmtlY2NhazI1NihvcC5jb25jYXQobWVzc2FnZS5ieXRlcywgc2VuZGVyQWRkcmVzcykpOwogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjE5MAogICAgLy8gY29uc3QgbWVzc2FnZVdpdGhTZW5kZXIgPSBoYXNoV2l0aFNlbmRlckFkZHJlc3MobWVzc2FnZSwgVHhuLnNlbmRlci5ieXRlcyk7CiAgICB0eG4gU2VuZGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6ODAKICAgIC8vIGNvbnN0IGg6IGJ5dGVzID0gb3Aua2VjY2FrMjU2KG9wLmNvbmNhdChtZXNzYWdlLmJ5dGVzLCBzZW5kZXJBZGRyZXNzKSk7CiAgICBjb25jYXQKICAgIGtlY2NhazI1NgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjgzCiAgICAvLyBjb25zdCBmaXJzdDIgPSBvcC5zdWJzdHJpbmcobWVzc2FnZS5ieXRlcywgMCwgMik7CiAgICBzd2FwCiAgICBzdWJzdHJpbmcgMCAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6ODUKICAgIC8vIGNvbnN0IGxhc3QzMCA9IG9wLnN1YnN0cmluZyhoLCAyLCAzMik7CiAgICBzd2FwCiAgICBzdWJzdHJpbmcgMiAzMgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjg4CiAgICAvLyByZXR1cm4gbmV3IFN0YXRpY0J5dGVzPDMyPihvcC5jb25jYXQoZmlyc3QyLCBsYXN0MzApKTsKICAgIGNvbmNhdAogICAgZHVwCiAgICBjb3ZlciAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjU5CiAgICAvLyBwcm9jZXNzZWRNZXNzYWdlcyA9IEJveE1hcDxTdGF0aWNCeXRlczwzMj4sIFN0YXRpY0J5dGVzPih7IGtleVByZWZpeDogJ20nIH0pOwogICAgcHVzaGJ5dGVzICJtIgogICAgZGlnIDEKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxOTIKICAgIC8vIGFzc2VydCghdGhpcy5wcm9jZXNzZWRNZXNzYWdlcyhtZXNzYWdlV2l0aFNlbmRlcikuZXhpc3RzLCAnQnJpZGdlOiBtZXNzYWdlIHByb2Nlc3NlZCcpOwogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgICEKICAgIGFzc2VydCAvLyBCcmlkZ2U6IG1lc3NhZ2UgcHJvY2Vzc2VkCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjE5NAogICAgLy8gdGhpcy5wcm9jZXNzZWRNZXNzYWdlcyhtZXNzYWdlV2l0aFNlbmRlcikudmFsdWUgPSBuZXcgU3RhdGljQnl0ZXMoKTsKICAgIHB1c2hieXRlcyAweAogICAgYm94X3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxOTctMjAwCiAgICAvLyBhc3NlcnQoYWJpQ2FsbChNZXNzZW5nZXIucHJvdG90eXBlLnJlY2VpdmVkTWVzc2FnZXMsIHsKICAgIC8vICAgYXBwSWQ6IHRoaXMubWVzc2VuZ2VyLnZhbHVlLmlkLAogICAgLy8gICBhcmdzOiBbbWVzc2FnZVdpdGhTZW5kZXJdLAogICAgLy8gfSkucmV0dXJuVmFsdWUsICdCcmlkZ2U6IG5vIG1lc3NhZ2UnKTsKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NTcKICAgIC8vIG1lc3NlbmdlciA9IEdsb2JhbFN0YXRlPEFwcGxpY2F0aW9uPigpOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzIgLy8gIm1lc3NlbmdlciIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjE5Ny0yMDAKICAgIC8vIGFzc2VydChhYmlDYWxsKE1lc3Nlbmdlci5wcm90b3R5cGUucmVjZWl2ZWRNZXNzYWdlcywgewogICAgLy8gICBhcHBJZDogdGhpcy5tZXNzZW5nZXIudmFsdWUuaWQsCiAgICAvLyAgIGFyZ3M6IFttZXNzYWdlV2l0aFNlbmRlcl0sCiAgICAvLyB9KS5yZXR1cm5WYWx1ZSwgJ0JyaWRnZTogbm8gbWVzc2FnZScpOwogICAgcHVzaGJ5dGVzIDB4MzNlMTQ3YWEgLy8gbWV0aG9kICJyZWNlaXZlZE1lc3NhZ2VzKGJ5dGVbMzJdKWJvb2wiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaW50Y18yIC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBCeXRlcyBoYXMgdmFsaWQgcHJlZml4CiAgICBpbnRjXzAgLy8gMAogICAgZ2V0Yml0CiAgICBhc3NlcnQgLy8gQnJpZGdlOiBubyBtZXNzYWdlCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIwMgogICAgLy8gY29uc3QgdG9rZW5JZDogdWludDY0ID0gb3AuZXh0cmFjdFVpbnQ2NChyZWNlaXZlVG9rZW4uYnl0ZXMsIDI0KTsKICAgIGZyYW1lX2RpZyAtMwogICAgcHVzaGludCAyNCAvLyAyNAogICAgZXh0cmFjdF91aW50NjQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjA0LTIwOQogICAgLy8gY29uc3QgcmVjZWl2ZUFtb3VudCA9IHRoaXMucmVjZWl2ZUFuZFN3YXBGcm9tVlVzZCgKICAgIC8vICAgdG9rZW5JZCwKICAgIC8vICAgcmVjaXBpZW50QWRkcmVzcywKICAgIC8vICAgYW1vdW50LAogICAgLy8gICByZWNlaXZlQW1vdW50TWluLAogICAgLy8gKTsKICAgIGZyYW1lX2RpZyAtNQogICAgZnJhbWVfZGlnIC02CiAgICBmcmFtZV9kaWcgLTEKICAgIGNhbGxzdWIgcmVjZWl2ZUFuZFN3YXBGcm9tVlVzZAogICAgc3dhcAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyMTIKICAgIC8vIGNvbnN0IGV4dHJhR2FzOiB1aW50NjQgPSB2YWx1ZSAtIHN0b3JhZ2VGZWU7CiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzIwCiAgICAvLyByZXR1cm4gMTU3MDA7CiAgICBpbnRjIDQgLy8gMTU3MDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjEyCiAgICAvLyBjb25zdCBleHRyYUdhczogdWludDY0ID0gdmFsdWUgLSBzdG9yYWdlRmVlOwogICAgLQogICAgc3dhcAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozMjAKICAgIC8vIHJldHVybiAxNTcwMDsKICAgIGludGMgNCAvLyAxNTcwMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyMTMKICAgIC8vIGlmICh2YWx1ZSA+IHN0b3JhZ2VGZWUpIHsKICAgID4KICAgIGJ6IHJlY2VpdmVUb2tlbnNfYWZ0ZXJfaWZfZWxzZUA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIxNC0yMTcKICAgIC8vIHBheW1lbnQoewogICAgLy8gICBhbW91bnQ6IGV4dHJhR2FzLAogICAgLy8gICByZWNlaXZlcjogcmVjaXBpZW50QWRkcmVzcy5ieXRlcywKICAgIC8vIH0pLnN1Ym1pdCgpOwogICAgaXR4bl9iZWdpbgogICAgZnJhbWVfZGlnIC01CiAgICBpdHhuX2ZpZWxkIFJlY2VpdmVyCiAgICBmcmFtZV9kaWcgMgogICAgaXR4bl9maWVsZCBBbW91bnQKICAgIGludGNfMSAvLyAxCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CgpyZWNlaXZlVG9rZW5zX2FmdGVyX2lmX2Vsc2VANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjE5CiAgICAvLyBlbWl0PFRva2Vuc1JlY2VpdmVkPih7IHJlY2VpdmVBbW91bnQsIHJlY2lwaWVudDogcmVjaXBpZW50QWRkcmVzcywgbm9uY2UsIG1lc3NlbmdlcjogQUxMQlJJREdFX01FU1NFTkdFUiwgbWVzc2FnZTogbWVzc2FnZVdpdGhTZW5kZXIgfSk7CiAgICBmcmFtZV9kaWcgMQogICAgaXRvYgogICAgZnJhbWVfZGlnIC01CiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtMgogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjUyCiAgICAvLyBjb25zdCBBTExCUklER0VfTUVTU0VOR0VSID0gbmV3IEJ5dGUoMSk7CiAgICBieXRlYyAxMSAvLyAweDAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIxOQogICAgLy8gZW1pdDxUb2tlbnNSZWNlaXZlZD4oeyByZWNlaXZlQW1vdW50LCByZWNpcGllbnQ6IHJlY2lwaWVudEFkZHJlc3MsIG5vbmNlLCBtZXNzZW5nZXI6IEFMTEJSSURHRV9NRVNTRU5HRVIsIG1lc3NhZ2U6IG1lc3NhZ2VXaXRoU2VuZGVyIH0pOwogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgMAogICAgY29uY2F0CiAgICBwdXNoYnl0ZXMgMHg0NTgzNmFkNiAvLyBtZXRob2QgIlRva2Vuc1JlY2VpdmVkKHVpbnQ2NCxhZGRyZXNzLGJ5dGVbMzJdLGJ5dGUsYnl0ZVszMl0pIgogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6OkJyaWRnZS5yZWdpc3RlckJyaWRnZShjaGFpbklkOiBieXRlcywgYnJpZGdlQWRkcmVzczogYnl0ZXMpIC0+IHZvaWQ6CnJlZ2lzdGVyQnJpZGdlOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyMjItMjIzCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIC8vIHJlZ2lzdGVyQnJpZGdlKGNoYWluSWQ6IEJ5dGUsIGJyaWRnZUFkZHJlc3M6IFN0YXRpY0J5dGVzPDMyPik6IHZvaWQgewogICAgcHJvdG8gMiAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIyNAogICAgLy8gdGhpcy5vbmx5T3duZXIoKTsKICAgIGNhbGxzdWIgb25seU93bmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjYzCiAgICAvLyBvdGhlckJyaWRnZXMgPSBCb3hNYXA8Qnl0ZSwgU3RhdGljQnl0ZXM8MzI+Pih7IGtleVByZWZpeDogJ2InIH0pOwogICAgcHVzaGJ5dGVzICJiIgogICAgZnJhbWVfZGlnIC0yCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjI1CiAgICAvLyB0aGlzLm90aGVyQnJpZGdlcyhjaGFpbklkKS52YWx1ZSA9IGJyaWRnZUFkZHJlc3M7CiAgICBmcmFtZV9kaWcgLTEKICAgIGJveF9wdXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6OkJyaWRnZS5hZGRCcmlkZ2VUb2tlbihjaGFpbklkOiBieXRlcywgdG9rZW5BZGRyZXNzOiBieXRlcykgLT4gdm9pZDoKYWRkQnJpZGdlVG9rZW46CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIyOC0yMjkKICAgIC8vIEBhYmltZXRob2QoKQogICAgLy8gYWRkQnJpZGdlVG9rZW4oY2hhaW5JZDogQnl0ZSwgdG9rZW5BZGRyZXNzOiBTdGF0aWNCeXRlczwzMj4pOiB2b2lkIHsKICAgIHByb3RvIDIgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyMzAKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozMzMKICAgIC8vIHJldHVybiBjaGFpbklkLmJ5dGVzLmNvbmNhdCh0b2tlbi5ieXRlcyk7CiAgICBmcmFtZV9kaWcgLTIKICAgIGZyYW1lX2RpZyAtMQogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjY2CiAgICAvLyBvdGhlckJyaWRnZVRva2VucyA9IEJveE1hcDxieXRlcywgU3RhdGljQnl0ZXM+KHsga2V5UHJlZml4OiAndCcgfSk7CiAgICBieXRlYyA3IC8vICJ0IgogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIzMQogICAgLy8gdGhpcy5vdGhlckJyaWRnZVRva2Vucyh0aGlzLl9nZXRPdGhlckJyaWRnZVRva2Vuc0tleShjaGFpbklkLCB0b2tlbkFkZHJlc3MpKS52YWx1ZSA9IG5ldyBTdGF0aWNCeXRlcygpOwogICAgcHVzaGJ5dGVzIDB4CiAgICBib3hfcHV0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2UucmVtb3ZlQnJpZGdlVG9rZW4oY2hhaW5JZDogYnl0ZXMsIHRva2VuQWRkcmVzczogYnl0ZXMpIC0+IHZvaWQ6CnJlbW92ZUJyaWRnZVRva2VuOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyMzQtMjM1CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIC8vIHJlbW92ZUJyaWRnZVRva2VuKGNoYWluSWQ6IEJ5dGUsIHRva2VuQWRkcmVzczogU3RhdGljQnl0ZXM8MzI+KTogdm9pZCB7CiAgICBwcm90byAyIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjM2CiAgICAvLyB0aGlzLm9ubHlPd25lcigpOwogICAgY2FsbHN1YiBvbmx5T3duZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzMzCiAgICAvLyByZXR1cm4gY2hhaW5JZC5ieXRlcy5jb25jYXQodG9rZW4uYnl0ZXMpOwogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo2NgogICAgLy8gb3RoZXJCcmlkZ2VUb2tlbnMgPSBCb3hNYXA8Ynl0ZXMsIFN0YXRpY0J5dGVzPih7IGtleVByZWZpeDogJ3QnIH0pOwogICAgYnl0ZWMgNyAvLyAidCIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyMzcKICAgIC8vIHRoaXMub3RoZXJCcmlkZ2VUb2tlbnModGhpcy5fZ2V0T3RoZXJCcmlkZ2VUb2tlbnNLZXkoY2hhaW5JZCwgdG9rZW5BZGRyZXNzKSkuZGVsZXRlKCk7CiAgICBib3hfZGVsCiAgICBwb3AKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6OkJyaWRnZS53aXRoZHJhd0dhc1Rva2VucyhhbW91bnQ6IHVpbnQ2NCkgLT4gdm9pZDoKd2l0aGRyYXdHYXNUb2tlbnM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI0MC0yNDEKICAgIC8vIEBhYmltZXRob2QoKQogICAgLy8gd2l0aGRyYXdHYXNUb2tlbnMoYW1vdW50OiB1aW50NjQpOiB2b2lkIHsKICAgIHByb3RvIDEgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyNDIKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyNDMKICAgIC8vIHBheW1lbnQoeyBhbW91bnQ6IGFtb3VudCwgcmVjZWl2ZXI6IHRoaXMub3duZXIudmFsdWUuYnl0ZXMgfSkuc3VibWl0KCk7CiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czo2CiAgICAvLyBwcm90ZWN0ZWQgb3duZXIgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPigpOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzMgLy8gIm93bmVyIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGl0eG5fZmllbGQgUmVjZWl2ZXIKICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBBbW91bnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjQzCiAgICAvLyBwYXltZW50KHsgYW1vdW50OiBhbW91bnQsIHJlY2VpdmVyOiB0aGlzLm93bmVyLnZhbHVlLmJ5dGVzIH0pLnN1Ym1pdCgpOwogICAgaW50Y18xIC8vIDEKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6OkJyaWRnZS53aXRoZHJhd0JyaWRnaW5nRmVlSW5Ub2tlbnMoYXNzZXRJZDogdWludDY0KSAtPiB2b2lkOgp3aXRoZHJhd0JyaWRnaW5nRmVlSW5Ub2tlbnM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI0Ni0yNDcKICAgIC8vIEBhYmltZXRob2QoKQogICAgLy8gd2l0aGRyYXdCcmlkZ2luZ0ZlZUluVG9rZW5zKGFzc2V0SWQ6IHVpbnQ2NCk6IHZvaWQgewogICAgcHJvdG8gMSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI0OAogICAgLy8gdGhpcy5vbmx5T3duZXIoKTsKICAgIGNhbGxzdWIgb25seU93bmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI1MAogICAgLy8gY29uc3QgYXBwQWNjdDogQWNjb3VudCA9IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzOwogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyNTEKICAgIC8vIGNvbnN0IGJhbGFuY2UgPSBhc3NldC5iYWxhbmNlKGFwcEFjY3QpOwogICAgZnJhbWVfZGlnIC0xCiAgICBhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKICAgIHN3YXAKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBhc3NlcnQgLy8gYWNjb3VudCBvcHRlZCBpbnRvIGFzc2V0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI1MgogICAgLy8gaWYgKGJhbGFuY2UgPiBVaW50NjQoMCkpIHsKICAgIGJ6IHdpdGhkcmF3QnJpZGdpbmdGZWVJblRva2Vuc19hZnRlcl9pZl9lbHNlQDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjUzLTI1OAogICAgLy8gYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgIHNlbmRlcjogYXBwQWNjdCwKICAgIC8vICAgeGZlckFzc2V0OiBhc3NldCwKICAgIC8vICAgYXNzZXRBbW91bnQ6IGJhbGFuY2UsCiAgICAvLyAgIGFzc2V0UmVjZWl2ZXI6IHRoaXMub3duZXIudmFsdWUuYnl0ZXMKICAgIC8vIH0pLnN1Ym1pdCgpOwogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6NgogICAgLy8gcHJvdGVjdGVkIG93bmVyID0gR2xvYmFsU3RhdGU8QWRkcmVzcz4oKTsKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18zIC8vICJvd25lciIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIGZyYW1lX2RpZyAxCiAgICBpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CiAgICBmcmFtZV9kaWcgLTEKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICBmcmFtZV9kaWcgMAogICAgaXR4bl9maWVsZCBTZW5kZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjUzLTI1OAogICAgLy8gYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgIHNlbmRlcjogYXBwQWNjdCwKICAgIC8vICAgeGZlckFzc2V0OiBhc3NldCwKICAgIC8vICAgYXNzZXRBbW91bnQ6IGJhbGFuY2UsCiAgICAvLyAgIGFzc2V0UmVjZWl2ZXI6IHRoaXMub3duZXIudmFsdWUuYnl0ZXMKICAgIC8vIH0pLnN1Ym1pdCgpOwogICAgaW50Y18zIC8vIDQKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKCndpdGhkcmF3QnJpZGdpbmdGZWVJblRva2Vuc19hZnRlcl9pZl9lbHNlQDM6CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2UuZ2V0QnJpZGdpbmdDb3N0SW5Ub2tlbnMoZGVzdGluYXRpb25DaGFpbklkOiBieXRlcywgdG9rZW5JZDogdWludDY0KSAtPiB1aW50NjQ6CmdldEJyaWRnaW5nQ29zdEluVG9rZW5zOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyNjItMjY2CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIC8vIGdldEJyaWRnaW5nQ29zdEluVG9rZW5zKAogICAgLy8gICBkZXN0aW5hdGlvbkNoYWluSWQ6IEJ5dGUsCiAgICAvLyAgIHRva2VuSWQ6IHVpbnQ2NCwKICAgIC8vICk6IHVpbnQ2NCB7CiAgICBwcm90byAyIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjY3CiAgICAvLyBjb25zdCBicmlkZ2VHYXNBbW91bnQ6IHVpbnQ2NCA9IHRoaXMuZ2V0R2FzVXNhZ2UoZGVzdGluYXRpb25DaGFpbklkKTsKICAgIGZyYW1lX2RpZyAtMgogICAgY2FsbHN1YiBnZXRHYXNVc2FnZQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyNjgtMjcxCiAgICAvLyBjb25zdCBtZXNzZW5nZXJHYXNBbW91bnQ6IHVpbnQ2NCA9IGFiaUNhbGwoTWVzc2VuZ2VyLnByb3RvdHlwZS5nZXRHYXNVc2FnZSwgewogICAgLy8gICBhcHBJZDogdGhpcy5tZXNzZW5nZXIudmFsdWUuaWQsCiAgICAvLyAgIGFyZ3M6IFtkZXN0aW5hdGlvbkNoYWluSWRdLAogICAgLy8gfSkucmV0dXJuVmFsdWU7CiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjU3CiAgICAvLyBtZXNzZW5nZXIgPSBHbG9iYWxTdGF0ZTxBcHBsaWNhdGlvbj4oKTsKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18yIC8vICJtZXNzZW5nZXIiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyNjgtMjcxCiAgICAvLyBjb25zdCBtZXNzZW5nZXJHYXNBbW91bnQ6IHVpbnQ2NCA9IGFiaUNhbGwoTWVzc2VuZ2VyLnByb3RvdHlwZS5nZXRHYXNVc2FnZSwgewogICAgLy8gICBhcHBJZDogdGhpcy5tZXNzZW5nZXIudmFsdWUuaWQsCiAgICAvLyAgIGFyZ3M6IFtkZXN0aW5hdGlvbkNoYWluSWRdLAogICAgLy8gfSkucmV0dXJuVmFsdWU7CiAgICBieXRlYyAxNCAvLyBtZXRob2QgImdldEdhc1VzYWdlKGJ5dGUpdWludDY0IgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGZyYW1lX2RpZyAtMgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgaW50Y18yIC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBCeXRlcyBoYXMgdmFsaWQgcHJlZml4CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI3My0yNzYKICAgIC8vIHJldHVybiBhYmlDYWxsKEdhc09yYWNsZS5wcm90b3R5cGUuZ2V0VHJhbnNhY3Rpb25HYXNDb3N0SW5VU0QsIHsKICAgIC8vICAgYXBwSWQ6IHRoaXMuZ2FzT3JhY2xlLnZhbHVlLmlkLAogICAgLy8gICBhcmdzOiBbZGVzdGluYXRpb25DaGFpbklkLCBicmlkZ2VHYXNBbW91bnQgKyBtZXNzZW5nZXJHYXNBbW91bnRdLAogICAgLy8gfSkucmV0dXJuVmFsdWUgLyB0aGlzLmZyb21HYXNPcmFjbGVTY2FsaW5nRmFjdG9yKHRva2VuSWQpLnZhbHVlOwogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czo5CiAgICAvLyBnYXNPcmFjbGUgPSBHbG9iYWxTdGF0ZTxBcHBsaWNhdGlvbj4oKTsKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA0IC8vICJnYXNPcmFjbGUiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyNzUKICAgIC8vIGFyZ3M6IFtkZXN0aW5hdGlvbkNoYWluSWQsIGJyaWRnZUdhc0Ftb3VudCArIG1lc3Nlbmdlckdhc0Ftb3VudF0sCiAgICBjb3ZlciAyCiAgICArCiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI3My0yNzYKICAgIC8vIHJldHVybiBhYmlDYWxsKEdhc09yYWNsZS5wcm90b3R5cGUuZ2V0VHJhbnNhY3Rpb25HYXNDb3N0SW5VU0QsIHsKICAgIC8vICAgYXBwSWQ6IHRoaXMuZ2FzT3JhY2xlLnZhbHVlLmlkLAogICAgLy8gICBhcmdzOiBbZGVzdGluYXRpb25DaGFpbklkLCBicmlkZ2VHYXNBbW91bnQgKyBtZXNzZW5nZXJHYXNBbW91bnRdLAogICAgLy8gfSkucmV0dXJuVmFsdWUgLyB0aGlzLmZyb21HYXNPcmFjbGVTY2FsaW5nRmFjdG9yKHRva2VuSWQpLnZhbHVlOwogICAgcHVzaGJ5dGVzIDB4N2JmN2Q1MGMgLy8gbWV0aG9kICJnZXRUcmFuc2FjdGlvbkdhc0Nvc3RJblVTRChieXRlLHVpbnQ2NCl1aW50NjQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgZnJhbWVfZGlnIC0yCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgaW50Y18yIC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBCeXRlcyBoYXMgdmFsaWQgcHJlZml4CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI3NgogICAgLy8gfSkucmV0dXJuVmFsdWUgLyB0aGlzLmZyb21HYXNPcmFjbGVTY2FsaW5nRmFjdG9yKHRva2VuSWQpLnZhbHVlOwogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjMzCiAgICAvLyBwcm90ZWN0ZWQgZnJvbUdhc09yYWNsZVNjYWxpbmdGYWN0b3IgPSBCb3hNYXA8dWludDY0LCB1aW50NjQ+KHsga2V5UHJlZml4OiAnZScgfSk7CiAgICBwdXNoYnl0ZXMgImUiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6Mjc2CiAgICAvLyB9KS5yZXR1cm5WYWx1ZSAvIHRoaXMuZnJvbUdhc09yYWNsZVNjYWxpbmdGYWN0b3IodG9rZW5JZCkudmFsdWU7CiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBidG9pCiAgICBzd2FwCiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyNzMtMjc2CiAgICAvLyByZXR1cm4gYWJpQ2FsbChHYXNPcmFjbGUucHJvdG90eXBlLmdldFRyYW5zYWN0aW9uR2FzQ29zdEluVVNELCB7CiAgICAvLyAgIGFwcElkOiB0aGlzLmdhc09yYWNsZS52YWx1ZS5pZCwKICAgIC8vICAgYXJnczogW2Rlc3RpbmF0aW9uQ2hhaW5JZCwgYnJpZGdlR2FzQW1vdW50ICsgbWVzc2VuZ2VyR2FzQW1vdW50XSwKICAgIC8vIH0pLnJldHVyblZhbHVlIC8gdGhpcy5mcm9tR2FzT3JhY2xlU2NhbGluZ0ZhY3Rvcih0b2tlbklkKS52YWx1ZTsKICAgIC8KICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6OkJyaWRnZS5oYXNoTWVzc2FnZShhbW91bnQ6IHVpbnQ2NCwgcmVjaXBpZW50OiBieXRlcywgc291cmNlQ2hhaW5JZDogYnl0ZXMsIGRlc3RpbmF0aW9uQ2hhaW5JZDogYnl0ZXMsIHJlY2VpdmVUb2tlbjogYnl0ZXMsIG5vbmNlOiBieXRlcykgLT4gYnl0ZXM6Cmhhc2hNZXNzYWdlOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyNzktMjg3CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIC8vIGhhc2hNZXNzYWdlKAogICAgLy8gICBhbW91bnQ6IHVpbnQ2NCwKICAgIC8vICAgcmVjaXBpZW50OiBTdGF0aWNCeXRlczwzMj4sCiAgICAvLyAgIHNvdXJjZUNoYWluSWQ6IEJ5dGUsCiAgICAvLyAgIGRlc3RpbmF0aW9uQ2hhaW5JZDogQnl0ZSwKICAgIC8vICAgcmVjZWl2ZVRva2VuOiBTdGF0aWNCeXRlczwzMj4sCiAgICAvLyAgIG5vbmNlOiBTdGF0aWNCeXRlczwzMj4sCiAgICAvLyApOiBTdGF0aWNCeXRlczwzMj4gewogICAgcHJvdG8gNiAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI4OAogICAgLy8gY29uc3QgYW1vdW50MzIgPSBiemVybygyNCkuY29uY2F0KG9wLml0b2IoYW1vdW50KSk7CiAgICBwdXNoaW50IDI0IC8vIDI0CiAgICBiemVybwogICAgZnJhbWVfZGlnIC02CiAgICBpdG9iCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6Mjg5CiAgICAvLyBjb25zdCBzb3VyY2VDaGFpbklkMzIgPSBiemVybygzMSkuY29uY2F0KHNvdXJjZUNoYWluSWQuYnl0ZXMpOwogICAgcHVzaGludCAzMSAvLyAzMQogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtNAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI5MC0yOTEKICAgIC8vIGNvbnN0IHBhY2tlZCA9IGFtb3VudDMyCiAgICAvLyAgIC5jb25jYXQocmVjaXBpZW50LmJ5dGVzKQogICAgc3dhcAogICAgZnJhbWVfZGlnIC01CiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjkwLTI5MgogICAgLy8gY29uc3QgcGFja2VkID0gYW1vdW50MzIKICAgIC8vICAgLmNvbmNhdChyZWNpcGllbnQuYnl0ZXMpCiAgICAvLyAgIC5jb25jYXQoc291cmNlQ2hhaW5JZDMyKQogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI5MC0yOTMKICAgIC8vIGNvbnN0IHBhY2tlZCA9IGFtb3VudDMyCiAgICAvLyAgIC5jb25jYXQocmVjaXBpZW50LmJ5dGVzKQogICAgLy8gICAuY29uY2F0KHNvdXJjZUNoYWluSWQzMikKICAgIC8vICAgLmNvbmNhdChyZWNlaXZlVG9rZW4uYnl0ZXMpCiAgICBmcmFtZV9kaWcgLTIKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyOTAtMjk0CiAgICAvLyBjb25zdCBwYWNrZWQgPSBhbW91bnQzMgogICAgLy8gICAuY29uY2F0KHJlY2lwaWVudC5ieXRlcykKICAgIC8vICAgLmNvbmNhdChzb3VyY2VDaGFpbklkMzIpCiAgICAvLyAgIC5jb25jYXQocmVjZWl2ZVRva2VuLmJ5dGVzKQogICAgLy8gICAuY29uY2F0KG5vbmNlLmJ5dGVzKQogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NTIKICAgIC8vIGNvbnN0IEFMTEJSSURHRV9NRVNTRU5HRVIgPSBuZXcgQnl0ZSgxKTsKICAgIGJ5dGVjIDExIC8vIDB4MDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjkwLTI5NQogICAgLy8gY29uc3QgcGFja2VkID0gYW1vdW50MzIKICAgIC8vICAgLmNvbmNhdChyZWNpcGllbnQuYnl0ZXMpCiAgICAvLyAgIC5jb25jYXQoc291cmNlQ2hhaW5JZDMyKQogICAgLy8gICAuY29uY2F0KHJlY2VpdmVUb2tlbi5ieXRlcykKICAgIC8vICAgLmNvbmNhdChub25jZS5ieXRlcykKICAgIC8vICAgLmNvbmNhdChBTExCUklER0VfTUVTU0VOR0VSLmJ5dGVzKTsKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyOTcKICAgIC8vIGNvbnN0IGhhc2ggPSBvcC5rZWNjYWsyNTYocGFja2VkKTsgLy8gMzIgYnl0ZXMKICAgIGtlY2NhazI1NgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozMDAKICAgIC8vIGNvbnN0IHdpdGhTcmMgPSBvcC5zZXRCeXRlKGhhc2gsIDAsIG9wLmJ0b2koc291cmNlQ2hhaW5JZC5ieXRlcykpOwogICAgZnJhbWVfZGlnIC00CiAgICBidG9pCiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgc2V0Ynl0ZQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozMDEKICAgIC8vIGNvbnN0IHdpdGhEc3QgPSBvcC5zZXRCeXRlKHdpdGhTcmMsIDEsIG9wLmJ0b2koZGVzdGluYXRpb25DaGFpbklkLmJ5dGVzKSk7CiAgICBmcmFtZV9kaWcgLTMKICAgIGJ0b2kKICAgIGludGNfMSAvLyAxCiAgICBzd2FwCiAgICBzZXRieXRlCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMwMwogICAgLy8gcmV0dXJuIG5ldyBTdGF0aWNCeXRlczwzMj4od2l0aERzdCk7CiAgICBkdXAKICAgIGxlbgogICAgcHVzaGludCAzMiAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIHNpemUKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6OkJyaWRnZS5pc090aGVyQnJpZGdlVG9rZW5TdXBwb3J0ZWQoY2hhaW5JZDogYnl0ZXMsIHRva2VuOiBieXRlcykgLT4gdWludDY0Ogppc090aGVyQnJpZGdlVG9rZW5TdXBwb3J0ZWQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMwNi0zMDcKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgLy8gaXNPdGhlckJyaWRnZVRva2VuU3VwcG9ydGVkKGNoYWluSWQ6IEJ5dGUsIHRva2VuOiBTdGF0aWNCeXRlczwzMj4pOiBib29sZWFuIHsKICAgIHByb3RvIDIgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozMzMKICAgIC8vIHJldHVybiBjaGFpbklkLmJ5dGVzLmNvbmNhdCh0b2tlbi5ieXRlcyk7CiAgICBmcmFtZV9kaWcgLTIKICAgIGZyYW1lX2RpZyAtMQogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjY2CiAgICAvLyBvdGhlckJyaWRnZVRva2VucyA9IEJveE1hcDxieXRlcywgU3RhdGljQnl0ZXM+KHsga2V5UHJlZml4OiAndCcgfSk7CiAgICBieXRlYyA3IC8vICJ0IgogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMwOAogICAgLy8gcmV0dXJuIHRoaXMub3RoZXJCcmlkZ2VUb2tlbnModGhpcy5fZ2V0T3RoZXJCcmlkZ2VUb2tlbnNLZXkoY2hhaW5JZCwgdG9rZW4pKS5leGlzdHM7CiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6OkJyaWRnZS5nZXRUcmFuc2FjdGlvbkNvc3QoY2hhaW5JZDogYnl0ZXMpIC0+IHVpbnQ2NDoKZ2V0VHJhbnNhY3Rpb25Db3N0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozMTEtMzEyCiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIC8vIGdldFRyYW5zYWN0aW9uQ29zdChjaGFpbklkOiBCeXRlKTogdWludDY0IHsKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozMTMKICAgIC8vIHJldHVybiB0aGlzLmdldFRyYW5zYWN0aW9uUmVsYXllckNvc3QoY2hhaW5JZCkgKyB0aGlzLmdldFNlbmRUcmFuc2FjdGlvblN0b3JhZ2VDb3N0KCk7CiAgICBmcmFtZV9kaWcgLTEKICAgIGNhbGxzdWIgZ2V0VHJhbnNhY3Rpb25SZWxheWVyQ29zdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozMjcKICAgIC8vIHJldHVybiAxNTcwMDsKICAgIGludGMgNCAvLyAxNTcwMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozMTMKICAgIC8vIHJldHVybiB0aGlzLmdldFRyYW5zYWN0aW9uUmVsYXllckNvc3QoY2hhaW5JZCkgKyB0aGlzLmdldFNlbmRUcmFuc2FjdGlvblN0b3JhZ2VDb3N0KCk7CiAgICArCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjpSb3V0ZXIuc3dhcCh0b2tlbklkOiB1aW50NjQsIHJlY2VpdmVUb2tlbklkOiB1aW50NjQsIHJlY2lwaWVudDogYnl0ZXMsIHJlY2VpdmVBbW91bnRNaW46IHVpbnQ2NCkgLT4gdm9pZDoKc3dhcDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6NzgtODQKICAgIC8vIEBhYmltZXRob2QoKQogICAgLy8gc3dhcCgKICAgIC8vICAgdG9rZW5JZDogdWludDY0LAogICAgLy8gICByZWNlaXZlVG9rZW5JZDogdWludDY0LAogICAgLy8gICByZWNpcGllbnQ6IEFkZHJlc3MsCiAgICAvLyAgIHJlY2VpdmVBbW91bnRNaW46IHVpbnQ2NCwKICAgIC8vICk6IHZvaWQgewogICAgcHJvdG8gNCAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjUwCiAgICAvLyBjYW5Td2FwID0gR2xvYmFsU3RhdGU8Ym9vbGVhbj4oeyBpbml0aWFsVmFsdWU6IHRydWUgfSk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAiY2FuU3dhcCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjYxCiAgICAvLyBhc3NlcnQodGhpcy5jYW5Td2FwLnZhbHVlLCAnUm91dGVyOiBzd2FwIHByb2hpYml0ZWQnKTsKICAgIGFzc2VydCAvLyBSb3V0ZXI6IHN3YXAgcHJvaGliaXRlZAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo4NgogICAgLy8gY29uc3Qgc2VuZGVyID0gbmV3IEFkZHJlc3MoVHhuLnNlbmRlcik7CiAgICB0eG4gU2VuZGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjg3CiAgICAvLyBjb25zdCBhbW91bnQgPSBnZXRQcmV2QXNzZXRQYXkodG9rZW5JZCk7CiAgICBmcmFtZV9kaWcgLTQKICAgIGNhbGxzdWIgZ2V0UHJldkFzc2V0UGF5CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjg4CiAgICAvLyBjb25zdCB2VXNkQW1vdW50ID0gdGhpcy5zZW5kQW5kU3dhcFRvVlVzZCh0b2tlbklkLCBzZW5kZXIsIGFtb3VudCk7CiAgICBmcmFtZV9kaWcgLTQKICAgIGRpZyAyCiAgICBkaWcgMgogICAgY2FsbHN1YiBzZW5kQW5kU3dhcFRvVlVzZAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo4OQogICAgLy8gY29uc3QgcmVjZWl2ZWRBbW91bnQgPSB0aGlzLnJlY2VpdmVBbmRTd2FwRnJvbVZVc2QocmVjZWl2ZVRva2VuSWQsIHJlY2lwaWVudCwgdlVzZEFtb3VudCwgcmVjZWl2ZUFtb3VudE1pbik7CiAgICBmcmFtZV9kaWcgLTMKICAgIGZyYW1lX2RpZyAtMgogICAgdW5jb3ZlciAyCiAgICBmcmFtZV9kaWcgLTEKICAgIGNhbGxzdWIgcmVjZWl2ZUFuZFN3YXBGcm9tVlVzZAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo5MAogICAgLy8gZW1pdDxTd2FwcGVkPih7IHNlbmRlciwgcmVjaXBpZW50LCB0b2tlbklkLCByZWNlaXZlVG9rZW5JZCwgYW1vdW50LCByZWNlaXZlZEFtb3VudCB9KTsKICAgIGZyYW1lX2RpZyAtNAogICAgaXRvYgogICAgZnJhbWVfZGlnIC0zCiAgICBpdG9iCiAgICB1bmNvdmVyIDMKICAgIGl0b2IKICAgIHVuY292ZXIgMwogICAgaXRvYgogICAgdW5jb3ZlciA0CiAgICBmcmFtZV9kaWcgLTIKICAgIGNvbmNhdAogICAgdW5jb3ZlciA0CiAgICBjb25jYXQKICAgIHVuY292ZXIgMwogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBwdXNoYnl0ZXMgMHgxNTQwNDRiMyAvLyBtZXRob2QgIlN3YXBwZWQoYWRkcmVzcyxhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo6Um91dGVyLmFkZFBvb2wocG9vbElkOiB1aW50NjQsIHRva2VuSWQ6IHVpbnQ2NCkgLT4gdm9pZDoKYWRkUG9vbDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTAwLTEwMQogICAgLy8gQGFiaW1ldGhvZCgpCiAgICAvLyBhZGRQb29sKHBvb2xJZDogdWludDY0LCB0b2tlbklkOiB1aW50NjQpOiB2b2lkIHsKICAgIHByb3RvIDIgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxMDIKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxMDMKICAgIC8vIHRoaXMucG9vbHModG9rZW5JZCkudmFsdWUgPSBwb29sSWQ7CiAgICBmcmFtZV9kaWcgLTEKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MzEKICAgIC8vIHBvb2xzID0gQm94TWFwPHVpbnQ2NCwgdWludDY0Pih7IGtleVByZWZpeDogJ3AnIH0pOwogICAgYnl0ZWMgOCAvLyAicCIKICAgIGRpZyAxCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTAzCiAgICAvLyB0aGlzLnBvb2xzKHRva2VuSWQpLnZhbHVlID0gcG9vbElkOwogICAgZnJhbWVfZGlnIC0yCiAgICBpdG9iCiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjEwNQogICAgLy8gY29uc3QgdG9rZW5EZWNpbWFscyA9IGFzc2V0LmRlY2ltYWxzOwogICAgZnJhbWVfZGlnIC0xCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0RGVjaW1hbHMKICAgIGFzc2VydCAvLyBhc3NldCBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLW9yYWNsZS5jb250cmFjdC5hbGdvLnRzOjgKICAgIC8vIGV4cG9ydCBjb25zdCBPUkFDTEVfUFJJQ0VfUFJFQ0lTSU9OOiB1aW50NjQgPSA5OwogICAgcHVzaGludCA5IC8vIDkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTA2CiAgICAvLyB0aGlzLmJyaWRnaW5nRmVlQ29udmVyc2lvblNjYWxpbmdGYWN0b3IodG9rZW5JZCkudmFsdWUgPSAxMCAqKiAoT1JBQ0xFX1BSSUNFX1BSRUNJU0lPTiAtIHRva2VuRGVjaW1hbHMgKyBDSEFJTl9QUkVDSVNJT04pOwogICAgc3dhcAogICAgLQogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy1vcmFjbGUuY29udHJhY3QuYWxnby50czo3CiAgICAvLyBleHBvcnQgY29uc3QgQ0hBSU5fUFJFQ0lTSU9OOiB1aW50NjQgPSA2OwogICAgaW50Y18yIC8vIDYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTA2CiAgICAvLyB0aGlzLmJyaWRnaW5nRmVlQ29udmVyc2lvblNjYWxpbmdGYWN0b3IodG9rZW5JZCkudmFsdWUgPSAxMCAqKiAoT1JBQ0xFX1BSSUNFX1BSRUNJU0lPTiAtIHRva2VuRGVjaW1hbHMgKyBDSEFJTl9QUkVDSVNJT04pOwogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czozNgogICAgLy8gcHJvdGVjdGVkIGJyaWRnaW5nRmVlQ29udmVyc2lvblNjYWxpbmdGYWN0b3IgPSBCb3hNYXA8dWludDY0LCB1aW50NjQ+KHsga2V5UHJlZml4OiAnZicgfSk7CiAgICBwdXNoYnl0ZXMgImYiCiAgICBkaWcgMwogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjEwNgogICAgLy8gdGhpcy5icmlkZ2luZ0ZlZUNvbnZlcnNpb25TY2FsaW5nRmFjdG9yKHRva2VuSWQpLnZhbHVlID0gMTAgKiogKE9SQUNMRV9QUklDRV9QUkVDSVNJT04gLSB0b2tlbkRlY2ltYWxzICsgQ0hBSU5fUFJFQ0lTSU9OKTsKICAgIHB1c2hpbnQgMTAgLy8gMTAKICAgIHVuY292ZXIgMgogICAgZXhwCiAgICBpdG9iCiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjMzCiAgICAvLyBwcm90ZWN0ZWQgZnJvbUdhc09yYWNsZVNjYWxpbmdGYWN0b3IgPSBCb3hNYXA8dWludDY0LCB1aW50NjQ+KHsga2V5UHJlZml4OiAnZScgfSk7CiAgICBwdXNoYnl0ZXMgImUiCiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxMDcKICAgIC8vIHRoaXMuZnJvbUdhc09yYWNsZVNjYWxpbmdGYWN0b3IodG9rZW5JZCkudmFsdWUgPSAxMCAqKiAoT1JBQ0xFX1BSSUNFX1BSRUNJU0lPTiAtIHRva2VuRGVjaW1hbHMpOwogICAgcHVzaGludCAxMCAvLyAxMAogICAgdW5jb3ZlciAyCiAgICBleHAKICAgIGl0b2IKICAgIGJveF9wdXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6OlJvdXRlci5yZW1vdmVQb29sKHRva2VuSWQ6IHVpbnQ2NCkgLT4gdm9pZDoKcmVtb3ZlUG9vbDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTEwLTExMQogICAgLy8gQGFiaW1ldGhvZCgpCiAgICAvLyByZW1vdmVQb29sKHRva2VuSWQ6IHVpbnQ2NCk6IHZvaWQgewogICAgcHJvdG8gMSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjExMgogICAgLy8gdGhpcy5vbmx5T3duZXIoKTsKICAgIGNhbGxzdWIgb25seU93bmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjExMwogICAgLy8gdGhpcy5wb29scyh0b2tlbklkKS5kZWxldGUoKTsKICAgIGZyYW1lX2RpZyAtMQogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czozMQogICAgLy8gcG9vbHMgPSBCb3hNYXA8dWludDY0LCB1aW50NjQ+KHsga2V5UHJlZml4OiAncCcgfSk7CiAgICBieXRlYyA4IC8vICJwIgogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjExMwogICAgLy8gdGhpcy5wb29scyh0b2tlbklkKS5kZWxldGUoKTsKICAgIGJveF9kZWwKICAgIHBvcAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo6Um91dGVyLnN0b3BTd2FwKCkgLT4gdm9pZDoKc3RvcFN3YXA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjY4CiAgICAvLyBhc3NlcnQob3AuVHhuLnNlbmRlci5ieXRlcyA9PT0gdGhpcy5zdG9wQXV0aG9yaXR5LnZhbHVlLmJ5dGVzLCAnUm91dGVyOiBpcyBub3Qgc3RvcEF1dGhvcml0eScpOwogICAgdHhuIFNlbmRlcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czozOQogICAgLy8gcHJpdmF0ZSBzdG9wQXV0aG9yaXR5ID0gR2xvYmFsU3RhdGU8QWRkcmVzcz4oKTsvLyBjYW4gcmVzdHJpY3QgZGVwb3NpdCBvciB3aXRoZHJhdyBvcGVyYXRpb25zCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMTAgLy8gInN0b3BBdXRob3JpdHkiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo2OAogICAgLy8gYXNzZXJ0KG9wLlR4bi5zZW5kZXIuYnl0ZXMgPT09IHRoaXMuc3RvcEF1dGhvcml0eS52YWx1ZS5ieXRlcywgJ1JvdXRlcjogaXMgbm90IHN0b3BBdXRob3JpdHknKTsKICAgID09CiAgICBhc3NlcnQgLy8gUm91dGVyOiBpcyBub3Qgc3RvcEF1dGhvcml0eQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo1MAogICAgLy8gY2FuU3dhcCA9IEdsb2JhbFN0YXRlPGJvb2xlYW4+KHsgaW5pdGlhbFZhbHVlOiB0cnVlIH0pOwogICAgYnl0ZWNfMSAvLyAiY2FuU3dhcCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTIyCiAgICAvLyB0aGlzLmNhblN3YXAudmFsdWUgPSBmYWxzZTsKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo6Um91dGVyLnN0YXJ0U3dhcCgpIC0+IHZvaWQ6CnN0YXJ0U3dhcDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTMwCiAgICAvLyB0aGlzLm9ubHlPd25lcigpOwogICAgY2FsbHN1YiBvbmx5T3duZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6NTAKICAgIC8vIGNhblN3YXAgPSBHbG9iYWxTdGF0ZTxib29sZWFuPih7IGluaXRpYWxWYWx1ZTogdHJ1ZSB9KTsKICAgIGJ5dGVjXzEgLy8gImNhblN3YXAiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjEzMQogICAgLy8gdGhpcy5jYW5Td2FwLnZhbHVlID0gdHJ1ZTsKICAgIGludGNfMSAvLyAxCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo6Um91dGVyLnNldFN0b3BBdXRob3JpdHkoc3RvcEF1dGhvcml0eTogYnl0ZXMpIC0+IHZvaWQ6CnNldFN0b3BBdXRob3JpdHk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjEzNy0xMzgKICAgIC8vIEBhYmltZXRob2QoKQogICAgLy8gc2V0U3RvcEF1dGhvcml0eShzdG9wQXV0aG9yaXR5OiBBZGRyZXNzKTogdm9pZCB7CiAgICBwcm90byAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTM5CiAgICAvLyB0aGlzLm9ubHlPd25lcigpOwogICAgY2FsbHN1YiBvbmx5T3duZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MzkKICAgIC8vIHByaXZhdGUgc3RvcEF1dGhvcml0eSA9IEdsb2JhbFN0YXRlPEFkZHJlc3M+KCk7Ly8gY2FuIHJlc3RyaWN0IGRlcG9zaXQgb3Igd2l0aGRyYXcgb3BlcmF0aW9ucwogICAgYnl0ZWMgMTAgLy8gInN0b3BBdXRob3JpdHkiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE0MAogICAgLy8gdGhpcy5zdG9wQXV0aG9yaXR5LnZhbHVlID0gc3RvcEF1dGhvcml0eTsKICAgIGZyYW1lX2RpZyAtMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6OlJvdXRlci5zZXRSZWJhbGFuY2VyKHJlYmFsYW5jZXI6IGJ5dGVzKSAtPiB2b2lkOgpzZXRSZWJhbGFuY2VyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNDYtMTQ3CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIC8vIHNldFJlYmFsYW5jZXIocmViYWxhbmNlcjogQWRkcmVzcyk6IHZvaWQgewogICAgcHJvdG8gMSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE0OAogICAgLy8gdGhpcy5vbmx5T3duZXIoKTsKICAgIGNhbGxzdWIgb25seU93bmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjQ5CiAgICAvLyBwcml2YXRlIHJlYmFsYW5jZXIgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPih7IGluaXRpYWxWYWx1ZTogbmV3IEFkZHJlc3MoYnplcm8oMCkpIH0pOy8vIGNhbiByZXN0cmljdCBkZXBvc2l0IG9yIHdpdGhkcmF3IG9wZXJhdGlvbnMKICAgIGJ5dGVjIDYgLy8gInJlYmFsYW5jZXIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE0OQogICAgLy8gdGhpcy5yZWJhbGFuY2VyLnZhbHVlID0gcmViYWxhbmNlcjsKICAgIGZyYW1lX2RpZyAtMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6OlJvdXRlci5yZWNlaXZlQW5kU3dhcEZyb21WVXNkKHRva2VuSWQ6IHVpbnQ2NCwgcmVjaXBpZW50OiBieXRlcywgdlVzZEFtb3VudDogdWludDY0LCByZWNlaXZlQW1vdW50TWluOiB1aW50NjQpIC0+IHVpbnQ2NDoKcmVjZWl2ZUFuZFN3YXBGcm9tVlVzZDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTUyLTE1NwogICAgLy8gcHJvdGVjdGVkIHJlY2VpdmVBbmRTd2FwRnJvbVZVc2QoCiAgICAvLyAgIHRva2VuSWQ6IHVpbnQ2NCwKICAgIC8vICAgcmVjaXBpZW50OiBBZGRyZXNzLAogICAgLy8gICB2VXNkQW1vdW50OiB1aW50NjQsCiAgICAvLyAgIHJlY2VpdmVBbW91bnRNaW46IHVpbnQ2NCwKICAgIC8vICk6IHVpbnQ2NCB7CiAgICBwcm90byA0IDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTU4CiAgICAvLyBhc3NlcnQodGhpcy5wb29scyh0b2tlbklkKS5leGlzdHMsICdSb3V0ZXI6IG5vIHJlY2VpdmUgcG9vbCcpOwogICAgZnJhbWVfZGlnIC00CiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjMxCiAgICAvLyBwb29scyA9IEJveE1hcDx1aW50NjQsIHVpbnQ2ND4oeyBrZXlQcmVmaXg6ICdwJyB9KTsKICAgIGJ5dGVjIDggLy8gInAiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTU4CiAgICAvLyBhc3NlcnQodGhpcy5wb29scyh0b2tlbklkKS5leGlzdHMsICdSb3V0ZXI6IG5vIHJlY2VpdmUgcG9vbCcpOwogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBSb3V0ZXI6IG5vIHJlY2VpdmUgcG9vbAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNTkKICAgIC8vIGNvbnN0IHBvb2xJZCA9IHRoaXMucG9vbHModG9rZW5JZCkudmFsdWU7CiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBidG9pCiAgICBzd2FwCiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNjAtMTYzCiAgICAvLyByZXR1cm4gYWJpQ2FsbChQb29sLnByb3RvdHlwZS5zd2FwRnJvbVZVc2QsIHsKICAgIC8vICAgYXBwSWQ6IHBvb2xJZCwKICAgIC8vICAgYXJnczogW3JlY2lwaWVudCwgdlVzZEFtb3VudCwgcmVjZWl2ZUFtb3VudE1pbiwgcmVjaXBpZW50ID09PSB0aGlzLnJlYmFsYW5jZXIudmFsdWVdLAogICAgLy8gfSkucmV0dXJuVmFsdWU7CiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE2MgogICAgLy8gYXJnczogW3JlY2lwaWVudCwgdlVzZEFtb3VudCwgcmVjZWl2ZUFtb3VudE1pbiwgcmVjaXBpZW50ID09PSB0aGlzLnJlYmFsYW5jZXIudmFsdWVdLAogICAgZnJhbWVfZGlnIC0yCiAgICBpdG9iCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6NDkKICAgIC8vIHByaXZhdGUgcmViYWxhbmNlciA9IEdsb2JhbFN0YXRlPEFkZHJlc3M+KHsgaW5pdGlhbFZhbHVlOiBuZXcgQWRkcmVzcyhiemVybygwKSkgfSk7Ly8gY2FuIHJlc3RyaWN0IGRlcG9zaXQgb3Igd2l0aGRyYXcgb3BlcmF0aW9ucwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDYgLy8gInJlYmFsYW5jZXIiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNjIKICAgIC8vIGFyZ3M6IFtyZWNpcGllbnQsIHZVc2RBbW91bnQsIHJlY2VpdmVBbW91bnRNaW4sIHJlY2lwaWVudCA9PT0gdGhpcy5yZWJhbGFuY2VyLnZhbHVlXSwKICAgIGZyYW1lX2RpZyAtMwogICAgPT0KICAgIGJ5dGVjIDkgLy8gMHgwMAogICAgaW50Y18wIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE2MC0xNjMKICAgIC8vIHJldHVybiBhYmlDYWxsKFBvb2wucHJvdG90eXBlLnN3YXBGcm9tVlVzZCwgewogICAgLy8gICBhcHBJZDogcG9vbElkLAogICAgLy8gICBhcmdzOiBbcmVjaXBpZW50LCB2VXNkQW1vdW50LCByZWNlaXZlQW1vdW50TWluLCByZWNpcGllbnQgPT09IHRoaXMucmViYWxhbmNlci52YWx1ZV0sCiAgICAvLyB9KS5yZXR1cm5WYWx1ZTsKICAgIHB1c2hieXRlcyAweDBkMWI0YzA2IC8vIG1ldGhvZCAic3dhcEZyb21WVXNkKGFkZHJlc3MsdWludDY0LHVpbnQ2NCxib29sKXVpbnQ2NCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBmcmFtZV9kaWcgLTMKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICB1bmNvdmVyIDIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBzd2FwCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgaW50Y18yIC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBCeXRlcyBoYXMgdmFsaWQgcHJlZml4CiAgICBidG9pCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjpSb3V0ZXIuc2VuZEFuZFN3YXBUb1ZVc2QodG9rZW5JZDogdWludDY0LCB1c2VyOiBieXRlcywgYW1vdW50OiB1aW50NjQpIC0+IHVpbnQ2NDoKc2VuZEFuZFN3YXBUb1ZVc2Q6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE2NwogICAgLy8gcHJvdGVjdGVkIHNlbmRBbmRTd2FwVG9WVXNkKHRva2VuSWQ6IHVpbnQ2NCwgdXNlcjogQWRkcmVzcywgYW1vdW50OiB1aW50NjQpOiB1aW50NjQgewogICAgcHJvdG8gMyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE2OAogICAgLy8gYXNzZXJ0KHRoaXMucG9vbHModG9rZW5JZCkuZXhpc3RzLCAnUm91dGVyOiBubyBwb29sJyk7CiAgICBmcmFtZV9kaWcgLTMKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MzEKICAgIC8vIHBvb2xzID0gQm94TWFwPHVpbnQ2NCwgdWludDY0Pih7IGtleVByZWZpeDogJ3AnIH0pOwogICAgYnl0ZWMgOCAvLyAicCIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNjgKICAgIC8vIGFzc2VydCh0aGlzLnBvb2xzKHRva2VuSWQpLmV4aXN0cywgJ1JvdXRlcjogbm8gcG9vbCcpOwogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBSb3V0ZXI6IG5vIHBvb2wKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTY5CiAgICAvLyBjb25zdCBwb29sSWQgPSB0aGlzLnBvb2xzKHRva2VuSWQpLnZhbHVlOwogICAgYm94X2dldAogICAgc3dhcAogICAgYnRvaQogICAgc3dhcAogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTcxLTE3NgogICAgLy8gaXR4bi5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgeGZlckFzc2V0OiB0b2tlbklkLAogICAgLy8gICBhc3NldEFtb3VudDogYW1vdW50LAogICAgLy8gICBhc3NldFJlY2VpdmVyOiBBcHBsaWNhdGlvbihwb29sSWQpLmFkZHJlc3MsCiAgICAvLyB9KQogICAgLy8gICAuc3VibWl0KCk7CiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE3NAogICAgLy8gYXNzZXRSZWNlaXZlcjogQXBwbGljYXRpb24ocG9vbElkKS5hZGRyZXNzLAogICAgZHVwCiAgICBhcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCiAgICBhc3NlcnQgLy8gYXBwbGljYXRpb24gZXhpc3RzCiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgZnJhbWVfZGlnIC0zCiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNzEtMTc1CiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICB4ZmVyQXNzZXQ6IHRva2VuSWQsCiAgICAvLyAgIGFzc2V0QW1vdW50OiBhbW91bnQsCiAgICAvLyAgIGFzc2V0UmVjZWl2ZXI6IEFwcGxpY2F0aW9uKHBvb2xJZCkuYWRkcmVzcywKICAgIC8vIH0pCiAgICBpbnRjXzMgLy8gNAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE3MS0xNzYKICAgIC8vIGl0eG4uYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgIHhmZXJBc3NldDogdG9rZW5JZCwKICAgIC8vICAgYXNzZXRBbW91bnQ6IGFtb3VudCwKICAgIC8vICAgYXNzZXRSZWNlaXZlcjogQXBwbGljYXRpb24ocG9vbElkKS5hZGRyZXNzLAogICAgLy8gfSkKICAgIC8vICAgLnN1Ym1pdCgpOwogICAgaXR4bl9zdWJtaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTc4LTE4MQogICAgLy8gcmV0dXJuIGFiaUNhbGwoUG9vbC5wcm90b3R5cGUuc3dhcFRvVlVzZCwgewogICAgLy8gICBhcHBJZDogcG9vbElkLAogICAgLy8gICBhcmdzOiBbdXNlciwgYW1vdW50LCB1c2VyID09PSB0aGlzLnJlYmFsYW5jZXIudmFsdWVdLAogICAgLy8gfSkucmV0dXJuVmFsdWU7CiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE4MAogICAgLy8gYXJnczogW3VzZXIsIGFtb3VudCwgdXNlciA9PT0gdGhpcy5yZWJhbGFuY2VyLnZhbHVlXSwKICAgIGZyYW1lX2RpZyAtMQogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo0OQogICAgLy8gcHJpdmF0ZSByZWJhbGFuY2VyID0gR2xvYmFsU3RhdGU8QWRkcmVzcz4oeyBpbml0aWFsVmFsdWU6IG5ldyBBZGRyZXNzKGJ6ZXJvKDApKSB9KTsvLyBjYW4gcmVzdHJpY3QgZGVwb3NpdCBvciB3aXRoZHJhdyBvcGVyYXRpb25zCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNiAvLyAicmViYWxhbmNlciIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE4MAogICAgLy8gYXJnczogW3VzZXIsIGFtb3VudCwgdXNlciA9PT0gdGhpcy5yZWJhbGFuY2VyLnZhbHVlXSwKICAgIGZyYW1lX2RpZyAtMgogICAgPT0KICAgIGJ5dGVjIDkgLy8gMHgwMAogICAgaW50Y18wIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE3OC0xODEKICAgIC8vIHJldHVybiBhYmlDYWxsKFBvb2wucHJvdG90eXBlLnN3YXBUb1ZVc2QsIHsKICAgIC8vICAgYXBwSWQ6IHBvb2xJZCwKICAgIC8vICAgYXJnczogW3VzZXIsIGFtb3VudCwgdXNlciA9PT0gdGhpcy5yZWJhbGFuY2VyLnZhbHVlXSwKICAgIC8vIH0pLnJldHVyblZhbHVlOwogICAgcHVzaGJ5dGVzIDB4ZDk3OGFkMTQgLy8gbWV0aG9kICJzd2FwVG9WVXNkKGFkZHJlc3MsdWludDY0LGJvb2wpdWludDY0IgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGZyYW1lX2RpZyAtMgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIHN3YXAKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBpbnRjXzIgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEJ5dGVzIGhhcyB2YWxpZCBwcmVmaXgKICAgIGJ0b2kKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6Okdhc1VzYWdlLmdldEdhc1VzYWdlKGNoYWluSWQ6IGJ5dGVzKSAtPiB1aW50NjQ6CmdldEdhc1VzYWdlOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czoxNy0xOAogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICAvLyBnZXRHYXNVc2FnZShjaGFpbklkOiBCeXRlKTogdWludDY0IHsKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czoxMAogICAgLy8gZ2FzVXNhZ2UgPSBCb3hNYXA8Qnl0ZSwgdWludDY0Pih7IGtleVByZWZpeDogJ2cnIH0pOwogICAgYnl0ZWMgMTIgLy8gImciCiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czoxOQogICAgLy8gcmV0dXJuIHRoaXMuZ2FzVXNhZ2UoY2hhaW5JZCkudmFsdWU7CiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBidG9pCiAgICBzd2FwCiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czo6R2FzVXNhZ2Uuc2V0R2FzVXNhZ2UoY2hhaW5JZDogYnl0ZXMsIGdhc0Ftb3VudDogdWludDY0KSAtPiB2b2lkOgpzZXRHYXNVc2FnZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MjItMjMKICAgIC8vIEBhYmltZXRob2QoKQogICAgLy8gc2V0R2FzVXNhZ2UoY2hhaW5JZDogQnl0ZSwgZ2FzQW1vdW50OiB1aW50NjQpOiB2b2lkIHsKICAgIHByb3RvIDIgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czoyNAogICAgLy8gdGhpcy5vbmx5T3duZXIoKTsKICAgIGNhbGxzdWIgb25seU93bmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjEwCiAgICAvLyBnYXNVc2FnZSA9IEJveE1hcDxCeXRlLCB1aW50NjQ+KHsga2V5UHJlZml4OiAnZycgfSk7CiAgICBieXRlYyAxMiAvLyAiZyIKICAgIGZyYW1lX2RpZyAtMgogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjI1CiAgICAvLyB0aGlzLmdhc1VzYWdlKGNoYWluSWQpLnZhbHVlID0gZ2FzQW1vdW50OwogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICBib3hfcHV0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjpHYXNVc2FnZS5zZXRHYXNPcmFjbGUoZ2FzT3JhY2xlOiB1aW50NjQpIC0+IHZvaWQ6CnNldEdhc09yYWNsZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MjgtMjkKICAgIC8vIEBhYmltZXRob2QoKQogICAgLy8gc2V0R2FzT3JhY2xlKGdhc09yYWNsZTogQXBwbGljYXRpb24pOiB2b2lkIHsKICAgIHByb3RvIDEgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czozMAogICAgLy8gdGhpcy5vbmx5T3duZXIoKTsKICAgIGNhbGxzdWIgb25seU93bmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjkKICAgIC8vIGdhc09yYWNsZSA9IEdsb2JhbFN0YXRlPEFwcGxpY2F0aW9uPigpOwogICAgYnl0ZWMgNCAvLyAiZ2FzT3JhY2xlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czozMQogICAgLy8gdGhpcy5nYXNPcmFjbGUudmFsdWUgPSBnYXNPcmFjbGU7CiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjpHYXNVc2FnZS5nZXRUcmFuc2FjdGlvblJlbGF5ZXJDb3N0KGNoYWluSWQ6IGJ5dGVzKSAtPiB1aW50NjQ6CmdldFRyYW5zYWN0aW9uUmVsYXllckNvc3Q6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjM0LTM1CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIC8vIGdldFRyYW5zYWN0aW9uUmVsYXllckNvc3QoY2hhaW5JZDogQnl0ZSk6IHVpbnQ2NCB7CiAgICBwcm90byAxIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MTAKICAgIC8vIGdhc1VzYWdlID0gQm94TWFwPEJ5dGUsIHVpbnQ2ND4oeyBrZXlQcmVmaXg6ICdnJyB9KTsKICAgIGJ5dGVjIDEyIC8vICJnIgogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MzYKICAgIC8vIGNvbnN0IGdhc0Ftb3VudCA9IHRoaXMuZ2FzVXNhZ2UoY2hhaW5JZCkudmFsdWU7CiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBidG9pCiAgICBzd2FwCiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czozNy00MAogICAgLy8gcmV0dXJuIGFiaUNhbGwoR2FzT3JhY2xlLnByb3RvdHlwZS5nZXRUcmFuc2FjdGlvbkdhc0Nvc3RJbk5hdGl2ZVRva2VuLCB7CiAgICAvLyAgIGFwcElkOiB0aGlzLmdhc09yYWNsZS52YWx1ZS5pZCwKICAgIC8vICAgYXJnczogW2NoYWluSWQsIGdhc0Ftb3VudF0sCiAgICAvLyB9KS5yZXR1cm5WYWx1ZTsKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6OQogICAgLy8gZ2FzT3JhY2xlID0gR2xvYmFsU3RhdGU8QXBwbGljYXRpb24+KCk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNCAvLyAiZ2FzT3JhY2xlIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MzkKICAgIC8vIGFyZ3M6IFtjaGFpbklkLCBnYXNBbW91bnRdLAogICAgc3dhcAogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czozNy00MAogICAgLy8gcmV0dXJuIGFiaUNhbGwoR2FzT3JhY2xlLnByb3RvdHlwZS5nZXRUcmFuc2FjdGlvbkdhc0Nvc3RJbk5hdGl2ZVRva2VuLCB7CiAgICAvLyAgIGFwcElkOiB0aGlzLmdhc09yYWNsZS52YWx1ZS5pZCwKICAgIC8vICAgYXJnczogW2NoYWluSWQsIGdhc0Ftb3VudF0sCiAgICAvLyB9KS5yZXR1cm5WYWx1ZTsKICAgIHB1c2hieXRlcyAweGMyYWZjY2QxIC8vIG1ldGhvZCAiZ2V0VHJhbnNhY3Rpb25HYXNDb3N0SW5OYXRpdmVUb2tlbihieXRlLHVpbnQ2NCl1aW50NjQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgaW50Y18yIC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBCeXRlcyBoYXMgdmFsaWQgcHJlZml4CiAgICBidG9pCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czo6T3duYWJsZS5vbmx5T3duZXIoKSAtPiB2b2lkOgpvbmx5T3duZXI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czoxMwogICAgLy8gYXNzZXJ0KG9wLlR4bi5zZW5kZXIuYnl0ZXMgPT09IHRoaXMub3duZXIudmFsdWUuYnl0ZXMsICdPbmx5IG93bmVyJyk7CiAgICB0eG4gU2VuZGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czo2CiAgICAvLyBwcm90ZWN0ZWQgb3duZXIgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPigpOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzMgLy8gIm93bmVyIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjEzCiAgICAvLyBhc3NlcnQob3AuVHhuLnNlbmRlci5ieXRlcyA9PT0gdGhpcy5vd25lci52YWx1ZS5ieXRlcywgJ09ubHkgb3duZXInKTsKICAgID09CiAgICBhc3NlcnQgLy8gT25seSBvd25lcgogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6Ok93bmFibGUudHJhbnNmZXJPd25lcnNoaXAobmV3T3duZXI6IGJ5dGVzKSAtPiB2b2lkOgp0cmFuc2Zlck93bmVyc2hpcDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjE2LTE3CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB0cmFuc2Zlck93bmVyc2hpcChuZXdPd25lcjogQWRkcmVzcyk6IHZvaWQgewogICAgcHJvdG8gMSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czoxOAogICAgLy8gdGhpcy5vbmx5T3duZXIoKTsKICAgIGNhbGxzdWIgb25seU93bmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czo2CiAgICAvLyBwcm90ZWN0ZWQgb3duZXIgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPigpOwogICAgYnl0ZWNfMyAvLyAib3duZXIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czoxOQogICAgLy8gdGhpcy5vd25lci52YWx1ZSA9IG5ld093bmVyOwogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCg==",clear:"I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg=="},byteCode:{approval:"CiAFAAEGBNR6JhAEFR98dQdjYW5Td2FwCW1lc3NlbmdlcgVvd25lcglnYXNPcmFjbGUHY2hhaW5JZApyZWJhbGFuY2VyAXQBcAEADXN0b3BBdXRob3JpdHkBAQFnBENBeqME90dbggwVH3x1AAAAAAAAPVQxGEAACSKvJwZMZykjZzEbQQDJgg0E//goQQRl9wVzBOg6h6sELJ9oRwQxkZsoBE66ByEExhftcwRXUxVgBGOAgngEBlB8agT1+W6zBEsGLKAEw83ZKicNggkEB9+EKQSAxccPBPqxEaIE7xX4VQRrHuIjBBhwpJIENVcyTQQEsWHxBNKzV+snDoIEBAylrnoEOXuRiwTL/G0CBOF7r7Q2GgCOHAIFAfUB7AHMAawBmgGIAXYBZgFWAT4BGwD/AOsA3wDTALgApACUAIgAfABtAF4ASgA3ACUAEQACIkMxGRREMRhENhoBiAgOI0MxGRREMRhENhoBiAe7FihMULAjQzEZFEQxGEQ2GgEXwDKIB5gjQzEZFEQxGEQ2GgE2GgIXiAd1I0MxGRREMRhENhoBiAdYFihMULAjQzEZFEQxGEQ2GgGIBn0jQzEZFEQxGEQ2GgGIBmIjQzEZFEQxGESIBk8jQzEZFEQxGESIBjYjQzEZFEQxGEQ2GgEXiAYWI0MxGRREMRhENhoBFzYaAheIBckjQzEZFEQxGEQ2GgEXNhoCFzYaAzYaBBeIBWUjQzEZFEQxGEQnD7AjQzEZFEQxGEQnD7AjQzEZFEQxGEQ2GgGIBTIWKExQsCNDMRkURDEYRDYaATYaAogFCycJIk8CVChMULAjQzEZFEQxGEQ2GgEXNhoCNhoDNhoENhoFNhoGiASvKExQsCNDMRkURDEYRDYaATYaAheIBC4WKExQsCNDMRkURDEYRDYaAReIA+kjQzEZFEQxGEQ2GgEXiAPAI0MxGRREMRhENhoBNhoCiAOcI0MxGRREMRhENhoBNhoCiAN3I0MxGRREMRhENhoBNhoCiANVI0MxGRREMRhENhoBFzYaAjYaAzYaBDYaBTYaBheIAnsjQzEZFEQxGEQ2GgEXNhoCNhoDNhoENhoFNhoGF4gBFyNDMRkURDEYRCNDMRkURDEYRDYaAReIAMkjQzEZFEQxGBRENhoBNhoCNhoDF8AyNhoEF8AyiACPI0OKAQExFkQxFiMJSTgQJRJESTgUMgoSREk4EYv/EkRJOCAyAxJESTgVMgMSRDgSiYoBAYAASTEWi/8MQQAEIowAiTEWi/8JSYwBOBBJjAAjE0EABCKMAImLACMSRIsBOAcyChNBAAQijACJiwE4IDIDE0EABCKMAImLATgJMgMTQQAEIowAiYsBOAiMAImKBAAri/xnJwSL/2cnCov8ZycFi/1nKov+Z4mKAQCIBUKxMgqyFCKyEov/shElshAisgGzgBhCcmlkZ2U6IG9wdC1pbiBjb21wbGV0ZWSwiYoGACIpZUREi/qI/xZJi/8NRIEgr4v7EhREgQKI/zOL/0AA1SKLAQiLAIv/CYv6MQBPAogEEyInBWVEi/wTRIv8i/1QJwdMUL1FAUQiJwVlREsBi/tPAov8i/2L/ogChov8iALEgAFzSwJQSb1FARREgAC/SwFXAQGxIiplRCcNshqyGLIaJLIQIrIBs7Q+SVcEAExXAAQoEkQXIiplRHIIRCIqZUSxTLIHSwGyCCOyECKyAbaABKMkmYmyGk8DshqyGCSyECKyAbNLARZLARZQgARLVUGbTFCwCE8CDkQWi/tQi/xQi/1Qi/5QJwtQgAQin7rsTFCwiYv6FoABZkxQvkwXTESL/wuxIicEZUQiJwVlRIAEHbcM3bIashqyGCSyECKyAbO0PklXBABMVwAEKBJEFwpJFoAE4H9rNkxQsEL+4YoGACIpZUREgAFii/xQvUUBRCOI/fhJIQQPRCInBWVEi/qL+4v8TwOL/Yv+iAFzSTEAUAJMUQACTFECIFBJTgKAAW1LAVBJvUUBFESAAL+xIiplRIAEM+FHqrIashiyGiSyECKyAbO0PklXBABMVwAEKBJEIlNEi/2BGFuL+4v6i/+IAipMSSEECUwhBA1BABCxi/uyB4sCsggjshAisgGziwEWi/tQi/5QJwtQiwBQgARFg2rWTFCwiYoCAIgDD4ABYov+UIv/v4mKAgCIAv+L/ov/UCcHTFCAAL+JigIAiALsi/6L/1AnB0xQvEiJigEAiALasSIrZUSyB4v/sggjshAisgGziYoBAIgCwTIKSYv/cABMSU8CREEAGrEiK2VEshSLAbISi/+yEYsAsgAlshAisgGziYoCAYv+iAIqsSIqZUQnDrIai/6yGrIYJLIQIrIBs7Q+SVcEAExXAAQoEkQXsSInBGVETgIIFoAEe/fVDLIai/6yGrIashgkshAisgGztD5JVwQATFcABCgSRBeL/xaAAWVMUL5MF0xEComKBgGBGK+L+hZQgR+vi/xQTIv7UExQi/5Qi/9QJwtQAov8FyJMVov9FyNMVkkVgSASRImKAgGL/ov/UCcHTFC9RQGJigEBi/+IAachBAiJigQAIillREQxAIv8iPvfi/xLAksCiAD8i/2L/k8Ci/+IAJuL/BaL/RZPAxZPAxZPBIv+UE8EUE8DUE8CUExQgAQVQESzTFCwiYoCAIgBj4v/FicISwFQi/4Wv4v/cQFEgQlMCUkkCIABZksDUIEKTwKUFr+AAWVPAlCBCk8ClBa/iYoBAIgBVov/FicITFC8SIkxACInCmVEEkQpImeJiAE8KSNniYoBAIgBMicKi/9niYoBAIgBJicGi/9niYoEAYv8FicITFBJvUUBRL5MF0xEsYv+Fov/FiInBmVEi/0SJwkiTwJUgAQNG0wGshqL/bIaTwKyGkyyGrIashgkshAisgGztD5JVwQATFcABCgSRBeJigMBi/0WJwhMUEm9RQFEvkwXTESxSXIIRLIUi/+yEov9shElshAisgGzsYv/FiInBmVEi/4SJwkiTwJUgATZeK0UshqL/rIaTLIashqyGCSyECKyAbO0PklXBABMVwAEKBJEF4mKAQEnDIv/UL5MF0xEiYoCAIgAUScMi/5Qi/8Wv4mKAQCIAEEnBIv/Z4mKAQEnDIv/UL5MF0xEsSInBGVETBaABMKvzNGyGov/shqyGrIYJLIQIrIBs7Q+SVcEAExXAAQoEkQXiTEAIitlRBJEiYoBAIj/8SuL/2eJ",clear:"CoEBQw=="},events:[{name:"BridgingFeeFromTokens",args:[{type:"uint64",name:"fee"}]},{name:"ReceiveFee",args:[{type:"uint64",name:"bridgeTransactionCost"},{type:"uint64",name:"messageTransactionCost"}]},{name:"TokensSent",args:[{type:"uint64",name:"amount"},{type:"byte[32]",name:"recipient"},{type:"byte",name:"destinationChainId"},{type:"byte[32]",name:"receiveToken"},{type:"byte[32]",name:"nonce"},{type:"byte",name:"messenger"}]},{name:"TokensReceived",args:[{type:"uint64",name:"receiveAmount"},{type:"address",name:"recipient"},{type:"byte[32]",name:"nonce"},{type:"byte",name:"messenger"},{type:"byte[32]",name:"message"}]},{name:"Swapped",args:[{type:"address",name:"sender"},{type:"address",name:"recipient"},{type:"uint64",name:"tokenId"},{type:"uint64",name:"receiveTokenId"},{type:"uint64",name:"amount"},{type:"uint64",name:"receivedAmount"}]}],templateVariables:{}};var v=class a{static get create(){return{_resolveByMethod(n){switch(n.method){case"createApplication":case"createApplication(address,byte,application,application)void":return a.create.createApplication(n)}throw new Error("Unknown ' + verb + ' method")},createApplication(n){return{...n,method:"createApplication(address,byte,application,application)void",args:Array.isArray(n.args)?n.args:[n.args.owner,n.args.chainId,n.args.messenger,n.args.gasOracle]}}}}static optInAsset(n){return{...n,method:"optInAsset(uint64)void",args:Array.isArray(n.args)?n.args:[n.args.assetId]}}static noop(n){return{...n,method:"noop()void",args:Array.isArray(n.args)?n.args:[]}}static swapAndBridge(n){return{...n,method:"swapAndBridge(uint64,byte[32],byte,byte[32],byte[32],uint64)void",args:Array.isArray(n.args)?n.args:[n.args.tokenId,n.args.recipient,n.args.destinationChainId,n.args.receiveToken,n.args.nonce,n.args.feeTokenAmount]}}static receiveTokens(n){return{...n,method:"receiveTokens(uint64,byte[32],byte,byte[32],byte[32],uint64)void",args:Array.isArray(n.args)?n.args:[n.args.amount,n.args.recipient,n.args.sourceChainId,n.args.receiveToken,n.args.nonce,n.args.receiveAmountMin]}}static registerBridge(n){return{...n,method:"registerBridge(byte,byte[32])void",args:Array.isArray(n.args)?n.args:[n.args.chainId,n.args.bridgeAddress]}}static addBridgeToken(n){return{...n,method:"addBridgeToken(byte,byte[32])void",args:Array.isArray(n.args)?n.args:[n.args.chainId,n.args.tokenAddress]}}static removeBridgeToken(n){return{...n,method:"removeBridgeToken(byte,byte[32])void",args:Array.isArray(n.args)?n.args:[n.args.chainId,n.args.tokenAddress]}}static withdrawGasTokens(n){return{...n,method:"withdrawGasTokens(uint64)void",args:Array.isArray(n.args)?n.args:[n.args.amount]}}static withdrawBridgingFeeInTokens(n){return{...n,method:"withdrawBridgingFeeInTokens(uint64)void",args:Array.isArray(n.args)?n.args:[n.args.assetId]}}static getBridgingCostInTokens(n){return{...n,method:"getBridgingCostInTokens(byte,uint64)uint64",args:Array.isArray(n.args)?n.args:[n.args.destinationChainId,n.args.tokenId]}}static hashMessage(n){return{...n,method:"hashMessage(uint64,byte[32],byte,byte,byte[32],byte[32])byte[32]",args:Array.isArray(n.args)?n.args:[n.args.amount,n.args.recipient,n.args.sourceChainId,n.args.destinationChainId,n.args.receiveToken,n.args.nonce]}}static isOtherBridgeTokenSupported(n){return{...n,method:"isOtherBridgeTokenSupported(byte,byte[32])bool",args:Array.isArray(n.args)?n.args:[n.args.chainId,n.args.token]}}static getTransactionCost(n){return{...n,method:"getTransactionCost(byte)uint64",args:Array.isArray(n.args)?n.args:[n.args.chainId]}}static getReceiveTokensCost(n){return{...n,method:"getReceiveTokensCost()uint64",args:Array.isArray(n.args)?n.args:[]}}static getSendTransactionStorageCost(n){return{...n,method:"getSendTransactionStorageCost()uint64",args:Array.isArray(n.args)?n.args:[]}}static swap(n){return{...n,method:"swap(uint64,uint64,address,uint64)void",args:Array.isArray(n.args)?n.args:[n.args.tokenId,n.args.receiveTokenId,n.args.recipient,n.args.receiveAmountMin]}}static addPool(n){return{...n,method:"addPool(uint64,uint64)void",args:Array.isArray(n.args)?n.args:[n.args.poolId,n.args.tokenId]}}static removePool(n){return{...n,method:"removePool(uint64)void",args:Array.isArray(n.args)?n.args:[n.args.tokenId]}}static stopSwap(n){return{...n,method:"stopSwap()void",args:Array.isArray(n.args)?n.args:[]}}static startSwap(n){return{...n,method:"startSwap()void",args:Array.isArray(n.args)?n.args:[]}}static setStopAuthority(n){return{...n,method:"setStopAuthority(address)void",args:Array.isArray(n.args)?n.args:[n.args.stopAuthority]}}static setRebalancer(n){return{...n,method:"setRebalancer(address)void",args:Array.isArray(n.args)?n.args:[n.args.rebalancer]}}static getGasUsage(n){return{...n,method:"getGasUsage(byte)uint64",args:Array.isArray(n.args)?n.args:[n.args.chainId]}}static setGasUsage(n){return{...n,method:"setGasUsage(byte,uint64)void",args:Array.isArray(n.args)?n.args:[n.args.chainId,n.args.gasAmount]}}static setGasOracle(n){return{...n,method:"setGasOracle(application)void",args:Array.isArray(n.args)?n.args:[n.args.gasOracle]}}static getTransactionRelayerCost(n){return{...n,method:"getTransactionRelayerCost(byte)uint64",args:Array.isArray(n.args)?n.args:[n.args.chainId]}}static transferOwnership(n){return{...n,method:"transferOwnership(address)void",args:Array.isArray(n.args)?n.args:[n.args.newOwner]}}};var aa=class a{appClient;constructor(n){this.appClient=n instanceof li.AppClient?n:new li.AppClient({...n,appSpec:ia})}decodeReturnValue(n,i){return i!==void 0?(0,os.getArc56ReturnValue)(i,this.appClient.getABIMethod(n),ia.structs):void 0}static async fromCreatorAndName(n){return new a(await li.AppClient.fromCreatorAndName({...n,appSpec:ia}))}static async fromNetwork(n){return new a(await li.AppClient.fromNetwork({...n,appSpec:ia}))}get appId(){return this.appClient.appId}get appAddress(){return this.appClient.appAddress}get appName(){return this.appClient.appName}get appSpec(){return this.appClient.appSpec}get algorand(){return this.appClient.algorand}params={clearState:n=>this.appClient.params.bare.clearState(n),optInAsset:n=>this.appClient.params.call(v.optInAsset(n)),noop:(n={args:[]})=>this.appClient.params.call(v.noop(n)),swapAndBridge:n=>this.appClient.params.call(v.swapAndBridge(n)),receiveTokens:n=>this.appClient.params.call(v.receiveTokens(n)),registerBridge:n=>this.appClient.params.call(v.registerBridge(n)),addBridgeToken:n=>this.appClient.params.call(v.addBridgeToken(n)),removeBridgeToken:n=>this.appClient.params.call(v.removeBridgeToken(n)),withdrawGasTokens:n=>this.appClient.params.call(v.withdrawGasTokens(n)),withdrawBridgingFeeInTokens:n=>this.appClient.params.call(v.withdrawBridgingFeeInTokens(n)),getBridgingCostInTokens:n=>this.appClient.params.call(v.getBridgingCostInTokens(n)),hashMessage:n=>this.appClient.params.call(v.hashMessage(n)),isOtherBridgeTokenSupported:n=>this.appClient.params.call(v.isOtherBridgeTokenSupported(n)),getTransactionCost:n=>this.appClient.params.call(v.getTransactionCost(n)),getReceiveTokensCost:(n={args:[]})=>this.appClient.params.call(v.getReceiveTokensCost(n)),getSendTransactionStorageCost:(n={args:[]})=>this.appClient.params.call(v.getSendTransactionStorageCost(n)),swap:n=>this.appClient.params.call(v.swap(n)),addPool:n=>this.appClient.params.call(v.addPool(n)),removePool:n=>this.appClient.params.call(v.removePool(n)),stopSwap:(n={args:[]})=>this.appClient.params.call(v.stopSwap(n)),startSwap:(n={args:[]})=>this.appClient.params.call(v.startSwap(n)),setStopAuthority:n=>this.appClient.params.call(v.setStopAuthority(n)),setRebalancer:n=>this.appClient.params.call(v.setRebalancer(n)),getGasUsage:n=>this.appClient.params.call(v.getGasUsage(n)),setGasUsage:n=>this.appClient.params.call(v.setGasUsage(n)),setGasOracle:n=>this.appClient.params.call(v.setGasOracle(n)),getTransactionRelayerCost:n=>this.appClient.params.call(v.getTransactionRelayerCost(n)),transferOwnership:n=>this.appClient.params.call(v.transferOwnership(n))};createTransaction={clearState:n=>this.appClient.createTransaction.bare.clearState(n),optInAsset:n=>this.appClient.createTransaction.call(v.optInAsset(n)),noop:(n={args:[]})=>this.appClient.createTransaction.call(v.noop(n)),swapAndBridge:n=>this.appClient.createTransaction.call(v.swapAndBridge(n)),receiveTokens:n=>this.appClient.createTransaction.call(v.receiveTokens(n)),registerBridge:n=>this.appClient.createTransaction.call(v.registerBridge(n)),addBridgeToken:n=>this.appClient.createTransaction.call(v.addBridgeToken(n)),removeBridgeToken:n=>this.appClient.createTransaction.call(v.removeBridgeToken(n)),withdrawGasTokens:n=>this.appClient.createTransaction.call(v.withdrawGasTokens(n)),withdrawBridgingFeeInTokens:n=>this.appClient.createTransaction.call(v.withdrawBridgingFeeInTokens(n)),getBridgingCostInTokens:n=>this.appClient.createTransaction.call(v.getBridgingCostInTokens(n)),hashMessage:n=>this.appClient.createTransaction.call(v.hashMessage(n)),isOtherBridgeTokenSupported:n=>this.appClient.createTransaction.call(v.isOtherBridgeTokenSupported(n)),getTransactionCost:n=>this.appClient.createTransaction.call(v.getTransactionCost(n)),getReceiveTokensCost:(n={args:[]})=>this.appClient.createTransaction.call(v.getReceiveTokensCost(n)),getSendTransactionStorageCost:(n={args:[]})=>this.appClient.createTransaction.call(v.getSendTransactionStorageCost(n)),swap:n=>this.appClient.createTransaction.call(v.swap(n)),addPool:n=>this.appClient.createTransaction.call(v.addPool(n)),removePool:n=>this.appClient.createTransaction.call(v.removePool(n)),stopSwap:(n={args:[]})=>this.appClient.createTransaction.call(v.stopSwap(n)),startSwap:(n={args:[]})=>this.appClient.createTransaction.call(v.startSwap(n)),setStopAuthority:n=>this.appClient.createTransaction.call(v.setStopAuthority(n)),setRebalancer:n=>this.appClient.createTransaction.call(v.setRebalancer(n)),getGasUsage:n=>this.appClient.createTransaction.call(v.getGasUsage(n)),setGasUsage:n=>this.appClient.createTransaction.call(v.setGasUsage(n)),setGasOracle:n=>this.appClient.createTransaction.call(v.setGasOracle(n)),getTransactionRelayerCost:n=>this.appClient.createTransaction.call(v.getTransactionRelayerCost(n)),transferOwnership:n=>this.appClient.createTransaction.call(v.transferOwnership(n))};send={clearState:n=>this.appClient.send.bare.clearState(n),optInAsset:async n=>{let i=await this.appClient.send.call(v.optInAsset(n));return{...i,return:i.return}},noop:async(n={args:[]})=>{let i=await this.appClient.send.call(v.noop(n));return{...i,return:i.return}},swapAndBridge:async n=>{let i=await this.appClient.send.call(v.swapAndBridge(n));return{...i,return:i.return}},receiveTokens:async n=>{let i=await this.appClient.send.call(v.receiveTokens(n));return{...i,return:i.return}},registerBridge:async n=>{let i=await this.appClient.send.call(v.registerBridge(n));return{...i,return:i.return}},addBridgeToken:async n=>{let i=await this.appClient.send.call(v.addBridgeToken(n));return{...i,return:i.return}},removeBridgeToken:async n=>{let i=await this.appClient.send.call(v.removeBridgeToken(n));return{...i,return:i.return}},withdrawGasTokens:async n=>{let i=await this.appClient.send.call(v.withdrawGasTokens(n));return{...i,return:i.return}},withdrawBridgingFeeInTokens:async n=>{let i=await this.appClient.send.call(v.withdrawBridgingFeeInTokens(n));return{...i,return:i.return}},getBridgingCostInTokens:async n=>{let i=await this.appClient.send.call(v.getBridgingCostInTokens(n));return{...i,return:i.return}},hashMessage:async n=>{let i=await this.appClient.send.call(v.hashMessage(n));return{...i,return:i.return}},isOtherBridgeTokenSupported:async n=>{let i=await this.appClient.send.call(v.isOtherBridgeTokenSupported(n));return{...i,return:i.return}},getTransactionCost:async n=>{let i=await this.appClient.send.call(v.getTransactionCost(n));return{...i,return:i.return}},getReceiveTokensCost:async(n={args:[]})=>{let i=await this.appClient.send.call(v.getReceiveTokensCost(n));return{...i,return:i.return}},getSendTransactionStorageCost:async(n={args:[]})=>{let i=await this.appClient.send.call(v.getSendTransactionStorageCost(n));return{...i,return:i.return}},swap:async n=>{let i=await this.appClient.send.call(v.swap(n));return{...i,return:i.return}},addPool:async n=>{let i=await this.appClient.send.call(v.addPool(n));return{...i,return:i.return}},removePool:async n=>{let i=await this.appClient.send.call(v.removePool(n));return{...i,return:i.return}},stopSwap:async(n={args:[]})=>{let i=await this.appClient.send.call(v.stopSwap(n));return{...i,return:i.return}},startSwap:async(n={args:[]})=>{let i=await this.appClient.send.call(v.startSwap(n));return{...i,return:i.return}},setStopAuthority:async n=>{let i=await this.appClient.send.call(v.setStopAuthority(n));return{...i,return:i.return}},setRebalancer:async n=>{let i=await this.appClient.send.call(v.setRebalancer(n));return{...i,return:i.return}},getGasUsage:async n=>{let i=await this.appClient.send.call(v.getGasUsage(n));return{...i,return:i.return}},setGasUsage:async n=>{let i=await this.appClient.send.call(v.setGasUsage(n));return{...i,return:i.return}},setGasOracle:async n=>{let i=await this.appClient.send.call(v.setGasOracle(n));return{...i,return:i.return}},getTransactionRelayerCost:async n=>{let i=await this.appClient.send.call(v.getTransactionRelayerCost(n));return{...i,return:i.return}},transferOwnership:async n=>{let i=await this.appClient.send.call(v.transferOwnership(n));return{...i,return:i.return}}};clone(n){return new a(this.appClient.clone(n))}async getBridgingCostInTokens(n){return(await this.appClient.send.call(v.getBridgingCostInTokens(n))).return}async hashMessage(n){return(await this.appClient.send.call(v.hashMessage(n))).return}async isOtherBridgeTokenSupported(n){return(await this.appClient.send.call(v.isOtherBridgeTokenSupported(n))).return}async getTransactionCost(n){return(await this.appClient.send.call(v.getTransactionCost(n))).return}async getReceiveTokensCost(n={args:[]}){return(await this.appClient.send.call(v.getReceiveTokensCost(n))).return}async getSendTransactionStorageCost(n={args:[]}){return(await this.appClient.send.call(v.getSendTransactionStorageCost(n))).return}async getGasUsage(n){return(await this.appClient.send.call(v.getGasUsage(n))).return}async getTransactionRelayerCost(n){return(await this.appClient.send.call(v.getTransactionRelayerCost(n))).return}state={global:{getAll:async()=>{let n=await this.appClient.state.global.getAll();return{chainId:n.chainId,messenger:n.messenger,stopAuthority:n.stopAuthority,rebalancer:n.rebalancer,canSwap:n.canSwap,gasOracle:n.gasOracle,owner:n.owner}},chainId:async()=>await this.appClient.state.global.getValue("chainId"),messenger:async()=>await this.appClient.state.global.getValue("messenger"),stopAuthority:async()=>await this.appClient.state.global.getValue("stopAuthority"),rebalancer:async()=>await this.appClient.state.global.getValue("rebalancer"),canSwap:async()=>await this.appClient.state.global.getValue("canSwap"),gasOracle:async()=>await this.appClient.state.global.getValue("gasOracle"),owner:async()=>await this.appClient.state.global.getValue("owner")},box:{getAll:async()=>{let n=await this.appClient.state.box.getAll();return{}},processedMessages:{getMap:async()=>await this.appClient.state.box.getMap("processedMessages"),value:async n=>await this.appClient.state.box.getMapValue("processedMessages",n)},sentMessages:{getMap:async()=>await this.appClient.state.box.getMap("sentMessages"),value:async n=>await this.appClient.state.box.getMapValue("sentMessages",n)},otherBridges:{getMap:async()=>await this.appClient.state.box.getMap("otherBridges"),value:async n=>await this.appClient.state.box.getMapValue("otherBridges",n)},otherBridgeTokens:{getMap:async()=>await this.appClient.state.box.getMap("otherBridgeTokens"),value:async n=>await this.appClient.state.box.getMapValue("otherBridgeTokens",n)},pools:{getMap:async()=>await this.appClient.state.box.getMap("pools"),value:async n=>await this.appClient.state.box.getMapValue("pools",n)},fromGasOracleScalingFactor:{getMap:async()=>await this.appClient.state.box.getMap("fromGasOracleScalingFactor"),value:async n=>await this.appClient.state.box.getMapValue("fromGasOracleScalingFactor",n)},bridgingFeeConversionScalingFactor:{getMap:async()=>await this.appClient.state.box.getMap("bridgingFeeConversionScalingFactor"),value:async n=>await this.appClient.state.box.getMapValue("bridgingFeeConversionScalingFactor",n)},gasUsage:{getMap:async()=>await this.appClient.state.box.getMap("gasUsage"),value:async n=>await this.appClient.state.box.getMapValue("gasUsage",n)}}};newGroup(){let n=this,i=this.algorand.newGroup(),o=Promise.resolve(),r=[];return{optInAsset(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.optInAsset(s))),r.push(void 0),this},noop(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.noop(s))),r.push(void 0),this},swapAndBridge(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.swapAndBridge(s))),r.push(void 0),this},receiveTokens(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.receiveTokens(s))),r.push(void 0),this},registerBridge(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.registerBridge(s))),r.push(void 0),this},addBridgeToken(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.addBridgeToken(s))),r.push(void 0),this},removeBridgeToken(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.removeBridgeToken(s))),r.push(void 0),this},withdrawGasTokens(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.withdrawGasTokens(s))),r.push(void 0),this},withdrawBridgingFeeInTokens(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.withdrawBridgingFeeInTokens(s))),r.push(void 0),this},getBridgingCostInTokens(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.getBridgingCostInTokens(s))),r.push(d=>n.decodeReturnValue("getBridgingCostInTokens(byte,uint64)uint64",d)),this},hashMessage(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.hashMessage(s))),r.push(d=>n.decodeReturnValue("hashMessage(uint64,byte[32],byte,byte,byte[32],byte[32])byte[32]",d)),this},isOtherBridgeTokenSupported(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.isOtherBridgeTokenSupported(s))),r.push(d=>n.decodeReturnValue("isOtherBridgeTokenSupported(byte,byte[32])bool",d)),this},getTransactionCost(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.getTransactionCost(s))),r.push(d=>n.decodeReturnValue("getTransactionCost(byte)uint64",d)),this},getReceiveTokensCost(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.getReceiveTokensCost(s))),r.push(d=>n.decodeReturnValue("getReceiveTokensCost()uint64",d)),this},getSendTransactionStorageCost(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.getSendTransactionStorageCost(s))),r.push(d=>n.decodeReturnValue("getSendTransactionStorageCost()uint64",d)),this},swap(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.swap(s))),r.push(void 0),this},addPool(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.addPool(s))),r.push(void 0),this},removePool(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.removePool(s))),r.push(void 0),this},stopSwap(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.stopSwap(s))),r.push(void 0),this},startSwap(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.startSwap(s))),r.push(void 0),this},setStopAuthority(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.setStopAuthority(s))),r.push(void 0),this},setRebalancer(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.setRebalancer(s))),r.push(void 0),this},getGasUsage(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.getGasUsage(s))),r.push(d=>n.decodeReturnValue("getGasUsage(byte)uint64",d)),this},setGasUsage(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.setGasUsage(s))),r.push(void 0),this},setGasOracle(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.setGasOracle(s))),r.push(void 0),this},getTransactionRelayerCost(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.getTransactionRelayerCost(s))),r.push(d=>n.decodeReturnValue("getTransactionRelayerCost(byte)uint64",d)),this},transferOwnership(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.transferOwnership(s))),r.push(void 0),this},clearState(s){return o=o.then(()=>i.addAppCall(n.params.clearState(s))),this},addTransaction(s,d){return o=o.then(()=>i.addTransaction(s,d)),this},async composer(){return await o,i},async simulate(s){await o;let d=await(s?i.simulate(s):i.simulate());return{...d,returns:d.returns?.map((c,A)=>r[A]!==void 0?r[A](c):c.returnValue)}},async send(s){await o;let d=await i.send(s);return{...d,returns:d.returns?.map((c,A)=>r[A]!==void 0?r[A](c):c.returnValue)}}}}};var rs=require("@algorandfoundation/algokit-utils"),Ot=ge(require("algosdk")),kc=new Ot.ABIMethod({name:"noop",args:[],returns:{type:"void"}});function Gn(a){let{composer:n,appId:i,sender:o,signer:r,count:s}=a;for(let d=0;d<s;d++)n.addAppCallMethodCall({appId:i,method:kc,args:[],sender:o,signer:r,note:`noop_${d}`})}function on(a){return(a*1e3).microAlgos()}async function Bo(a,n,i){let o=new Ot.AtomicTransactionComposer,r=(0,Ot.makeBasicAccountTransactionSigner)({addr:n,sk:new Uint8Array(64)});a.forEach(c=>{o.addTransaction({txn:c,signer:r})});let d=(await(0,rs.populateAppCallResources)(o,i)).buildGroup().map(c=>c.txn);return Qt(...d)}function Qt(...a){return a.map(i=>Ot.default.encodeUnsignedTransaction(i)).map(i=>Buffer.from(i).toString("hex"))}async function oa(a,n,i){typeof a=="string"&&(a=BigInt(a));let r=(await i.account.getInformation(n)).appsLocalState;return r?r.find(({id:d})=>d===a)!==void 0:!1}var Ge=class{};var ms=require("@solana/web3.js"),ps=require("@stellar/stellar-sdk"),Cs=require("algosdk"),Se=require("big.js"),fo=ge(require("randombytes")),Wo=require("tronweb");var N=require("big.js"),ra=ge(require("bn.js"));function Yo(a,n){return(0,N.Big)(100).minus((0,N.Big)(100).times(n).div(a)).toNumber()}function rn(a,n){return Ue(a,n,3).round(0,N.Big.roundDown)}function Je(a,n){return Ue(a,3,n)}function Ue(a,n,i){let o=(0,N.Big)(i).minus(n).toNumber();return(0,N.Big)(a).times(ui(o))}function ui(a){return(0,N.Big)(10).pow(a)}function V(a,n){return(0,N.Big)(a).times(ui(n))}function S(a,n){let i=(0,N.Big)(a);return i.eq(0)?(0,N.Big)(0):(0,N.Big)(i).div(ui(n))}function be(a){return S((0,N.Big)(a.tokenBalance).minus(a.vUsdBalance).toFixed(),3).div(2).toFixed()}function Rt(a,{feeShare:n,decimals:i},o){let r=(0,N.Big)(a);if(r.lte(0))return"0";let s=r.times(n),d=r.minus(s),c=rn(d,i),A=(0,N.Big)(o.tokenBalance).plus(c),g=Bt(A,o.aValue,o.dValue);return(0,N.Big)(o.vUsdBalance).minus(g).round(0,N.Big.roundDown).toFixed()}function mi(a,{feeShare:n,decimals:i},o){let r=(0,N.Big)(a);if(r.lte(0))return(0,N.Big)(0).toFixed();let s=r.plus(o.vUsdBalance),d=Bt(s,o.aValue,o.dValue),c=Je((0,N.Big)(o.tokenBalance).minus(d),i),A=(0,N.Big)(c).times(n);return(0,N.Big)(c).minus(A).round(0,N.Big.roundDown).toFixed()}function ss(a,n){let i=(0,N.Big)(a);if(i.lte(0))return n;let o=i.plus(n.vUsdBalance),r=Bt(o,n.aValue,n.dValue);return{aValue:n.aValue,dValue:n.dValue,tokenBalance:r.toFixed(0),vUsdBalance:o.toFixed(0)}}function ds(a,{feeShare:n,decimals:i},o){if((0,N.Big)(a).lte(0))return(0,N.Big)(0);let r=(0,N.Big)(o.vUsdBalance).minus(a);if(r.lte(0))throw new vt;let s=Bt(r,o.aValue,o.dValue),d=(0,N.Big)(s).minus(o.tokenBalance),c=Je(d,i),A=(0,N.Big)(n).div((0,N.Big)(1).minus(n)),g=(0,N.Big)(c).times(A).round(0,N.Big.roundUp);return(0,N.Big)(c).plus(g).round(0,N.Big.roundDown)}function cs(a,{feeShare:n,decimals:i},o){if((0,N.Big)(a).lte(0))return(0,N.Big)(0);let r=(0,N.Big)(n).div((0,N.Big)(1).minus(n)),s=(0,N.Big)(a).times(r).round(0,N.Big.roundUp),d=(0,N.Big)(a).plus(s),c=rn(d,i),A=(0,N.Big)(o.tokenBalance).minus(c);if(A.lte(0))throw new vt;let g=Bt(A,o.aValue,o.dValue);return(0,N.Big)(g).minus(o.vUsdBalance).round(0,N.Big.roundDown)}function Bt(a,n,i){let o=(0,N.Big)(4).times(n).times((0,N.Big)(i).minus(a)).minus(i),r=(0,N.Big)(i).pow(3),s=o.pow(2),d=(0,N.Big)(a).times((0,N.Big)(a).times(s).plus((0,N.Big)(4).times(n).times(r))).sqrt().round(0,N.Big.roundDown),c=(0,N.Big)(8).times(n).times(a),A=o.times(a).plus(d).div(c).round(0,N.Big.roundDown);return A.eq(0)?(0,N.Big)(0):A.plus(1)}function As(a,n,i,o){let r=new ra.default(a),s=new ra.default(i),d=new ra.default(n);return r.mul(s).shrn(o).sub(d).toString()}function gs(a){return(0,N.Big)(a).gt(0)?`${Number((0,N.Big)(a).times(100).toFixed(2)).toLocaleString()}%`:"N/A"}function ls(a,n,i){let o=(0,N.Big)(n).times(i),r=(0,N.Big)(n).plus(i),s=(0,N.Big)(8).times(a).times(o).times(r),d=o.times((0,N.Big)(16).times(a).minus(4)).div(3),c=s.times(s),A=d.times(d).times(d),g=c.plus(A),l=(0,N.Big)(g).sqrt(),m=(0,N.Big)(Math.cbrt(+s.plus(l).toFixed())),I=(0,N.Big)(Math.cbrt(+s.minus(l).toFixed()));return m.plus(I).toFixed()}function Zt(a,n,i){let o;switch(n){case"EVM":{o=us(a);break}case"SOLANA":{o=new ms.PublicKey(a).toBuffer();break}case"TRX":{o=xc(a);break}case"SRB":{o=new ps.Address(a).toBuffer();break}case"SUI":{o=us(a);break}case"ALG":{o=zc(a);break}}switch(i){case"EVM":return"0x"+o.toString("hex");case"SOLANA":return Array.from(o);case"TRX":return o;case"SRB":return o.toJSON().data;case"SUI":return"0x"+o.toString("hex");case"ALG":return o}}function it(a){return a.replace(/^0x/i,"")}function bs(a){return Buffer.from(a.replace(/^0x/i,""),"hex")}function us(a){let i=bs(a);return Buffer.concat([Buffer.alloc(32-i.length,0),i],32)}function zc(a){return Buffer.from(Cs.Address.fromString(a).publicKey)}function xc(a){let n=pi(a),i=bs(n);return Oc(i,32)}function pi(a){let n=Wo.utils.crypto.decodeBase58Address(a);return n?Wo.utils.bytes.byteArray2hexStr(n).replace(/^41/,"0x"):""}function Oc(a,n){if(a.length>=n)return a;let i=Buffer.alloc(n,0);return a.copy(i,n-a.length),i}function Fn(){return(0,fo.default)(32)}function Yt(){let a=(0,fo.default)(32).readBigInt64BE();return a<0?a*-1n:a}function De(a,n){let i={},o=n.sourceToken;switch(i.amount=V(n.amount,o.decimals).toFixed(),i.contractAddress=o.bridgeAddress,i.fromAccountAddress=n.fromAccountAddress,a){case"SUI":{if(!o.originTokenAddress)throw new B("SUI sourceToken must contain 'originTokenAddress'");i.fromTokenAddress=o.originTokenAddress;break}case"ALG":{i.fromTokenAddress=o.tokenAddress;break}default:i.fromTokenAddress=Zt(o.tokenAddress,a,a)}switch(i.toAccountAddress=n.toAccountAddress,a){case"SUI":{if(!n.destinationToken.originTokenAddress)throw new B("SUI destinationToken must contain 'originTokenAddress'");i.toTokenAddress=n.destinationToken.originTokenAddress;break}case"ALG":{i.toTokenAddress=n.destinationToken.tokenAddress;break}default:i.toTokenAddress=Zt(n.destinationToken.tokenAddress,a,a)}return i.minimumReceiveAmount=n.minimumReceiveAmount?V(n.minimumReceiveAmount,n.destinationToken.decimals).toFixed():"0",i}async function ke(a,n,i){let o={};o.fromChainId=n.sourceToken.allbridgeChainId,o.fromChainSymbol=n.sourceToken.chainSymbol;let r=L.getChainProperty(n.destinationToken.chainSymbol).chainType;if(a==="SUI"){if(!n.sourceToken.originTokenAddress)throw new B("SUI token must contain 'originTokenAddress'");o.fromTokenAddress=n.sourceToken.originTokenAddress}else o.fromTokenAddress=n.sourceToken.tokenAddress;o.toChainId=n.destinationToken.allbridgeChainId,o.toTokenAddress=n.destinationToken.tokenAddress,n.gasFeePaymentMethod==="stablecoin"?o.gasFeePaymentMethod="stablecoin":o.gasFeePaymentMethod="native";let s=n.sourceToken;switch(n.messenger){case 3:if(!s.cctpAddress||!n.destinationToken.cctpAddress)throw new he("Such route does not support CCTP protocol");o.contractAddress=s.cctpAddress;break;case 4:if(!s.cctpV2Address||!n.destinationToken.cctpV2Address)throw new he("Such route does not support CCTP V2 protocol");o.contractAddress=s.cctpV2Address;break;case 5:if(!s.oftBridgeAddress||!n.destinationToken.oftBridgeAddress||s.oftId!==n.destinationToken.oftId)throw new ve("Such route does not support OFT protocol");o.contractAddress=s.oftBridgeAddress;break;case 1:case 2:o.contractAddress=s.bridgeAddress;break}o.messenger=n.messenger,o.fromAccountAddress=n.fromAccountAddress,o.amount=V(n.amount,s.decimals).toFixed();let{fee:d,feeFormat:c}=n;if(!d){let m=(await Go(n.sourceToken,o.toChainId,o.messenger,i))[o.gasFeePaymentMethod];if(!m)throw new Yn;d=m.int,c="int"}if(c=="float")switch(o.gasFeePaymentMethod){case"native":o.fee=V(d,L.getChainDecimalsByType(s.chainType)).toFixed(0);break;case"stablecoin":o.fee=V(d,s.decimals).toFixed(0);break}else o.fee=d;let{extraGas:A,extraGasFormat:g}=n;if(A&&+A>0){let l=await Fo(s,n.destinationToken,o.messenger,i),m,I;switch(o.gasFeePaymentMethod){case"native":m=L.getChainDecimalsByType(s.chainType),I=(0,Se.Big)(l.exchangeRate);break;case"stablecoin":m=s.decimals,I=(0,Se.Big)(l.exchangeRate).div(l.sourceNativeTokenPrice);break}switch(g??"int"){case"float":{o.extraGas=V(A,m).toFixed(0);let h=I.mul(A);o.extraGasDest=V(h,L.getChainDecimalsByType(n.destinationToken.chainType)).toFixed(0,Se.Big.roundDown);break}case"int":{o.extraGas=A;let h=S(o.extraGas,L.getChainDecimalsByType(s.chainType)),W=I.mul(h);o.extraGasDest=V(W,L.getChainDecimalsByType(n.destinationToken.chainType)).toFixed(0,Se.Big.roundDown);break}}Kc(o.extraGas,o.gasFeePaymentMethod,l)}return["SUI","ALG"].includes(a)||(o.fromTokenAddress=Zt(o.fromTokenAddress,a,a)),o.toAccountAddress=Zt(n.toAccountAddress,r,a),o.toTokenAddress=Zt(o.toTokenAddress,r,a),o.gasFeePaymentMethod=="stablecoin"&&Qc(o.amount,s.decimals,o.fee,o.extraGas),o}function Qc(a,n,i,o){let r=(0,Se.Big)(a).minus(i).minus(o??0);if(r.lte(0))throw new nn(`Amount not enough to pay fee, ${S((0,Se.Big)(r).minus(1).neg(),n).toFixed()} stables is missing`)}async function Go(a,n,i,o){let r=await o.getReceiveTransactionCost({sourceChainId:a.allbridgeChainId,destinationChainId:n,messenger:i,sourceToken:a.tokenAddress}),s={native:{int:r.fee,float:S(r.fee,L.getChainDecimalsByType(a.chainType)).toFixed()},adminFeeShareWithExtras:r.adminFeeShareWithExtras};if(r.sourceNativeTokenPrice){let d=Ue(new Se.Big(r.fee).mul(r.sourceNativeTokenPrice),L.getChainDecimalsByType(a.chainType),a.decimals).toFixed(0,Se.Big.roundUp);s.stablecoin={int:d,float:S(d,a.decimals).toFixed()}}return s}function Kc(a,n,i){let o=i.extraGasMax[n];if(!o)throw new Yn(`Impossible to pay extra gas by '${n}' payment method`);let r=o.int;if((0,Se.Big)(a).gt(r))throw new si(`Extra gas ${a} in int format, exceeded limit ${r} for '${n}' payment method`)}async function Fo(a,n,i,o){let r={},s=await o.getReceiveTransactionCost({sourceChainId:a.allbridgeChainId,destinationChainId:n.allbridgeChainId,messenger:i,sourceToken:a.tokenAddress}),d=n.txCostAmount.maxAmount,c=S(d,L.getChainDecimalsByType(n.chainType)).toFixed(),A=(0,Se.Big)(c).div(s.exchangeRate).toFixed(L.getChainDecimalsByType(a.chainType),Se.Big.roundDown),g=V(A,L.getChainDecimalsByType(a.chainType)).toFixed(0);if(r.native={int:g,float:A},s.sourceNativeTokenPrice){let l=(0,Se.Big)(A).mul(s.sourceNativeTokenPrice).toFixed(a.decimals,Se.Big.roundDown);r.stablecoin={int:V(l,a.decimals).toFixed(0),float:l}}return{extraGasMax:r,destinationChain:{gasAmountMax:{int:d,float:c},swap:{int:n.txCostAmount.swap,float:S(n.txCostAmount.swap,L.getChainDecimalsByType(n.chainType)).toFixed()},transfer:{int:n.txCostAmount.transfer,float:S(n.txCostAmount.transfer,L.getChainDecimalsByType(n.chainType)).toFixed()}},exchangeRate:s.exchangeRate,sourceNativeTokenPrice:s.sourceNativeTokenPrice}}function Is(a){return a.sourceToken.chainSymbol!==a.destinationToken.chainSymbol}var bi=class extends Ge{constructor(i,o){super();this.algorand=i;this.api=o;i.setDefaultSigner(Nn.default.makeBasicAccountTransactionSigner(Nn.default.mnemonicToSecretKey("tunnel gym elevator pulse motor evolve release orange culture make sister approve winter chair armor grocery distance festival tiger holiday dish wisdom region absorb secret")))}chainType="ALG";send(i){throw new _}async buildRawTransactionSend(i){let o=await ke(this.chainType,i,this.api);if(!i.sourceToken.bridgeId)throw new B("ALG sourceToken must contain 'bridgeId'");let r=BigInt(i.sourceToken.bridgeId),s=this.getBridge(r),d=Nn.Address.fromString(i.fromAccountAddress),c=BigInt(i.sourceToken.tokenAddress),A=o.toChainId,g=o.toAccountAddress,l=o.toTokenAddress,m=Fn(),I=BigInt(o.amount),h=BigInt(o.fee);o.extraGas&&(h=h+BigInt(o.extraGas));let W=o.gasFeePaymentMethod==="stablecoin",Y=this.algorand.newGroup(),f,T;W?(f=h,T=I+f):(Y.addPayment({sender:d,receiver:s.appAddress,amount:ys.AlgoAmount.MicroAlgo(h)}),f=0n,T=I),Y.addAssetTransfer({assetId:c,amount:T,sender:d,receiver:s.appAddress}).addAppCallMethodCall(await s.params.swapAndBridge({args:{tokenId:c,recipient:g,destinationChainId:A,receiveToken:l,nonce:m,feeTokenAmount:f},sender:d,extraFee:on(W?9:8)})),Gn({composer:Y,appId:r,sender:d,count:W?3:2});let{transactions:G}=await Y.buildTransactions();return Bo(G,d,this.algorand.client.algod)}async buildRawTransactionSwap(i){let o=De(this.chainType,i),r=Nn.Address.fromString(i.fromAccountAddress),s=i.toAccountAddress,d=BigInt(i.sourceToken.tokenAddress),c=BigInt(i.destinationToken.tokenAddress),A=BigInt(o.minimumReceiveAmount),g=BigInt(i.amount);if(!i.sourceToken.bridgeId)throw new B("ALG sourceToken must contain 'bridgeId'");let l=BigInt(i.sourceToken.bridgeId),m=this.getBridge(l),I=this.algorand.newGroup();I.addAssetTransfer({assetId:d,amount:g,sender:r,receiver:m.appAddress}),I.addAppCallMethodCall(await m.params.swap({args:{tokenId:d,recipient:s,receiveTokenId:c,receiveAmountMin:A},sender:r,extraFee:on(4)})),Gn({composer:I,appId:l,sender:r,count:1});let{transactions:h}=await I.buildTransactions();return Bo(h,r,this.algorand.client.algod)}getBridge(i){return this.algorand.client.getTypedAppClientById(aa,{appId:i})}};var ws=require("big.js");var Uc={abi:[{inputs:[{internalType:"uint256",name:"_chainId",type:"uint256"},{internalType:"uint256",name:"_chainPrecision",type:"uint256"},{internalType:"contract Messenger",name:"_allbridgeMessenger",type:"address"},{internalType:"contract WormholeMessenger",name:"_wormholeMessenger",type:"address"},{internalType:"contract IGasOracle",name:"_gasOracle",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"gas",type:"uint256"}],name:"BridgingFeeFromTokens",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"bridgeTransactionCost",type:"uint256"},{indexed:!1,internalType:"uint256",name:"messageTransactionCost",type:"uint256"}],name:"ReceiveFee",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"Received",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"bytes32",name:"sendToken",type:"bytes32"},{indexed:!1,internalType:"bytes32",name:"receiveToken",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"sendAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receiveAmount",type:"uint256"}],name:"Swapped",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"recipient",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"nonce",type:"uint256"},{indexed:!1,internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"},{indexed:!1,internalType:"bytes32",name:"message",type:"bytes32"}],name:"TokensReceived",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"recipient",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"destinationChainId",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"receiveToken",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"nonce",type:"uint256"},{indexed:!1,internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"}],name:"TokensSent",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[{internalType:"uint256",name:"_chainId",type:"uint256"},{internalType:"bytes32",name:"tokenAddress",type:"bytes32"}],name:"addBridgeToken",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract Pool",name:"pool",type:"address"},{internalType:"bytes32",name:"token",type:"bytes32"}],name:"addPool",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"canSwap",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[],name:"chainId",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"gasUsage",outputs:[{internalType:"uint256",name:"amount",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"},{internalType:"address",name:"tokenAddress",type:"address"}],name:"getBridgingCostInTokens",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"enum MessengerProtocol",name:"protocol",type:"uint8"}],name:"getMessageCost",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"enum MessengerProtocol",name:"protocol",type:"uint8"}],name:"getMessageGasUsage",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"getTransactionCost",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"message",type:"bytes32"},{internalType:"enum MessengerProtocol",name:"protocol",type:"uint8"}],name:"hasReceivedMessage",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"message",type:"bytes32"}],name:"hasSentMessage",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"sourceChainId",type:"uint256"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"bytes32",name:"receiveToken",type:"bytes32"},{internalType:"uint256",name:"nonce",type:"uint256"},{internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"}],name:"hashMessage",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"pure",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"bytes32",name:"tokenAddress",type:"bytes32"}],name:"otherBridgeTokens",outputs:[{internalType:"bool",name:"isSupported",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"otherBridges",outputs:[{internalType:"bytes32",name:"bridgeAddress",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"tokenId",type:"bytes32"}],name:"pools",outputs:[{internalType:"contract Pool",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"messageHash",type:"bytes32"}],name:"processedMessages",outputs:[{internalType:"uint256",name:"isProcessed",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"sourceChainId",type:"uint256"},{internalType:"bytes32",name:"receiveToken",type:"bytes32"},{internalType:"uint256",name:"nonce",type:"uint256"},{internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"},{internalType:"uint256",name:"receiveAmountMin",type:"uint256"}],name:"receiveTokens",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"_chainId",type:"uint256"},{internalType:"bytes32",name:"bridgeAddress",type:"bytes32"}],name:"registerBridge",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"_chainId",type:"uint256"},{internalType:"bytes32",name:"tokenAddress",type:"bytes32"}],name:"removeBridgeToken",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"messageHash",type:"bytes32"}],name:"sentMessages",outputs:[{internalType:"uint256",name:"isSent",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"contract Messenger",name:"_allbridgeMessenger",type:"address"}],name:"setAllbridgeMessenger",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IGasOracle",name:"_gasOracle",type:"address"}],name:"setGasOracle",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"uint256",name:"gasAmount",type:"uint256"}],name:"setGasUsage",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_rebalancer",type:"address"}],name:"setRebalancer",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_stopAuthority",type:"address"}],name:"setStopAuthority",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract WormholeMessenger",name:"_wormholeMessenger",type:"address"}],name:"setWormholeMessenger",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"startSwap",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"stopSwap",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"token",type:"bytes32"},{internalType:"bytes32",name:"receiveToken",type:"bytes32"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"receiveAmountMin",type:"uint256"}],name:"swap",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"token",type:"bytes32"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"bytes32",name:"receiveToken",type:"bytes32"},{internalType:"uint256",name:"nonce",type:"uint256"},{internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"},{internalType:"uint256",name:"feeTokenAmount",type:"uint256"}],name:"swapAndBridge",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IERC20",name:"token",type:"address"}],name:"withdrawBridgingFeeInTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"withdrawGasTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}]},hs=Uc;var Dc={abi:[{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint256",name:"chainPrecision_",type:"uint256"},{internalType:"address",name:"tokenAddress",type:"address"},{internalType:"address",name:"cctpMessenger_",type:"address"},{internalType:"address",name:"cctpTransmitter_",type:"address"},{internalType:"contract IGasOracle",name:"gasOracle_",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"ReceivedExtraGas",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"ReceivedGas",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint256",name:"nonce",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"newRecipient",type:"bytes32"}],name:"RecipientReplaced",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bytes32",name:"recipientWalletAddress",type:"bytes32"}],name:"TokensSentExtras",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"bytes32",name:"recipient",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"destinationChainId",type:"uint256"},{indexed:!1,internalType:"uint256",name:"nonce",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeFromGas",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeFromTokens",type:"uint256"},{indexed:!1,internalType:"uint256",name:"relayerFee",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeTokenAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"adminFeeTokenAmount",type:"uint256"}],name:"TokensSent",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[],name:"adminFeeShareBP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"uint256",name:"relayerFeeTokenAmount",type:"uint256"}],name:"bridge",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"bytes32",name:"recipientWalletAddress",type:"bytes32"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"uint256",name:"relayerFeeTokenAmount",type:"uint256"}],name:"bridgeWithWalletAddress",outputs:[],stateMutability:"payable",type:"function"},{inputs:[],name:"chainId",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes",name:"originalMessage",type:"bytes"},{internalType:"bytes",name:"originalAttestation",type:"bytes"},{internalType:"bytes32",name:"newRecipient",type:"bytes32"}],name:"changeRecipient",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"gasUsage",outputs:[{internalType:"uint256",name:"amount",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"destinationChainId",type:"uint256"}],name:"getBridgingCostInTokens",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"}],name:"getDomainByChainId",outputs:[{internalType:"uint32",name:"",type:"uint32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"getTransactionCost",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"sourceChainId",type:"uint256"},{internalType:"uint64",name:"nonce",type:"uint64"}],name:"isMessageProcessed",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"bytes",name:"message",type:"bytes"},{internalType:"bytes",name:"signature",type:"bytes"}],name:"receiveTokens",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint32",name:"domain",type:"uint32"}],name:"registerBridgeDestination",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"adminFeeShareBP_",type:"uint256"}],name:"setAdminFeeShare",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IGasOracle",name:"gasOracle_",type:"address"}],name:"setGasOracle",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"uint256",name:"gasAmount",type:"uint256"}],name:"setGasUsage",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"}],name:"unregisterBridgeDestination",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"withdrawFeeInTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"withdrawGas",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}]},vs=Dc;var Ec={abi:[{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint256",name:"chainPrecision_",type:"uint256"},{internalType:"contract IGasOracle",name:"gasOracle_",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{inputs:[{internalType:"uint16",name:"optionType",type:"uint16"}],name:"InvalidOptionType",type:"error"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"bytes32",name:"recipient",type:"bytes32"},{indexed:!1,internalType:"address",name:"tokenAddress",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"destinationChainId",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeFromGas",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeFromTokens",type:"uint256"},{indexed:!1,internalType:"uint256",name:"relayerFeeWithExtraGas",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeTokenAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"adminFeeTokenAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"extraGasDestinationToken",type:"uint256"}],name:"OftTokensSent",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"ReceivedGas",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[{internalType:"address",name:"oft_",type:"address"}],name:"addToken",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"tokenAddress",type:"address"}],name:"adminFeeShareBP",outputs:[{internalType:"uint256",name:"feeShare",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"tokenAddress",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"uint256",name:"relayerFeeTokenAmount",type:"uint256"},{internalType:"uint256",name:"extraGasInDestinationToken",type:"uint256"},{internalType:"uint256",name:"slippageBP",type:"uint256"}],name:"bridge",outputs:[],stateMutability:"payable",type:"function"},{inputs:[],name:"chainId",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"tokenAddress_",type:"address"},{internalType:"uint256",name:"destinationChainId_",type:"uint256"},{internalType:"uint128",name:"extraGasAmount_",type:"uint128"}],name:"extraGasPrice",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"}],name:"getEidByChainId",outputs:[{internalType:"uint32",name:"",type:"uint32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"tokenAddress",type:"address"}],name:"oftAddress",outputs:[{internalType:"address",name:"oftAddress",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint32",name:"eid_",type:"uint32"},{internalType:"uint128",name:"lzGasLimit_",type:"uint128"}],name:"registerBridgeDestination",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"tokenAddress_",type:"address"},{internalType:"uint256",name:"destinationChainId_",type:"uint256"}],name:"relayerFee",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"oft_",type:"address"}],name:"removeToken",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"tokenAddress_",type:"address"},{internalType:"uint256",name:"adminFeeShareBP_",type:"uint256"}],name:"setAdminFeeShare",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint128",name:"lzGasLimit_",type:"uint128"}],name:"setLzGasLimit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint256",name:"maxExtraGas_",type:"uint256"}],name:"setMaxExtraGas",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"}],name:"unregisterBridgeDestination",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IERC20",name:"token_",type:"address"}],name:"withdrawFeeInTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount_",type:"uint256"}],name:"withdrawGas",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}]},Rs=Ec;var da=ge(require("@project-serum/anchor")),wo=require("@solana/web3.js");var Re=ge(require("@project-serum/anchor")),Be=require("@solana/web3.js");async function at(a,n){return Re.utils.token.associatedAddress({mint:n,owner:a})}async function Kt(a){let[n]=await Be.PublicKey.findProgramAddress([Re.utils.bytes.utf8.encode("config")],a);return n}async function Bs(a,n){let[i]=await Be.PublicKey.findProgramAddress([Re.utils.bytes.utf8.encode("lock"),Uint8Array.from(a)],n);return i}async function Ii(a,n){let[i]=await Be.PublicKey.findProgramAddress([Re.utils.bytes.utf8.encode("price_v2"),Uint8Array.from([a])],n);return i}async function Tn(a){let n=await Kt(a),[i]=await Be.PublicKey.findProgramAddress([n.toBuffer()],a);return i}async function Ys(a,n){let[i]=await Be.PublicKey.findProgramAddress([a.toBuffer()],n);return i}async function Zn(a,n){let[i]=await Be.PublicKey.findProgramAddress([Re.utils.bytes.utf8.encode("token"),a.toBytes()],n);return i}async function Ws(a,n,i){let[o]=await Be.PublicKey.findProgramAddress([Re.utils.bytes.utf8.encode("other_bridge_token"),Buffer.from([a]),n],i);return o}async function No(a,n){let[i]=await Be.PublicKey.findProgramAddress([Re.utils.bytes.utf8.encode("chain_bridge"),Uint8Array.from([a])],n);return i}async function To(a,n){let[i]=await Be.PublicKey.findProgramAddress([Re.utils.bytes.utf8.encode("gas_usage"),Uint8Array.from([a])],n);return i}async function fs(a,n){let[i]=await Be.PublicKey.findProgramAddress([Re.utils.bytes.utf8.encode("sent_message"),a],n);return i}async function Zo(a,n,i){let[o]=await Be.PublicKey.findProgramAddress([Re.utils.bytes.utf8.encode("user_deposit"),n.toBytes(),a.toBytes()],i);return o}async function Gs(a,n){let[i]=await Be.PublicKey.findProgramAddress([Re.utils.bytes.utf8.encode("cctp_bridge"),a.toBytes()],n);return i}async function Fs(a,n){let[i]=await Be.PublicKey.findProgramAddress([Re.utils.bytes.utf8.encode("token"),a.toBytes()],n);return i}function Ns(a,n){let[i]=Be.PublicKey.findProgramAddressSync([Re.utils.bytes.utf8.encode("lock"),n.toBuffer()],a);return i}function Ts(a,n,i,o){let r=sn("message_transmitter",i),s=sn("token_messenger",o),d=sn("__event_authority",o),c=sn("token_minter",o),A=sn("local_token",o,[n]),g=sn("remote_token_messenger",o,[a.toString()]),l=sn("sender_authority",o);return{messageTransmitterAccount:r,tokenMessenger:s,tokenMessengerEventAuthority:d,tokenMinter:c,localToken:A,remoteTokenMessengerKey:g,authorityPda:l}}function sn(a,n,i=[]){let o=[Buffer.from(Re.utils.bytes.utf8.encode(a))];for(let s of i)typeof s=="string"?o.push(Buffer.from(Re.utils.bytes.utf8.encode(s))):Array.isArray(s)||Buffer.isBuffer(s)?o.push(Buffer.from(Uint8Array.from(s))):o.push(Buffer.from(Uint8Array.from(s.toBuffer())));return Be.PublicKey.findProgramAddressSync(o,n)[0]}var Zs=require("@project-serum/anchor"),sa=require("@solana/web3.js");function Ut(a,n){let i=new sa.Connection(a,"confirmed"),o=new sa.PublicKey(n);return new Zs.AnchorProvider(i,{publicKey:o},{preflightCommitment:"confirmed",commitment:"confirmed"})}async function ca(a,n,i,o){let r,s=new wo.PublicKey(n),d=new wo.PublicKey(i),c=await at(s,d),A=Ut(o,n);da.setProvider(A);let g=await da.Spl.token(A).account.token.fetchNullable(c);if(g?.authority.equals(s))r=Zt(c.toBase58(),"SOLANA",a);else{let l=await A.connection.getTokenAccountsByOwner(s,{mint:d});if(l.value.length===0&&!g)r=Zt(c.toBase58(),"SOLANA",a);else if(l.value.length>0){let m=l.value[0];if(!m?.pubkey)throw new B("First token account or its public key is undefined");r=Zt(m.pubkey.toBase58(),"SOLANA",a)}else throw new B("Associated account has wrong owner")}return r}var yi=class extends Ge{constructor(i,o,r){super();this.web3=i;this.api=o;this.nodeRpcUrlsConfig=r}chainType="EVM";async send(i){let o=await this.buildRawTransactionSend(i);return this.sendRawTransaction(o)}async buildRawTransactionSwap(i){let o=De(this.chainType,i);return await this.buildRawTransactionSwapFromParams(o)}async buildRawTransactionSwapFromParams(i){let{amount:o,contractAddress:r,fromAccountAddress:s,fromTokenAddress:d,toAccountAddress:c,toTokenAddress:A,minimumReceiveAmount:g}=i,m=this.getBridgeContract(r).methods.swap(o,d,A,c,g);return Promise.resolve({from:s,to:r,data:m.encodeABI()})}async buildRawTransactionSend(i){let o=await ke(this.chainType,i,this.api),{amount:r,contractAddress:s,fromAccountAddress:d,fromTokenAddress:c,toChainId:A,toAccountAddress:g,toTokenAddress:l,messenger:m,fee:I,gasFeePaymentMethod:h,extraGas:W,extraGasDest:Y}=o,f="0x"+Fn().toString("hex"),T,G,Z=I;switch(W&&(Z=(0,ws.Big)(Z).plus(W).toFixed()),m){case 3:case 4:{let P=await this.buildRawTransactionCctpSend(i,o,Z);T=P.sendMethod,G=P.value;break}case 5:{let P=this.buildRawTransactionOftSend(i,o,Z,Y);T=P.sendMethod,G=P.value;break}case 1:case 2:{let P=this.getBridgeContract(s);h==="stablecoin"?(T=P.methods.swapAndBridge(c,r,g,A,l,f,m,Z),G="0"):(T=P.methods.swapAndBridge(c,r,g,A,l,f,m,0),G=Z)}break}return Promise.resolve({from:d,to:s,value:G,data:T.encodeABI()})}async buildRawTransactionCctpSend(i,o,r){let{amount:s,contractAddress:d,toChainId:c,toAccountAddress:A,gasFeePaymentMethod:g}=o,l=this.getCctpBridgeContract(d),m,I;if(i.destinationToken.chainType==="SOLANA"){let h=await ca(this.chainType,i.toAccountAddress,i.destinationToken.tokenAddress,this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"));g==="stablecoin"?(m=l.methods.bridgeWithWalletAddress(s,h,A,c,r),I="0"):(m=l.methods.bridgeWithWalletAddress(s,h,A,c,0),I=r)}else g==="stablecoin"?(m=l.methods.bridge(s,A,c,r),I="0"):(m=l.methods.bridge(s,A,c,0),I=r);return{sendMethod:m,value:I}}buildRawTransactionOftSend(i,o,r,s){let{amount:d,contractAddress:c,toChainId:A,toAccountAddress:g,gasFeePaymentMethod:l}=o,m=this.getOftBridgeContract(c),I,h;return l==="stablecoin"?(I=m.methods.bridge(i.sourceToken.tokenAddress,d,g,A,r,s??"0","10"),h="0"):(I=m.methods.bridge(i.sourceToken.tokenAddress,d,g,A,0,s??"0","10"),h=r),{sendMethod:I,value:h}}async sendRawTransaction(i){let o=await this.web3.eth.estimateGas(i),r={maxPriorityFeePerGas:null,maxFeePerGas:null},{transactionHash:s}=await this.web3.eth.sendTransaction({...i,gas:o,...r});return{txId:s.toString()}}getBridgeContract(i){return new this.web3.eth.Contract(hs.abi,i)}getCctpBridgeContract(i){return new this.web3.eth.Contract(vs.abi,i)}getOftBridgeContract(i){return new this.web3.eth.Contract(Rs.abi,i)}};var Aa=class{constructor(n,i,o,r){this.api=n;this.nodeRpcUrlsConfig=i;this.params=o;this.tokenService=r}async approve(n,i){let o,r;i?(o=n,r=i):r=n;let s=hi(r.token,r.messenger);return this.tokenService.buildRawTransactionApprove({...r,spender:s},o)}async send(n,i){return H(n.amount),z("amount",n.amount,n.sourceToken.decimals),Is(n)?ga(n.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,i).buildRawTransactionSend(n):ga(n.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,i).buildRawTransactionSwap(n)}};var se=require("@project-serum/anchor"),q=require("@solana/web3.js"),Ee=require("big.js");var vi={version:"0.1.0",name:"bridge",instructions:[{name:"initialize",accounts:[{name:"admin",isMut:!0,isSigner:!0},{name:"config",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"InitializeArgs"}}]},{name:"initializePool",accounts:[{name:"payer",isMut:!0,isSigner:!0},{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"mint",isMut:!1,isSigner:!1},{name:"token",isMut:!0,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1},{name:"rent",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"InitializePoolArgs"}}]},{name:"initDepositAccount",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"userDeposit",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[]},{name:"deposit",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"userDeposit",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"amount",type:"u64"}]},{name:"withdraw",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"userDeposit",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"amountLp",type:"u64"}]},{name:"swapAndBridge",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"lock",isMut:!0,isSigner:!1},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!0,isSigner:!1},{name:"otherBridgeToken",isMut:!0,isSigner:!1},{name:"messenger",isMut:!1,isSigner:!1},{name:"messengerConfig",isMut:!0,isSigner:!1},{name:"sentMessageAccount",isMut:!0,isSigner:!1},{name:"messengerGasUsage",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"gasPrice",isMut:!1,isSigner:!1},{name:"thisGasPrice",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!1,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"BridgeArgs"}}]},{name:"swapAndBridgeWormhole",accounts:[{name:"user",isMut:!1,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"lock",isMut:!0,isSigner:!1},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!0,isSigner:!1},{name:"otherBridgeToken",isMut:!0,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"gasPrice",isMut:!1,isSigner:!1},{name:"thisGasPrice",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!1,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"wormholeMessenger",isMut:!1,isSigner:!1},{name:"wormholeMessengerConfig",isMut:!0,isSigner:!1},{name:"wormholeProgram",isMut:!1,isSigner:!1},{name:"bridge",isMut:!0,isSigner:!1},{name:"message",isMut:!0,isSigner:!0},{name:"sequence",isMut:!0,isSigner:!1},{name:"feeCollector",isMut:!0,isSigner:!1},{name:"messengerGasUsage",isMut:!1,isSigner:!1},{name:"clock",isMut:!1,isSigner:!1},{name:"rent",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"BridgeArgs"}}]},{name:"swap",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"sendMint",isMut:!1,isSigner:!1},{name:"receiveMint",isMut:!1,isSigner:!1},{name:"config",isMut:!0,isSigner:!1},{name:"sendPool",isMut:!0,isSigner:!1},{name:"receivePool",isMut:!0,isSigner:!1},{name:"sendBridgeToken",isMut:!0,isSigner:!1},{name:"receiveBridgeToken",isMut:!0,isSigner:!1},{name:"sendUserToken",isMut:!0,isSigner:!1},{name:"receiveUserToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1}],args:[{name:"amount",type:"u64"},{name:"receiveAmountMin",type:"u64"}]},{name:"registerChainBridge",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"RegisterChainBridgeArgs"}}]},{name:"updateChainBridge",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!0,isSigner:!1}],args:[{name:"args",type:{defined:"UpdateChainBridgeArgs"}}]},{name:"receiveAndSwap",accounts:[{name:"user",isMut:!0,isSigner:!1},{name:"payer",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"receivedMessageAccount",isMut:!1,isSigner:!1},{name:"unlock",isMut:!0,isSigner:!1},{name:"chainBridge",isMut:!1,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1},{name:"messengerProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"UnlockArgs"}}]},{name:"receiveAndSwapWormhole",accounts:[{name:"user",isMut:!0,isSigner:!1},{name:"payer",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"receivedMessageAccount",isMut:!1,isSigner:!1},{name:"unlock",isMut:!0,isSigner:!1},{name:"chainBridge",isMut:!1,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1},{name:"messengerProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"UnlockArgs"}}]},{name:"withdrawGasToken",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"recipient",isMut:!0,isSigner:!1},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"amount",type:"u64"}]},{name:"claimRewards",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"userDeposit",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[]},{name:"setAdmin",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"newAdmin",isMut:!1,isSigner:!1},{name:"config",isMut:!0,isSigner:!1}],args:[]},{name:"startBridge",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"actionType",type:{defined:"ActionType"}}]},{name:"stopBridge",accounts:[{name:"stopAuthority",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"actionType",type:{defined:"ActionType"}}]},{name:"setRebalancer",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1},{name:"rebalancer",isMut:!1,isSigner:!1}],args:[]},{name:"setStopAuthority",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"newAuthority",isMut:!1,isSigner:!1},{name:"config",isMut:!0,isSigner:!1}],args:[]},{name:"setAllbridgeMessengerProgramId",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"newProgramId",type:"publicKey"}]},{name:"setWormholeMessengerProgramId",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"newProgramId",type:"publicKey"}]},{name:"setGasOracleProgramId",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"newProgramId",type:"publicKey"}]},{name:"setPoolFeeShare",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1}],args:[{name:"feeShareBp",type:"u64"}]},{name:"setBalanceRatioMin",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1}],args:[{name:"balanceRatioMinBp",type:"u16"}]},{name:"setPoolAdminFeeShare",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1}],args:[{name:"feeShareBp",type:"u64"}]},{name:"addOtherBridgeToken",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"otherBridgeToken",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"chainId",type:"u8"},{name:"tokenAddress",type:{array:["u8",32]}}]},{name:"removeOtherBridgeToken",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"config",isMut:!0,isSigner:!1},{name:"otherBridgeToken",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"chainId",type:"u8"},{name:"tokenAddress",type:{array:["u8",32]}}]},{name:"withdrawAdminFee",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"adminToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[]},{name:"adjustTotalLpAmount",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"userDeposit",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1}],args:[]}],accounts:[{name:"chainBridge",type:{kind:"struct",fields:[{name:"address",type:{array:["u8",32]}},{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"}]}},{name:"config",type:{kind:"struct",fields:[{name:"admin",type:"publicKey"},{name:"allbridgeMessengerProgramId",type:"publicKey"},{name:"wormholeMessengerProgramId",type:"publicKey"},{name:"gasOracleProgramId",type:"publicKey"},{name:"rebalancer",type:"publicKey"},{name:"stopAuthority",type:"publicKey"},{name:"authorityBumpSeed",type:"u8"},{name:"canSwap",type:"bool"},{name:"canDeposit",type:"bool"},{name:"canWithdraw",type:"bool"}]}},{name:"lock",type:{kind:"struct",fields:[{name:"sender",type:"publicKey"},{name:"sentTokenAddress",type:"publicKey"},{name:"amount",type:"u64"},{name:"vusdAmount",type:"u64"},{name:"recipient",type:{array:["u8",32]}},{name:"destinationChainId",type:"u8"},{name:"receiveToken",type:{array:["u8",32]}},{name:"nonce",type:{array:["u8",32]}},{name:"messenger",type:{defined:"Messenger"}},{name:"slot",type:"u64"},{name:"fee",type:"u64"}]}},{name:"otherBridgeToken",type:{kind:"struct",fields:[]}},{name:"pool",type:{kind:"struct",fields:[{name:"mint",type:"publicKey"},{name:"a",type:"u64"},{name:"d",type:"u64"},{name:"tokenBalance",type:"u64"},{name:"vUsdBalance",type:"u64"},{name:"reserves",type:"u64"},{name:"decimals",type:"u8"},{name:"totalLpAmount",type:"u64"},{name:"feeShareBp",type:"u64"},{name:"adminFeeShareBp",type:"u64"},{name:"accRewardPerShareP",type:"u128"},{name:"adminFeeAmount",type:"u64"},{name:"balanceRatioMinBp",type:"u16"}]}},{name:"unlock",type:{kind:"struct",fields:[{name:"hash",type:{array:["u8",32]}},{name:"amount",type:"u64"},{name:"fee",type:"u64"},{name:"vUsdAmount",type:"u64"},{name:"slot",type:"u64"}]}},{name:"userDeposit",type:{kind:"struct",fields:[{name:"userAddress",type:"publicKey"},{name:"mint",type:"publicKey"},{name:"lpAmount",type:"u64"},{name:"rewardDebt",type:"u64"}]}}],types:[{name:"RegisterChainBridgeArgs",type:{kind:"struct",fields:[{name:"chainBridgeAddress",type:{array:["u8",32]}},{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"}]}},{name:"UpdateChainBridgeArgs",type:{kind:"struct",fields:[{name:"chainBridgeAddress",type:{array:["u8",32]}},{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"}]}},{name:"InitializeArgs",type:{kind:"struct",fields:[{name:"allbridgeMessengerProgramId",type:"publicKey"},{name:"wormholeMessengerProgramId",type:"publicKey"},{name:"gasOracleProgramId",type:"publicKey"}]}},{name:"InitializePoolArgs",type:{kind:"struct",fields:[{name:"a",type:"u64"},{name:"feeShareBp",type:"u64"},{name:"adminFeeShareBp",type:"u64"},{name:"balanceRatioMinBp",type:"u16"}]}},{name:"BridgeArgs",type:{kind:"struct",fields:[{name:"nonce",type:{array:["u8",32]}},{name:"recipient",type:{array:["u8",32]}},{name:"destinationChainId",type:"u8"},{name:"receiveToken",type:{array:["u8",32]}},{name:"vusdAmount",type:"u64"}]}},{name:"UnlockArgs",type:{kind:"struct",fields:[{name:"nonce",type:{array:["u8",32]}},{name:"amount",type:"u64"},{name:"recipient",type:"publicKey"},{name:"sourceChainId",type:"u8"},{name:"receiveToken",type:"publicKey"},{name:"messenger",type:{defined:"Messenger"}},{name:"hash",type:{array:["u8",32]}},{name:"receiveAmountMin",type:"u64"}]}},{name:"RewardError",type:{kind:"enum",variants:[{name:"FeeTooHigh"}]}},{name:"Messenger",type:{kind:"enum",variants:[{name:"None"},{name:"Allbridge"},{name:"Wormhole"}]}},{name:"ActionType",type:{kind:"enum",variants:[{name:"Deposit"},{name:"Withdraw"},{name:"Swap"}]}}],errors:[{code:6e3,name:"AccountAlreadyInitialized",msg:"This account has already been initialized"},{code:6001,name:"AdminAuthorityInvalid",msg:"This instruction requires admin authority"},{code:6002,name:"InvalidSignature",msg:"Provided signature has wrong signer or message"},{code:6003,name:"InvalidHash",msg:"Wrong unlock message hash"},{code:6004,name:"PoolOverflow",msg:"PoolInfo overflow"},{code:6005,name:"ReservesExhausted",msg:"Reserves exhausted"},{code:6006,name:"ZeroAmount",msg:"Zero amount"},{code:6007,name:"ZeroChanges",msg:"Zero changes"},{code:6008,name:"HighVusdAmount",msg:"vUSD amount is too high"},{code:6009,name:"BalanceRatioExceeded",msg:"Balance ratio exceeded"},{code:6010,name:"InsufficientReceivedAmount",msg:"Received insufficient amount"},{code:6011,name:"ForbiddenAction",msg:"ForbiddenAction"},{code:6012,name:"ValueTooHigh",msg:"Value is too high"}]};var Ss={version:"0.1.0",name:"cctp_bridge",instructions:[{name:"initialize",accounts:[{name:"payer",isMut:!0,isSigner:!0},{name:"admin",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"rent",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"InitializeArgs"}}]},{name:"bridge",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"messageSentEventData",isMut:!0,isSigner:!0},{name:"lock",isMut:!0,isSigner:!1},{name:"mint",isMut:!0,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1},{name:"cctpMessenger",isMut:!1,isSigner:!1},{name:"messageTransmitterProgram",isMut:!1,isSigner:!1},{name:"messageTransmitterAccount",isMut:!0,isSigner:!1},{name:"tokenMessenger",isMut:!1,isSigner:!1},{name:"tokenMinter",isMut:!1,isSigner:!1},{name:"localToken",isMut:!0,isSigner:!1},{name:"remoteTokenMessengerKey",isMut:!1,isSigner:!1},{name:"authorityPda",isMut:!1,isSigner:!1},{name:"eventAuthority",isMut:!1,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"gasPrice",isMut:!1,isSigner:!1},{name:"thisGasPrice",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!1,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"BridgeArgs"}}]},{name:"registerChainBridge",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"cctpBridge",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"RegisterChainBridgeArgs"}}]},{name:"updateChainBridge",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"cctpBridge",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!0,isSigner:!1}],args:[{name:"args",type:{defined:"UpdateChainBridgeArgs"}}]},{name:"setAdminFeeShare",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1}],args:[{name:"feeShareBp",type:"u64"}]},{name:"setGasOracleProgramId",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1}],args:[{name:"newProgramId",type:"publicKey"}]},{name:"withdrawGasToken",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"recipient",isMut:!0,isSigner:!1},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1}],args:[{name:"amount",type:"u64"}]},{name:"withdrawAdminFee",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!1,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"adminToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[]},{name:"setCctpTokenMessengerMinter",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1}],args:[{name:"newProgramId",type:"publicKey"}]}],accounts:[{name:"cctpBridge",type:{kind:"struct",fields:[{name:"mint",type:"publicKey"},{name:"admin",type:"publicKey"},{name:"cctpTokenMessengerMinter",type:"publicKey"},{name:"gasOracleProgramId",type:"publicKey"},{name:"authorityBumpSeed",type:"u8"},{name:"adminFeeShareBp",type:"u64"},{name:"adminFeeAmount",type:"u64"}]}},{name:"chainBridge",type:{kind:"struct",fields:[{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"},{name:"domain",type:"u32"}]}},{name:"lock",type:{kind:"struct",fields:[{name:"sender",type:"publicKey"},{name:"amount",type:"u64"},{name:"adminFee",type:"u64"},{name:"relayerFee",type:"u64"},{name:"recipient",type:{array:["u8",32]}},{name:"destinationChainId",type:"u8"},{name:"slot",type:"u64"}]}}],types:[{name:"RegisterChainBridgeArgs",type:{kind:"struct",fields:[{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"},{name:"domain",type:"u32"},{name:"mint",type:"publicKey"}]}},{name:"UpdateChainBridgeArgs",type:{kind:"struct",fields:[{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"},{name:"domain",type:"u32"},{name:"mint",type:"publicKey"}]}},{name:"BridgeArgs",type:{kind:"struct",fields:[{name:"recipient",type:{array:["u8",32]}},{name:"destinationChainId",type:"u8"},{name:"receiveToken",type:{array:["u8",32]}},{name:"amount",type:"u64"}]}},{name:"InitializeArgs",type:{kind:"struct",fields:[{name:"gasOracleProgramId",type:"publicKey"},{name:"cctpTokenMessengerMinter",type:"publicKey"}]}}],errors:[{code:6e3,name:"ValueTooHigh",msg:"Value is too high"}]};var Vs=require("@project-serum/anchor"),Xs=ge(require("big.js")),Ri=require("web3");async function wn(a,n){return await Vs.Spl.token(n).account.token.fetch(a)}async function Ms(a,n,i){let o=await n.account.pool.fetch(i),r=o.decimals,s=(0,Xs.default)(o.feeShareBp.toString()).div(1e4).toFixed(),d={aValue:o.a.toString(),dValue:o.d.toString(),totalLpAmount:o.totalLpAmount.toString(),tokenBalance:o.tokenBalance.toString(),vUsdBalance:o.vUsdBalance.toString(),accRewardPerShareP:o.accRewardPerShareP.toString()};return Rt(a,{decimals:r,feeShare:s},d)}function js(a){let n=a.amount,i="0x"+a.recipient.toString("hex"),o=a.sourceChainId,r=a.destinationChainId,s="0x"+a.receiveToken.toString("hex"),d="0x"+a.nonce.toString("hex"),c=1,A="0x"+a.chainBridge.toString("hex"),g=Ri.Web3.utils.encodePacked({t:"uint256",v:n},{t:"bytes32",v:i},{t:"uint256",v:o},{t:"bytes32",v:s},{t:"uint256",v:d},{t:"uint8",v:c});if(!g)throw new B("message cannot be undefined");let l=Ri.Web3.utils.keccak256(Buffer.from(g.replace("0x",""),"hex")),m=Buffer.from(l.replace("0x",""),"hex");m[0]=o,m[1]=r;let I=Ri.Web3.utils.encodePacked({t:"bytes32",v:"0x"+m.toString("hex")},{t:"bytes32",v:A});if(!I)throw new an("messageWithSigner cannot be undefined");let h=Ri.Web3.utils.keccak256(Buffer.from(I.replace("0x",""),"hex")),W=Buffer.from(h.replace("0x",""),"hex");return W[0]=m[0],W[1]=m[1],W}var ze=require("@solana/web3.js"),Ps=require("big.js");var So=require("@solana/web3.js");async function dn(a,n){return await Promise.all(a.message.addressTableLookups.map(async i=>new So.AddressLookupTableAccount({key:i.accountKey,state:So.AddressLookupTableAccount.deserialize(await n.getAccountInfo(i.accountKey).then(o=>{if(!o)throw new B("Cannot get AccountInfo");return o.data}))})))}var la="AUTO";async function Sn(a,n,i){let o=new ze.Connection(i,"confirmed"),r=(await o.simulateTransaction(a)).value.unitsConsumed;await Hs(a.instructions,r,n,o)}async function Ls(a,n,i){let o=new ze.Connection(i,"confirmed"),r=await dn(a,o),s=ze.TransactionMessage.decompile(a.message,{addressLookupTableAccounts:r});if(a.serialize().length>1232)throw new gi;await Hs(s.instructions,769230,n,o),a.message=s.compileToV0Message(r)}async function Hs(a,n,i,o){if(n>0){let r=_c(n,a);if(i?.solana){let s=i.solana;if(s===la)await Vo(a,o);else if("pricePerUnitInMicroLamports"in s)await Vo(a,o,s.pricePerUnitInMicroLamports);else{let d=(0,Ps.Big)(s.extraFeeInLamports).div(r).mul(ui(6)).toFixed(0);await Vo(a,o,d)}}}}function _c(a,n){let i=n.findIndex(s=>s.programId.equals(ze.ComputeBudgetProgram.programId)&&ze.ComputeBudgetInstruction.decodeInstructionType(s)==="SetComputeUnitLimit"),o=Number((a*1.3).toFixed(0)),r=ze.ComputeBudgetProgram.setComputeUnitLimit({units:o});return i>=0?n[i]=r:n.push(r),o.toString()}async function Vo(a,n,i){let o=a.findIndex(d=>d.programId.equals(ze.ComputeBudgetProgram.programId)&&ze.ComputeBudgetInstruction.decodeInstructionType(d)==="SetComputeUnitPrice"),r=BigInt(i||await $c(n)),s=ze.ComputeBudgetProgram.setComputeUnitPrice({microLamports:r});return o>=0?a[o]=s:a.push(s),r.toString()}async function $c(a){let n=await a.getRecentPrioritizationFees(),i=0;for(let o of n)i+=o.prioritizationFee;return(i/n.length).toFixed(0)}var Js=require("@solana/spl-token"),cn=require("@solana/web3.js"),Vn=ge(require("axios"));var ua=class{connection;jupiterUrl;apiKeyHeader;maxAccounts;constructor(n,i){this.connection=new cn.Connection(n),this.jupiterUrl=i.jupiterUrl.replace(/\/$/,""),this.apiKeyHeader=i.jupiterApiKeyHeader,this.maxAccounts=i.jupiterMaxAccounts}async getJupiterSwapTx(n,i,o,r){let s;try{let m=r?"ExactOut":"ExactIn",I=`${this.jupiterUrl}/quote?inputMint=${i}&outputMint=${Js.NATIVE_MINT.toString()}&amount=${o}&swapMode=${m}&slippageBps=100&onlyDirectRoutes=true`;this.maxAccounts&&(I+=`&maxAccounts=${this.maxAccounts}`),s=await Vn.default.get(I,{headers:this.apiKeyHeader?{"x-api-key":this.apiKeyHeader}:void 0})}catch(m){throw m instanceof Vn.AxiosError&&m.response&&m.response.data&&m.response.data.error?new Ce(m.response.data.error):new Ce("Cannot get route")}let d;if(r&&s?.data?.inAmount)d=s.data.inAmount;else if(r)throw new Ce("Cannot get inAmount");let c;try{c=await Vn.default.post(`${this.jupiterUrl}/swap`,{quoteResponse:s.data,userPublicKey:n,wrapAndUnwrapSol:!0},{headers:this.apiKeyHeader?{"x-api-key":this.apiKeyHeader}:void 0})}catch(m){throw m instanceof Vn.AxiosError&&m.response&&m.response.data&&m.response.data.error?new Ce(m.response.data.error):new Ce("Cannot get swap transaction")}let A;if(c?.data?.swapTransaction)A=c.data.swapTransaction;else throw new Ce("Cannot get swap transaction");let g=Buffer.from(A,"base64"),l=cn.VersionedTransaction.deserialize(g);return r?{tx:l,amountIn:d}:{tx:l}}async amendJupiterWithSdkTx(n,i){try{let o=await dn(n,this.connection),r=await dn(i,this.connection),s=cn.TransactionMessage.decompile(n.message,{addressLookupTableAccounts:o}),d=cn.TransactionMessage.decompile(i.message,{addressLookupTableAccounts:r});if(d.instructions.shift(),s.instructions.push(...d.instructions),o.push(...r),n.message=s.compileToV0Message(o),i.message.header.numRequiredSignatures===2&&n.signatures.length===1){let c=i.signatures[0];if(!c)throw new B("Signature is undefined");n.signatures.push(c)}return n}catch(o){throw o instanceof Error&&o.message?new Ce(`Some error occurred during creation final swap and bridge transaction. ${o.message}`):new Ce("Some error occurred during creation final swap and bridge transaction")}}};var Xo=1e6,ks=1.1,ma=class extends Ge{constructor(i,o,r){super();this.solanaRpcUrl=i;this.params=o;this.api=r;this.jupiterService=new ua(i,o.jupiterParams)}chainType="SOLANA";jupiterService;async buildRawTransactionSwap(i){let o=De(this.chainType,i);return await this.buildSwapTransaction(o,i.sourceToken.poolAddress,i.destinationToken.poolAddress,i.txFeeParams)}async buildSwapTransaction(i,o,r,s){let{fromAccountAddress:d,amount:c,contractAddress:A,fromTokenAddress:g,toTokenAddress:l,toAccountAddress:m,minimumReceiveAmount:I}=i,h=d,W=A,Y=g,f=l,T=r,G=m,Z=new q.PublicKey(h),P=Ut(this.solanaRpcUrl,Z.toString()),te=new se.Program(vi,W,P),Q=await Tn(te.programId),Pe=await Kt(te.programId),le=new q.PublicKey(Y),Ct=await Zn(le,te.programId),bt=new q.PublicKey(o),Tt=await at(Z,le),et=new q.PublicKey(G),Ze=new q.PublicKey(f),Ke=await Zn(Ze,te.programId),tt=new q.PublicKey(T),Le=await at(et,Ze),It=[se.web3.ComputeBudgetProgram.setComputeUnitLimit({units:Xo})];try{await wn(Le,P)}catch{let Nc=await se.Spl.associatedToken(P).methods.create().accounts({mint:Ze,owner:et,associatedAccount:Le}).instruction();It.push(Nc)}let yt=await te.methods.swap(new se.BN(c),new se.BN(I||0)).accounts({payer:Z,config:Pe,bridgeAuthority:Q,user:Z,sendBridgeToken:Ct,sendMint:le,sendPool:bt,sendUserToken:Tt,receiveBridgeToken:Ke,receiveMint:Ze,receivePool:tt,receiveUserToken:Le}).preInstructions(It).transaction(),nt=P.connection;return yt.recentBlockhash=(await nt.getLatestBlockhash()).blockhash,yt.feePayer=Z,await Sn(yt,s,this.solanaRpcUrl),await this.convertToVersionedTransaction(yt,nt)}async buildRawTransactionSend(i){let o=await ke(this.chainType,i,this.api),r=this.addPoolAddress(i,o),s=r.gasFeePaymentMethod=="stablecoin",d;if(s)try{let{tx:g,solTxSendUpdatedParams:l}=await this.processJup(r,i,!0);d=g,r={...r,...l}}catch{try{let{tx:l,solTxSendUpdatedParams:m}=await this.processJup(r,i,!1);d=l,r={...r,...m}}catch(l){throw l instanceof re?l:l instanceof Error&&l.message?new Ce(`Some error occurred during creation Jupiter swap transaction. ${l.message}`):new Ce("Some error occurred during creation Jupiter swap transaction")}}let c,A;switch(o.messenger){case 1:{let g=await this.prepareSwapAndBridgeData(r);c=await this.buildSwapAndBridgeAllbridgeTransaction(g);break}case 2:{let g=await this.prepareSwapAndBridgeData(r),{transaction:l,messageAccount:m}=await this.buildSwapAndBridgeWormholeTransaction(g);c=l,A=m;break}case 3:case 4:{let g=await this.prepareSwapAndBridgeCctpData(r),{transaction:l,messageSentEventDataKeypair:m}=await this.buildSwapAndBridgeCctpTransaction(i.destinationToken.chainSymbol,g);c=l,A=m;break}case 5:throw new ve("Messenger OFT is not supported yet.")}if(s){if(!d)throw new Ce("Swap tx is absent");c=await this.jupiterService.amendJupiterWithSdkTx(d,c)}return await Ls(c,i.txFeeParams,this.solanaRpcUrl),A&&c.sign([A]),c}async processJup(i,o,r){let{fee:s,extraGas:d,gasFeePaymentMethod:c}=await this.convertStableCoinFeeAndExtraGasToNativeCurrency(o.sourceToken,i),A=r?(0,Ee.Big)(s):(0,Ee.Big)(i.fee);d&&(A=A.plus(d)),r||(A=A.mul(ks));let{tx:g,amountIn:l}=await this.jupiterService.getJupiterSwapTx(o.fromAccountAddress,o.sourceToken.tokenAddress,A.toFixed(0),r),m;if(r){if(!l)throw new Ce("Cannot get inAmount");m=(0,Ee.Big)(i.amount).minus((0,Ee.Big)(l).mul(ks)).toFixed(0)}else m=(0,Ee.Big)(i.amount).minus(A).toFixed(0);if((0,Ee.Big)(m).lte(0))throw new nn(`Amount not enough to pay fee, ${S((0,Ee.Big)(m).minus(1).neg(),o.sourceToken.decimals).toFixed()} stables is missing`);return{tx:g,solTxSendUpdatedParams:{amount:m,fee:s,extraGas:d,gasFeePaymentMethod:c}}}addPoolAddress(i,o){return{...o,poolAddress:i.sourceToken.poolAddress}}async convertStableCoinFeeAndExtraGasToNativeCurrency(i,o){if(o.gasFeePaymentMethod=="stablecoin"){let r=(await this.api.getReceiveTransactionCost({sourceChainId:o.fromChainId,destinationChainId:o.toChainId,messenger:o.messenger,sourceToken:i.tokenAddress})).sourceNativeTokenPrice,s=(0,Ee.Big)(o.fee).div(r).mul((0,Ee.Big)(10).pow(L.getChainDecimalsByType("SOLANA")-i.decimals)).toFixed(0),d;return o.extraGas&&(d=(0,Ee.Big)(o.extraGas).div(r).mul((0,Ee.Big)(10).pow(L.getChainDecimalsByType("SOLANA")-i.decimals)).toFixed(0)),{fee:s,extraGas:d,gasFeePaymentMethod:"native"}}return{fee:o.fee,extraGas:o.extraGas,gasFeePaymentMethod:"native"}}getExtraGasInstruction(i,o,r){return se.web3.SystemProgram.transfer({fromPubkey:o,toPubkey:r,lamports:+i})}async prepareSwapAndBridgeData(i){let{amount:o,contractAddress:r,fromChainId:s,fromAccountAddress:d,fromTokenAddress:c,toChainId:A,toAccountAddress:g,toTokenAddress:l,poolAddress:m,extraGas:I}=i,h=c,W=d,Y=A,f=l,T=g,G=r,Z=s,P=Ut(this.solanaRpcUrl,W),te=new se.Program(vi,G,P),Q=Array.from(Fn()),Pe=new q.PublicKey(m),le=await Ms(o,te,Pe),Ct=await Bs(Q,te.programId),bt=await Tn(te.programId),Tt=await at(new q.PublicKey(W),new q.PublicKey(h)),et=await Zn(new q.PublicKey(h),te.programId),Ze=await No(Y,te.programId),Ke=await Ws(Y,Buffer.from(f),te.programId),tt=await Kt(te.programId),Le=await te.account.config.fetch(tt),It=await Ii(Y,Le.gasOracleProgramId),yt=await Ii(Z,Le.gasOracleProgramId),nt=js({amount:le,recipient:Buffer.from(T),nonce:Buffer.from(Q),receiveToken:Buffer.from(f),destinationChainId:Y,sourceChainId:Z,chainBridge:(await Tn(te.programId)).toBuffer()}),E={};return E.bridge=te,E.amount=new se.BN(o),E.vusdAmount=new se.BN(le),E.nonce=Q,E.recipient=Array.from(T),E.receiveToken=Array.from(f),E.poolAccount=Pe,E.lockAccount=Ct,E.bridgeAuthority=bt,E.userToken=Tt,E.bridgeTokenAccount=et,E.chainBridgeAccount=Ze,E.otherBridgeTokenAccount=Ke,E.userAccount=new q.PublicKey(W),E.destinationChainId=Y,E.mint=new q.PublicKey(h),E.config=tt,E.configAccountInfo=Le,E.gasPrice=It,E.thisGasPrice=yt,E.message=nt,I&&(E.extraGasInstruction=this.getExtraGasInstruction(I,E.userAccount,tt)),E}async buildSwapAndBridgeAllbridgeTransaction(i){let{bridge:o,vusdAmount:r,nonce:s,recipient:d,receiveToken:c,poolAccount:A,lockAccount:g,bridgeAuthority:l,userToken:m,bridgeTokenAccount:I,chainBridgeAccount:h,otherBridgeTokenAccount:W,userAccount:Y,destinationChainId:f,mint:T,config:G,configAccountInfo:Z,gasPrice:P,thisGasPrice:te,message:Q,extraGasInstruction:Pe}=i,le=Z.allbridgeMessengerProgramId,Ct=await To(f,le),bt=await Kt(le),Tt=await fs(Q,le),et=[];Pe&&et.push(Pe);let Ze=await o.methods.swapAndBridge({vusdAmount:r,nonce:s,destinationChainId:f,recipient:d,receiveToken:c}).accounts({mint:T,user:Y,config:G,lock:g,pool:A,gasPrice:P,thisGasPrice:te,bridgeAuthority:l,userToken:m,bridgeToken:I,chainBridge:h,messenger:le,messengerGasUsage:Ct,messengerConfig:bt,sentMessageAccount:Tt,otherBridgeToken:W}).preInstructions([se.web3.ComputeBudgetProgram.setComputeUnitLimit({units:Xo})]).postInstructions(et).transaction(),Ke=Ut(this.solanaRpcUrl,Y.toString()).connection;return Ze.recentBlockhash=(await Ke.getLatestBlockhash()).blockhash,Ze.feePayer=Y,await this.convertToVersionedTransaction(Ze,Ke)}async convertToVersionedTransaction(i,o){let r=await o.getAddressLookupTable(new q.PublicKey(this.params.solanaLookUpTable)).then(d=>d.value);if(!r)throw new B("Cannot find allbridgeLookupTableAccount");let s=new se.web3.TransactionMessage({payerKey:i.feePayer,recentBlockhash:i.recentBlockhash,instructions:i.instructions}).compileToV0Message([r]);return new se.web3.VersionedTransaction(s)}async buildSwapAndBridgeWormholeTransaction(i){let{bridge:o,vusdAmount:r,nonce:s,recipient:d,receiveToken:c,poolAccount:A,lockAccount:g,bridgeAuthority:l,userToken:m,bridgeTokenAccount:I,chainBridgeAccount:h,otherBridgeTokenAccount:W,userAccount:Y,destinationChainId:f,mint:T,config:G,configAccountInfo:Z,gasPrice:P,thisGasPrice:te,message:Q,extraGasInstruction:Pe}=i,le=this.params.wormholeMessengerProgramId,[Ct]=q.PublicKey.findProgramAddressSync([Buffer.from("Bridge")],new q.PublicKey(le)),[bt]=q.PublicKey.findProgramAddressSync([Buffer.from("fee_collector")],new q.PublicKey(le)),[Tt]=q.PublicKey.findProgramAddressSync([Buffer.from("Sequence"),l.toBuffer()],new q.PublicKey(le)),et=await To(f,Z.wormholeMessengerProgramId),Ze=await Kt(Z.wormholeMessengerProgramId),Ke=q.Keypair.generate(),tt=Ut(this.solanaRpcUrl,Y.toString()),Le=await tt.connection.getAccountInfo(Ct);if(Le==null)throw new B("Cannot fetch wormhole bridge account info");let It=new se.BN(Le.data.slice(16,24),"le").toString(),yt=q.SystemProgram.transfer({fromPubkey:Y,toPubkey:bt,lamports:+It}),nt=[];Pe&&nt.push(Pe);let E={mint:T,user:Y,config:G,lock:g,pool:A,gasPrice:P,thisGasPrice:te,bridgeAuthority:l,userToken:m,bridgeToken:I,chainBridge:h,otherBridgeToken:W,messengerGasUsage:et,wormholeProgram:le,bridge:Ct,message:Ke.publicKey,wormholeMessenger:Z.wormholeMessengerProgramId,sequence:Tt,feeCollector:bt,wormholeMessengerConfig:Ze,clock:se.web3.SYSVAR_CLOCK_PUBKEY},qi=await o.methods.swapAndBridgeWormhole({vusdAmount:r,nonce:s,destinationChainId:f,recipient:d,receiveToken:c}).accounts(E).preInstructions([se.web3.ComputeBudgetProgram.setComputeUnitLimit({units:Xo}),yt]).postInstructions(nt).signers([Ke]).transaction();return qi.recentBlockhash=(await tt.connection.getLatestBlockhash()).blockhash,qi.feePayer=Y,{transaction:await this.convertToVersionedTransaction(qi,tt.connection),messageAccount:Ke}}async prepareSwapAndBridgeCctpData(i){let{contractAddress:o,amount:r,fromAccountAddress:s,fromTokenAddress:d,toChainId:c,toAccountAddress:A,toTokenAddress:g,extraGas:l}=i,m=o;if(!m)throw new he("Such route does not support CCTP protocol");let I=4,h=s,W=g,Y=A,f=Ut(this.solanaRpcUrl,h),T=new se.Program(Ss,m,f),G=new q.PublicKey(d),Z=await Gs(G,T.programId),P=new q.PublicKey(h),te=await T.account.cctpBridge.fetch(Z),Q={};return Q.cctpBridge=T,Q.cctpBridgeAccount=Z,Q.cctpAddressAccount=new q.PublicKey(m),Q.amount=new se.BN(r),Q.recipient=Array.from(Y),Q.receiveToken=Array.from(W),Q.userToken=await at(P,G),Q.bridgeAuthority=await Ys(Z,T.programId),Q.bridgeTokenAccount=await Fs(G,T.programId),Q.chainBridgeAccount=await No(c,T.programId),Q.userAccount=P,Q.destinationChainId=c,Q.mint=G,Q.gasPrice=await Ii(c,te.gasOracleProgramId),Q.thisGasPrice=await Ii(I,te.gasOracleProgramId),Q.provider=f,l&&(Q.extraGasInstruction=this.getExtraGasInstruction(l,Q.userAccount,Z)),Q}async buildSwapAndBridgeCctpTransaction(i,o){let{cctpBridge:r,cctpBridgeAccount:s,amount:d,recipient:c,receiveToken:A,bridgeAuthority:g,userToken:l,bridgeTokenAccount:m,chainBridgeAccount:I,userAccount:h,destinationChainId:W,mint:Y,gasPrice:f,thisGasPrice:T,extraGasInstruction:G,provider:Z}=o,P=this.params.cctpParams.cctpDomains[i],te=this.params.cctpParams.cctpTransmitterProgramId,Q=this.params.cctpParams.cctpTokenMessengerMinter;if(P==null||!te||!Q)throw new B("CCTP is not configured");let Pe=new q.PublicKey(te),le=new q.PublicKey(Q),{messageTransmitterAccount:Ct,tokenMessenger:bt,tokenMessengerEventAuthority:Tt,tokenMinter:et,localToken:Ze,remoteTokenMessengerKey:Ke,authorityPda:tt}=Ts(P,Y,Pe,le),Le=[];G&&Le.push(G);let It=q.Keypair.generate(),yt=Ns(r.programId,It.publicKey),nt=await r.methods.bridge({amount:d,destinationChainId:W,recipient:c,receiveToken:A}).accounts({mint:Y,user:h,cctpBridge:s,messageSentEventData:It.publicKey,lock:yt,cctpMessenger:le,messageTransmitterProgram:Pe,messageTransmitterAccount:Ct,tokenMessenger:bt,tokenMinter:et,localToken:Ze,remoteTokenMessengerKey:Ke,authorityPda:tt,eventAuthority:Tt,bridgeToken:m,gasPrice:f,thisGasPrice:T,chainBridge:I,userToken:l,bridgeAuthority:g}).preInstructions([se.web3.ComputeBudgetProgram.setComputeUnitLimit({units:2e6})]).postInstructions(Le).transaction(),E=Z.connection;return nt.recentBlockhash=(await E.getLatestBlockhash()).blockhash,nt.feePayer=h,{transaction:await this.convertToVersionedTransaction(nt,E),messageSentEventDataKeypair:It}}send(i){throw new _}};var pa=require("@stellar/stellar-sdk"),zs=require("big.js");var t=require("@stellar/stellar-sdk"),qc=t.contract.Spec,eA=t.contract.Client;var Bi=class extends eA{constructor(i){super(new qc(["AAAAAAAAAAAAAAAKaW5pdGlhbGl6ZQAAAAAABAAAAAAAAAAFYWRtaW4AAAAAAAATAAAAAAAAAAltZXNzZW5nZXIAAAAAAAATAAAAAAAAAApnYXNfb3JhY2xlAAAAAAATAAAAAAAAAAxuYXRpdmVfdG9rZW4AAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAPc3dhcF9hbmRfYnJpZGdlAAAAAAkAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAAAAAAFdG9rZW4AAAAAAAATAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAACXJlY2lwaWVudAAAAAAAA+4AAAAgAAAAAAAAABRkZXN0aW5hdGlvbl9jaGFpbl9pZAAAAAQAAAAAAAAADXJlY2VpdmVfdG9rZW4AAAAAAAPuAAAAIAAAAAAAAAAFbm9uY2UAAAAAAAAMAAAAAAAAAApnYXNfYW1vdW50AAAAAAAKAAAAAAAAABBmZWVfdG9rZW5fYW1vdW50AAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAOcmVjZWl2ZV90b2tlbnMAAAAAAAgAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAlyZWNpcGllbnQAAAAAAAATAAAAAAAAAA9zb3VyY2VfY2hhaW5faWQAAAAABAAAAAAAAAANcmVjZWl2ZV90b2tlbgAAAAAAA+4AAAAgAAAAAAAAAAVub25jZQAAAAAAAAwAAAAAAAAAEnJlY2VpdmVfYW1vdW50X21pbgAAAAAACgAAAAAAAAAJZXh0cmFfZ2FzAAAAAAAD6AAAAAoAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAAEc3dhcAAAAAYAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAV0b2tlbgAAAAAAA+4AAAAgAAAAAAAAAA1yZWNlaXZlX3Rva2VuAAAAAAAD7gAAACAAAAAAAAAACXJlY2lwaWVudAAAAAAAABMAAAAAAAAAEnJlY2VpdmVfYW1vdW50X21pbgAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAJc3RvcF9zd2FwAAAAAAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAKc3RhcnRfc3dhcAAAAAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAOc2V0X2dhc19vcmFjbGUAAAAAAAEAAAAAAAAAC25ld19hZGRyZXNzAAAAABMAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAASc2V0X3N0b3BfYXV0aG9yaXR5AAAAAAABAAAAAAAAAA5zdG9wX2F1dGhvcml0eQAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAOc2V0X3JlYmFsYW5jZXIAAAAAAAEAAAAAAAAACnJlYmFsYW5jZXIAAAAAABMAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAANc2V0X21lc3NlbmdlcgAAAAAAAAEAAAAAAAAACW1lc3NlbmdlcgAAAAAAABMAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAANc2V0X2dhc191c2FnZQAAAAAAAAIAAAAAAAAACGNoYWluX2lkAAAABAAAAAAAAAAJZ2FzX3VzYWdlAAAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAPcmVnaXN0ZXJfYnJpZGdlAAAAAAIAAAAAAAAACGNoYWluX2lkAAAABAAAAAAAAAAOYnJpZGdlX2FkZHJlc3MAAAAAA+4AAAAgAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAQYWRkX2JyaWRnZV90b2tlbgAAAAIAAAAAAAAACGNoYWluX2lkAAAABAAAAAAAAAANdG9rZW5fYWRkcmVzcwAAAAAAA+4AAAAgAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAATcmVtb3ZlX2JyaWRnZV90b2tlbgAAAAACAAAAAAAAAAhjaGFpbl9pZAAAAAQAAAAAAAAADXRva2VuX2FkZHJlc3MAAAAAAAPuAAAAIAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAIYWRkX3Bvb2wAAAACAAAAAAAAAARwb29sAAAAEwAAAAAAAAAFdG9rZW4AAAAAAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAATd2l0aGRyYXdfZ2FzX3Rva2VucwAAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAABmFtb3VudAAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAfd2l0aGRyYXdfYnJpZGdpbmdfZmVlX2luX3Rva2VucwAAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAADXRva2VuX2FkZHJlc3MAAAAAAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAVaGFzX3Byb2Nlc3NlZF9tZXNzYWdlAAAAAAAAAQAAAAAAAAAHbWVzc2FnZQAAAAPuAAAAIAAAAAEAAAPpAAAAAQAAAAM=","AAAAAAAAAAAAAAAUaGFzX3JlY2VpdmVkX21lc3NhZ2UAAAABAAAAAAAAAAdtZXNzYWdlAAAAA+4AAAAgAAAAAQAAA+kAAAABAAAAAw==","AAAAAAAAAAAAAAAQZ2V0X3Bvb2xfYWRkcmVzcwAAAAEAAAAAAAAADXRva2VuX2FkZHJlc3MAAAAAAAPuAAAAIAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAAKZ2V0X2NvbmZpZwAAAAAAAAAAAAEAAAPpAAAH0AAAAAZCcmlkZ2UAAAAAAAM=","AAAAAAAAAAAAAAASZ2V0X3N0b3BfYXV0aG9yaXR5AAAAAAAAAAAAAQAAA+kAAAATAAAAAw==","AAAAAAAAAAAAAAAUZ2V0X3RyYW5zYWN0aW9uX2Nvc3QAAAABAAAAAAAAAAhjaGFpbl9pZAAAAAQAAAABAAAD6QAAAAoAAAAD","AAAAAAAAAAAAAAANZ2V0X2dhc191c2FnZQAAAAAAAAEAAAAAAAAACGNoYWluX2lkAAAABAAAAAEAAAPpAAAACgAAAAM=","AAAAAAAAAAAAAAAJZ2V0X2FkbWluAAAAAAAAAAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAAOZ2V0X2dhc19vcmFjbGUAAAAAAAAAAAABAAAD6QAAABMAAAAD","AAAAAAAAAAAAAAASZ2V0X2Fub3RoZXJfYnJpZGdlAAAAAAABAAAAAAAAAAhjaGFpbl9pZAAAAAQAAAABAAAD6QAAB9AAAAANQW5vdGhlckJyaWRnZQAAAAAAAAM=","AAAAAAAAAAAAAAAJc2V0X2FkbWluAAAAAAAAAQAAAAAAAAAJbmV3X2FkbWluAAAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAHdXBncmFkZQAAAAABAAAAAAAAAA1uZXdfd2FzbV9oYXNoAAAAAAAD7gAAACAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAQAAAAAAAAAAAAAAB1N3YXBwZWQAAAAABgAAAAAAAAAOcmVjZWl2ZV9hbW91bnQAAAAAAAoAAAAAAAAADXJlY2VpdmVfdG9rZW4AAAAAAAPuAAAAIAAAAAAAAAAJcmVjaXBpZW50AAAAAAAAEwAAAAAAAAALc2VuZF9hbW91bnQAAAAACgAAAAAAAAAKc2VuZF90b2tlbgAAAAAD7gAAACAAAAAAAAAABnNlbmRlcgAAAAAAEw==","AAAAAQAAAAAAAAAAAAAAClRva2Vuc1NlbnQAAAAAAAUAAAAAAAAABmFtb3VudAAAAAAACgAAAAAAAAAUZGVzdGluYXRpb25fY2hhaW5faWQAAAAEAAAAAAAAAAVub25jZQAAAAAAAAwAAAAAAAAADXJlY2VpdmVfdG9rZW4AAAAAAAPuAAAAIAAAAAAAAAAJcmVjaXBpZW50AAAAAAAD7gAAACA=","AAAAAQAAAAAAAAAAAAAADlRva2Vuc1JlY2VpdmVkAAAAAAAEAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAAB21lc3NhZ2UAAAAD7gAAACAAAAAAAAAABW5vbmNlAAAAAAAADAAAAAAAAAAJcmVjaXBpZW50AAAAAAAD7gAAACA=","AAAAAQAAAAAAAAAAAAAAClJlY2VpdmVGZWUAAAAAAAMAAAAAAAAAF2JyaWRnZV90cmFuc2FjdGlvbl9jb3N0AAAAAAoAAAAAAAAACWV4dHJhX2dhcwAAAAAAAAoAAAAAAAAAGG1lc3NhZ2VfdHJhbnNhY3Rpb25fY29zdAAAAAo=","AAAAAQAAAAAAAAAAAAAAFUJyaWRnaW5nRmVlRnJvbVRva2VucwAAAAAAAAIAAAAAAAAAEGZlZV90b2tlbl9hbW91bnQAAAAKAAAAAAAAAANnYXMAAAAACg==","AAAAAQAAAAAAAAAAAAAADUFub3RoZXJCcmlkZ2UAAAAAAAACAAAAAAAAAAdhZGRyZXNzAAAAA+4AAAAgAAAAAAAAAAZ0b2tlbnMAAAAAA+wAAAPuAAAAIAAAAAE=","AAAAAQAAAAAAAAAAAAAABkJyaWRnZQAAAAAABgAAAGBwcmVjb21wdXRlZCB2YWx1ZXMgb2YgdGhlIHNjYWxpbmcgZmFjdG9yIHJlcXVpcmVkIGZvciBwYXlpbmcgdGhlIGJyaWRnaW5nIGZlZSB3aXRoIHN0YWJsZSB0b2tlbnMAAAAeYnJpZGdpbmdfZmVlX2NvbnZlcnNpb25fZmFjdG9yAAAAAAPsAAAAEwAAAAoAAAAAAAAACGNhbl9zd2FwAAAAAQAAAGxwcmVjb21wdXRlZCB2YWx1ZXMgdG8gZGl2aWRlIGJ5IHRvIGNoYW5nZSB0aGUgcHJlY2lzaW9uIGZyb20gdGhlIEdhcyBPcmFjbGUgcHJlY2lzaW9uIHRvIHRoZSB0b2tlbiBwcmVjaXNpb24AAAAWZnJvbV9nYXNfb3JhY2xlX2ZhY3RvcgAAAAAD7AAAABMAAAAKAAAAAAAAAAltZXNzZW5nZXIAAAAAAAATAAAAAAAAAAVwb29scwAAAAAAA+wAAAPuAAAAIAAAABMAAAAAAAAACnJlYmFsYW5jZXIAAAAAABM=","AAAAAgAAAAAAAAAAAAAAB0RhdGFLZXkAAAAAAwAAAAEAAAAAAAAAC090aGVyQnJpZGdlAAAAAAEAAAAEAAAAAQAAAAAAAAALU2VudE1lc3NhZ2UAAAAAAQAAA+4AAAAgAAAAAQAAAAAAAAAPUmVjZWl2ZWRNZXNzYWdlAAAAAAEAAAPuAAAAIA==","AAAAAQAAAAAAAAAAAAAABUFkbWluAAAAAAAAAQAAAAAAAAABMAAAAAAAABM=","AAAAAQAAAAAAAAAAAAAAEEdhc09yYWNsZUFkZHJlc3MAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAAAQAAAAAAAAAAAAAACEdhc1VzYWdlAAAAAQAAAAAAAAABMAAAAAAAA+wAAAAEAAAACg==","AAAAAQAAAAAAAAAAAAAAC05hdGl2ZVRva2VuAAAAAAEAAAAAAAAAATAAAAAAAAAT","AAAAAQAAAAAAAAAAAAAADVN0b3BBdXRob3JpdHkAAAAAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAABAAAAAAAAAAAAAAABUVycm9yAAAAAAAAKAAAAAAAAAANVW5pbXBsZW1lbnRlZAAAAAAAAAAAAAAAAAAAC0luaXRpYWxpemVkAAAAAAEAAAAAAAAADVVuaW5pdGlhbGl6ZWQAAAAAAAACAAAAAAAAAAxVbmF1dGhvcml6ZWQAAAADAAAAAAAAAApJbnZhbGlkQXJnAAAAAAAEAAAAAAAAAA5JbnZhbGlkQ2hhaW5JZAAAAAAABQAAAAAAAAATSW52YWxpZE90aGVyQ2hhaW5JZAAAAAAGAAAAAAAAAA5HYXNVc2FnZU5vdFNldAAAAAAABwAAAAAAAAANQnJva2VuQWRkcmVzcwAAAAAAAAgAAAAAAAAACE5vdEZvdW5kAAAACQAAAAAAAAAYVG9rZW5JbnN1ZmZpY2llbnRCYWxhbmNlAAAACgAAAAAAAAAKQ2FzdEZhaWxlZAAAAAAACwAAAAAAAAAMVTI1Nk92ZXJmbG93AAAADAAAAAAAAAAKWmVyb0Ftb3VudAAAAAAAZwAAAAAAAAAMUG9vbE92ZXJmbG93AAAAaAAAAAAAAAALWmVyb0NoYW5nZXMAAAAAaQAAAAAAAAARUmVzZXJ2ZXNFeGhhdXN0ZWQAAAAAAABqAAAAAAAAABpJbnN1ZmZpY2llbnRSZWNlaXZlZEFtb3VudAAAAAAAawAAAAAAAAAUQmFsYW5jZVJhdGlvRXhjZWVkZWQAAABsAAAAAAAAAAlGb3JiaWRkZW4AAAAAAABtAAAAAAAAABlVbmF1dGhvcml6ZWRTdG9wQXV0aG9yaXR5AAAAAAAAywAAAAAAAAAOU3dhcFByb2hpYml0ZWQAAAAAAMwAAAAAAAAAEkFtb3VudFRvb0xvd0ZvckZlZQAAAAAAzQAAAAAAAAAWQnJpZGdlVG9UaGVaZXJvQWRkcmVzcwAAAAAAzgAAAAAAAAAORW1wdHlSZWNpcGllbnQAAAAAAM8AAAAAAAAAE1NvdXJjZU5vdFJlZ2lzdGVyZWQAAAAA0AAAAAAAAAAVV3JvbmdEZXN0aW5hdGlvbkNoYWluAAAAAAAA0QAAAAAAAAATVW5rbm93bkFub3RoZXJDaGFpbgAAAADSAAAAAAAAABFUb2tlbnNBbHJlYWR5U2VudAAAAAAAANMAAAAAAAAAEE1lc3NhZ2VQcm9jZXNzZWQAAADUAAAAAAAAAAxOb3RFbm91Z2hGZWUAAADWAAAAAAAAAAlOb01lc3NhZ2UAAAAAAADXAAAAAAAAAA1Ob1JlY2VpdmVQb29sAAAAAAAA2AAAAAAAAAAGTm9Qb29sAAAAAADZAAAAAAAAABNVbmtub3duQW5vdGhlclRva2VuAAAAANoAAAAAAAAAD1dyb25nQnl0ZUxlbmd0aAAAAAEsAAAAAAAAAApIYXNNZXNzYWdlAAAAAAEtAAAAAAAAABdJbnZhbGlkUHJpbWFyeVNpZ25hdHVyZQAAAAEuAAAAAAAAABlJbnZhbGlkU2Vjb25kYXJ5U2lnbmF0dXJlAAAAAAABLwAAAAAAAAARTm9HYXNEYXRhRm9yQ2hhaW4AAAAAAAGQ"]),i);this.options=i}fromJSON={initialize:this.txFromJSON,swap_and_bridge:this.txFromJSON,receive_tokens:this.txFromJSON,swap:this.txFromJSON,stop_swap:this.txFromJSON,start_swap:this.txFromJSON,set_gas_oracle:this.txFromJSON,set_stop_authority:this.txFromJSON,set_rebalancer:this.txFromJSON,set_messenger:this.txFromJSON,set_gas_usage:this.txFromJSON,register_bridge:this.txFromJSON,add_bridge_token:this.txFromJSON,remove_bridge_token:this.txFromJSON,add_pool:this.txFromJSON,withdraw_gas_tokens:this.txFromJSON,withdraw_bridging_fee_in_tokens:this.txFromJSON,has_processed_message:this.txFromJSON,has_received_message:this.txFromJSON,get_pool_address:this.txFromJSON,get_config:this.txFromJSON,get_stop_authority:this.txFromJSON,get_transaction_cost:this.txFromJSON,get_gas_usage:this.txFromJSON,get_admin:this.txFromJSON,get_gas_oracle:this.txFromJSON,get_another_bridge:this.txFromJSON,set_admin:this.txFromJSON,upgrade:this.txFromJSON}};var Ca=class extends Ge{constructor(i,o,r){super();this.nodeRpcUrlsConfig=i;this.params=o;this.api=r}chainType="SRB";async buildRawTransactionSend(i){let o=await ke(this.chainType,i,this.api);return await this.buildRawTransactionSendFromParams(o)}async buildRawTransactionSendFromParams(i){let{amount:o,contractAddress:r,fromAccountAddress:s,fromTokenAddress:d,toChainId:c,toAccountAddress:A,toTokenAddress:g,fee:l,gasFeePaymentMethod:m,extraGas:I}=i,h=l;I&&(h=(0,zs.Big)(h).plus(I).toFixed());let W=this.getContract(Bi,r,s),Y;return m==="stablecoin"?Y=await W.swap_and_bridge({sender:s,token:pa.Address.contract(Buffer.from(d)).toString(),amount:BigInt(o),recipient:Buffer.from(A),destination_chain_id:+c,receive_token:Buffer.from(g),nonce:Yt(),gas_amount:BigInt(0),fee_token_amount:BigInt(h)}):Y=await W.swap_and_bridge({sender:s,token:pa.Address.contract(Buffer.from(d)).toString(),amount:BigInt(o),recipient:Buffer.from(A),destination_chain_id:+c,receive_token:Buffer.from(g),nonce:Yt(),gas_amount:BigInt(h),fee_token_amount:BigInt(0)}),Y.toXDR()}async buildRawTransactionSwap(i){let o=De(this.chainType,i);return await this.buildRawTransactionSwapFromParams(o)}async buildRawTransactionSwapFromParams(i){let{amount:o,contractAddress:r,fromAccountAddress:s,fromTokenAddress:d,toAccountAddress:c,toTokenAddress:A,minimumReceiveAmount:g}=i;return(await this.getContract(Bi,r,s).swap({sender:s,amount:BigInt(o),token:pa.Address.contract(Buffer.from(d)).toBuffer(),receive_token:Buffer.from(A),recipient:c,receive_amount_min:BigInt(g)})).toXDR()}send(i){throw new _}getContract(i,o,r){let s={publicKey:r,contractId:o,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new i(s)}};var xs="1.18.0",Os="1.40.0";var tA={"-32700":"ParseError","-32701":"OversizedRequest","-32702":"OversizedResponse","-32600":"InvalidRequest","-32601":"MethodNotFound","-32602":"InvalidParams","-32603":"InternalError","-32604":"ServerBusy","-32000":"CallExecutionFailed","-32001":"UnknownError","-32003":"SubscriptionClosed","-32004":"SubscriptionClosedWithError","-32005":"BatchesNotSupported","-32006":"TooManySubscriptions","-32050":"TransientError","-32002":"TransactionExecutionClientError"},ba=class extends Error{},Xn=class extends ba{constructor(n,i){super(n),this.code=i,this.type=tA[i]??"ServerError"}},Ia=class extends ba{constructor(n,i,o){super(n),this.status=i,this.statusText=o}};var Qs=a=>{throw TypeError(a)},jo=(a,n,i)=>n.has(a)||Qs("Cannot "+i),de=(a,n,i)=>(jo(a,n,"read from private field"),i?i.call(a):n.get(a)),An=(a,n,i)=>n.has(a)?Qs("Cannot add the same private member more than once"):n instanceof WeakSet?n.add(a):n.set(a,i),Mn=(a,n,i,o)=>(jo(a,n,"write to private field"),o?o.call(a,i):n.set(a,i),i),Ks=(a,n,i)=>(jo(a,n,"access private method"),i),nA=(a,n,i,o)=>({set _(r){Mn(a,n,r,i)},get _(){return de(a,n,o)}}),gn,Yi,St,ln,Wi,jn,ya,Us,Ds;function iA(a){let n=new URL(a);return n.protocol=n.protocol.replace("http","ws"),n.toString()}var aA={WebSocketConstructor:typeof WebSocket<"u"?WebSocket:void 0,callTimeout:3e4,reconnectTimeout:3e3,maxReconnects:5},ha=class{constructor(n,i={}){if(An(this,ya),An(this,gn,0),An(this,Yi,0),An(this,St,null),An(this,ln,null),An(this,Wi,new Set),An(this,jn,new Map),this.endpoint=n,this.options={...aA,...i},!this.options.WebSocketConstructor)throw new Error("Missing WebSocket constructor");this.endpoint.startsWith("http")&&(this.endpoint=iA(this.endpoint))}async makeRequest(n,i){let o=await Ks(this,ya,Us).call(this);return new Promise((r,s)=>{Mn(this,gn,de(this,gn)+1),de(this,jn).set(de(this,gn),{resolve:r,reject:s,timeout:setTimeout(()=>{de(this,jn).delete(de(this,gn)),s(new Error(`Request timeout: ${n}`))},this.options.callTimeout)}),o.send(JSON.stringify({jsonrpc:"2.0",id:de(this,gn),method:n,params:i}))}).then(({error:r,result:s})=>{if(r)throw new Xn(r.message,r.code);return s})}async subscribe(n){let i=new Mo(n);return de(this,Wi).add(i),await i.subscribe(this),()=>i.unsubscribe(this)}};gn=new WeakMap;Yi=new WeakMap;St=new WeakMap;ln=new WeakMap;Wi=new WeakMap;jn=new WeakMap;ya=new WeakSet;Us=function(){return de(this,ln)?de(this,ln):(Mn(this,ln,new Promise(a=>{de(this,St)?.close(),Mn(this,St,new this.options.WebSocketConstructor(this.endpoint)),de(this,St).addEventListener("open",()=>{Mn(this,Yi,0),a(de(this,St))}),de(this,St).addEventListener("close",()=>{nA(this,Yi)._++,de(this,Yi)<=this.options.maxReconnects&&setTimeout(()=>{Ks(this,ya,Ds).call(this)},this.options.reconnectTimeout)}),de(this,St).addEventListener("message",({data:n})=>{let i;try{i=JSON.parse(n)}catch(o){console.error(new Error(`Failed to parse RPC message: ${n}`,{cause:o}));return}if("id"in i&&i.id!=null&&de(this,jn).has(i.id)){let{resolve:o,timeout:r}=de(this,jn).get(i.id);clearTimeout(r),o(i)}else if("params"in i){let{params:o}=i;de(this,Wi).forEach(r=>{r.subscriptionId===o.subscription&&o.subscription===r.subscriptionId&&r.onMessage(o.result)})}})})),de(this,ln))};Ds=async function(){return de(this,St)?.close(),Mn(this,ln,null),Promise.allSettled([...de(this,Wi)].map(a=>a.subscribe(this)))};var Mo=class{constructor(n){this.subscriptionId=null,this.subscribed=!1,this.input=n}onMessage(n){this.subscribed&&this.input.onMessage(n)}async unsubscribe(n){let{subscriptionId:i}=this;return this.subscribed=!1,i==null?!1:(this.subscriptionId=null,n.makeRequest(this.input.unsubscribe,[i]))}async subscribe(n){this.subscriptionId=null,this.subscribed=!0;let i=await n.makeRequest(this.input.method,this.input.params);this.subscribed&&(this.subscriptionId=i)}};var Es=a=>{throw TypeError(a)},Ho=(a,n,i)=>n.has(a)||Es("Cannot "+i),_e=(a,n,i)=>(Ho(a,n,"read from private field"),i?i.call(a):n.get(a)),va=(a,n,i)=>n.has(a)?Es("Cannot add the same private member more than once"):n instanceof WeakSet?n.add(a):n.set(a,i),Po=(a,n,i,o)=>(Ho(a,n,"write to private field"),o?o.call(a,i):n.set(a,i),i),oA=(a,n,i)=>(Ho(a,n,"access private method"),i),fi,ot,Gi,Lo,_s,Ra=class{constructor(n){va(this,Lo),va(this,fi,0),va(this,ot),va(this,Gi),Po(this,ot,n)}fetch(n,i){let o=_e(this,ot).fetch??fetch;if(!o)throw new Error("The current environment does not support fetch, you can provide a fetch implementation in the options for SuiHTTPTransport.");return o(n,i)}async request(n){Po(this,fi,_e(this,fi)+1);let i=await this.fetch(_e(this,ot).rpc?.url??_e(this,ot).url,{method:"POST",headers:{"Content-Type":"application/json","Client-Sdk-Type":"typescript","Client-Sdk-Version":xs,"Client-Target-Api-Version":Os,"Client-Request-Method":n.method,..._e(this,ot).rpc?.headers},body:JSON.stringify({jsonrpc:"2.0",id:_e(this,fi),method:n.method,params:n.params})});if(!i.ok)throw new Ia(`Unexpected status code: ${i.status}`,i.status,i.statusText);let o=await i.json();if("error"in o&&o.error!=null)throw new Xn(o.error.message,o.error.code);return o.result}async subscribe(n){let i=await oA(this,Lo,_s).call(this).subscribe(n);return async()=>!!await i()}};fi=new WeakMap;ot=new WeakMap;Gi=new WeakMap;Lo=new WeakSet;_s=function(){if(!_e(this,Gi)){let a=_e(this,ot).WebSocketConstructor??WebSocket;if(!a)throw new Error("The current environment does not support WebSocket, you can provide a WebSocketConstructor in the options for SuiHTTPTransport.");Po(this,Gi,new ha(_e(this,ot).websocket?.url??_e(this,ot).url,{WebSocketConstructor:a,..._e(this,ot).websocket}))}return _e(this,Gi)};var Lt=require("@mysten/bcs");Ie();Xe();var K=require("@mysten/bcs");var FA=/^(?!.*(^(?!@)|[-.@])($|[-.@]))(?:[a-z0-9-]{0,63}(?:\.[a-z0-9-]{0,63})*)?@[a-z0-9-]{0,63}$/i,NA=/^(?!.*(^|[-.])($|[-.]))(?:[a-z0-9-]{0,63}\.)+sui$/i;function sd(a,n="at"){let i=a.toLowerCase(),o;if(i.includes("@")){if(!FA.test(i))throw new Error(`Invalid SuiNS name ${a}`);let[r,s]=i.split("@");o=[...r?r.split("."):[],s]}else{if(!NA.test(i))throw new Error(`Invalid SuiNS name ${a}`);o=i.split(".").slice(0,-1)}return n==="dot"?`${o.join(".")}.sui`:`${o.slice(0,-1).join(".")}@${o[o.length-1]}`}Xe();var TA=BigInt(1e9),mr="0x1",fa="0x2";var Ga=Ve("0x6");var pr=`${fa}::sui::SUI`,ZA=Ve("0x5");Xe();var wA="object",SA="ID",VA="ascii",XA="String",MA="string",jA="String",PA="option",LA="Option";function dd(a){let n=typeof a.body=="object"&&"datatype"in a.body?a.body.datatype:null;return!!n&&j(n.package)===j("0x2")&&n.module==="tx_context"&&n.type==="TxContext"}function Fa(a){if(typeof a=="string")switch(a){case"address":return y.Address;case"bool":return y.Bool;case"u8":return y.U8;case"u16":return y.U16;case"u32":return y.U32;case"u64":return y.U64;case"u128":return y.U128;case"u256":return y.U256;default:throw new Error(`Unknown type signature ${a}`)}if("vector"in a){if(a.vector==="u8")return y.vector(y.U8).transform({input:i=>typeof i=="string"?new TextEncoder().encode(i):i,output:i=>i});let n=Fa(a.vector);return n?y.vector(n):null}if("datatype"in a){let n=j(a.datatype.package);if(n===j(mr)){if(a.datatype.module===VA&&a.datatype.type===XA)return y.String;if(a.datatype.module===MA&&a.datatype.type===jA)return y.String;if(a.datatype.module===PA&&a.datatype.type===LA){let i=Fa(a.datatype.typeParameters[0]);return i?y.vector(i):null}}if(n===j(fa)&&a.datatype.module===wA&&a.datatype.type===SA)return y.Address}return null}function cd(a){return typeof a=="object"&&"Reference"in a?{ref:"&",body:Ti(a.Reference)}:typeof a=="object"&&"MutableReference"in a?{ref:"&mut",body:Ti(a.MutableReference)}:{ref:null,body:Ti(a)}}function Ti(a){if(typeof a=="string")switch(a){case"Address":return"address";case"Bool":return"bool";case"U8":return"u8";case"U16":return"u16";case"U32":return"u32";case"U64":return"u64";case"U128":return"u128";case"U256":return"u256";default:throw new Error(`Unexpected type ${a}`)}if("Vector"in a)return{vector:Ti(a.Vector)};if("Struct"in a)return{datatype:{package:a.Struct.address,module:a.Struct.module,type:a.Struct.name,typeParameters:a.Struct.typeArguments.map(Ti)}};if("TypeParameter"in a)return{typeParameter:a.TypeParameter};throw new Error(`Unexpected type ${JSON.stringify(a)}`)}var Ad=require("@mysten/bcs");Xe();function HA(a){return{$kind:"Pure",Pure:{bytes:a instanceof Uint8Array?(0,Ad.toBase64)(a):a.toBase64()}}}var je={Pure:HA,ObjectRef({objectId:a,digest:n,version:i}){return{$kind:"Object",Object:{$kind:"ImmOrOwnedObject",ImmOrOwnedObject:{digest:n,version:i,objectId:j(a)}}}},SharedObjectRef({objectId:a,mutable:n,initialSharedVersion:i}){return{$kind:"Object",Object:{$kind:"SharedObject",SharedObject:{mutable:n,initialSharedVersion:i,objectId:j(a)}}}},ReceivingRef({objectId:a,digest:n,version:i}){return{$kind:"Object",Object:{$kind:"Receiving",Receiving:{digest:n,version:i,objectId:j(a)}}}}};var yr=require("@mysten/bcs"),ct=require("valibot");Xe();var p=require("valibot");Xe();function Et(a){let n=Object.entries(a).map(([i,o])=>(0,p.object)({[i]:o}));return(0,p.pipe)((0,p.union)(n),(0,p.transform)(i=>({...i,$kind:Object.keys(i)[0]})))}var un=(0,p.pipe)((0,p.string)(),(0,p.transform)(a=>j(a)),(0,p.check)(xe)),Fe=un,Dt=(0,p.string)(),Ye=(0,p.pipe)((0,p.union)([(0,p.string)(),(0,p.pipe)((0,p.number)(),(0,p.integer)())]),(0,p.check)(a=>{try{return BigInt(a),BigInt(a)>=0&&BigInt(a)<=18446744073709551615n}catch{return!1}},"Invalid u64")),dt=(0,p.object)({objectId:un,version:Ye,digest:(0,p.string)()}),ne=(0,p.pipe)((0,p.union)([(0,p.object)({GasCoin:(0,p.literal)(!0)}),(0,p.object)({Input:(0,p.pipe)((0,p.number)(),(0,p.integer)()),type:(0,p.optional)((0,p.literal)("pure"))}),(0,p.object)({Input:(0,p.pipe)((0,p.number)(),(0,p.integer)()),type:(0,p.optional)((0,p.literal)("object"))}),(0,p.object)({Result:(0,p.pipe)((0,p.number)(),(0,p.integer)())}),(0,p.object)({NestedResult:(0,p.tuple)([(0,p.pipe)((0,p.number)(),(0,p.integer)()),(0,p.pipe)((0,p.number)(),(0,p.integer)())])})]),(0,p.transform)(a=>({...a,$kind:Object.keys(a)[0]}))),JA=(0,p.object)({budget:(0,p.nullable)(Ye),price:(0,p.nullable)(Ye),owner:(0,p.nullable)(un),payment:(0,p.nullable)((0,p.array)(dt))}),qp=(0,p.object)({address:(0,p.string)(),module:(0,p.string)(),name:(0,p.string)(),typeParams:(0,p.array)((0,p.string)())}),Cr=(0,p.union)([(0,p.literal)("address"),(0,p.literal)("bool"),(0,p.literal)("u8"),(0,p.literal)("u16"),(0,p.literal)("u32"),(0,p.literal)("u64"),(0,p.literal)("u128"),(0,p.literal)("u256"),(0,p.object)({vector:(0,p.lazy)(()=>Cr)}),(0,p.object)({datatype:(0,p.object)({package:(0,p.string)(),module:(0,p.string)(),type:(0,p.string)(),typeParameters:(0,p.array)((0,p.lazy)(()=>Cr))})}),(0,p.object)({typeParameter:(0,p.pipe)((0,p.number)(),(0,p.integer)())})]),kA=(0,p.object)({ref:(0,p.nullable)((0,p.union)([(0,p.literal)("&"),(0,p.literal)("&mut")])),body:Cr}),zA=(0,p.object)({package:Fe,module:(0,p.string)(),function:(0,p.string)(),typeArguments:(0,p.array)((0,p.string)()),arguments:(0,p.array)(ne),_argumentTypes:(0,p.optional)((0,p.nullable)((0,p.array)(kA)))}),xA=(0,p.object)({name:(0,p.string)(),inputs:(0,p.record)((0,p.string)(),(0,p.union)([ne,(0,p.array)(ne)])),data:(0,p.record)((0,p.string)(),(0,p.unknown)())}),OA=Et({MoveCall:zA,TransferObjects:(0,p.object)({objects:(0,p.array)(ne),address:ne}),SplitCoins:(0,p.object)({coin:ne,amounts:(0,p.array)(ne)}),MergeCoins:(0,p.object)({destination:ne,sources:(0,p.array)(ne)}),Publish:(0,p.object)({modules:(0,p.array)(Dt),dependencies:(0,p.array)(Fe)}),MakeMoveVec:(0,p.object)({type:(0,p.nullable)((0,p.string)()),elements:(0,p.array)(ne)}),Upgrade:(0,p.object)({modules:(0,p.array)(Dt),dependencies:(0,p.array)(Fe),package:Fe,ticket:ne}),$Intent:xA}),gd=Et({ImmOrOwnedObject:dt,SharedObject:(0,p.object)({objectId:Fe,initialSharedVersion:Ye,mutable:(0,p.boolean)()}),Receiving:dt}),QA=Et({Object:gd,Pure:(0,p.object)({bytes:Dt}),UnresolvedPure:(0,p.object)({value:(0,p.unknown)()}),UnresolvedObject:(0,p.object)({objectId:Fe,version:(0,p.optional)((0,p.nullable)(Ye)),digest:(0,p.optional)((0,p.nullable)((0,p.string)())),initialSharedVersion:(0,p.optional)((0,p.nullable)(Ye))})}),br=Et({Object:gd,Pure:(0,p.object)({bytes:Dt})}),Ir=Et({None:(0,p.literal)(!0),Epoch:Ye}),Hn=(0,p.object)({version:(0,p.literal)(2),sender:(0,p.nullish)(un),expiration:(0,p.nullish)(Ir),gasData:JA,inputs:(0,p.array)(QA),commands:(0,p.array)(OA)});var Qe={MoveCall(a){let[n,i="",o=""]="target"in a?a.target.split("::"):[a.package,a.module,a.function];return{$kind:"MoveCall",MoveCall:{package:n,module:i,function:o,typeArguments:a.typeArguments??[],arguments:a.arguments??[]}}},TransferObjects(a,n){return{$kind:"TransferObjects",TransferObjects:{objects:a.map(i=>(0,ct.parse)(ne,i)),address:(0,ct.parse)(ne,n)}}},SplitCoins(a,n){return{$kind:"SplitCoins",SplitCoins:{coin:(0,ct.parse)(ne,a),amounts:n.map(i=>(0,ct.parse)(ne,i))}}},MergeCoins(a,n){return{$kind:"MergeCoins",MergeCoins:{destination:(0,ct.parse)(ne,a),sources:n.map(i=>(0,ct.parse)(ne,i))}}},Publish({modules:a,dependencies:n}){return{$kind:"Publish",Publish:{modules:a.map(i=>typeof i=="string"?i:(0,yr.toBase64)(new Uint8Array(i))),dependencies:n.map(i=>Ve(i))}}},Upgrade({modules:a,dependencies:n,package:i,ticket:o}){return{$kind:"Upgrade",Upgrade:{modules:a.map(r=>typeof r=="string"?r:(0,yr.toBase64)(new Uint8Array(r))),dependencies:n.map(r=>Ve(r)),package:i,ticket:(0,ct.parse)(ne,o)}}},MakeMoveVec({type:a,elements:n}){return{$kind:"MakeMoveVec",MakeMoveVec:{type:a??null,elements:n.map(i=>(0,ct.parse)(ne,i))}}},Intent({name:a,inputs:n={},data:i={}}){return{$kind:"$Intent",$Intent:{name:a,inputs:Object.fromEntries(Object.entries(n).map(([o,r])=>[o,Array.isArray(r)?r.map(s=>(0,ct.parse)(ne,s)):(0,ct.parse)(ne,r)])),data:i}}}};var Jn=require("@mysten/bcs"),Wt=require("valibot");Xe();var _t=require("@mysten/bcs"),u=require("valibot");Ie();var hr=(0,u.object)({digest:(0,u.string)(),objectId:(0,u.string)(),version:(0,u.union)([(0,u.pipe)((0,u.number)(),(0,u.integer)()),(0,u.string)(),(0,u.bigint)()])}),KA=Et({ImmOrOwned:hr,Shared:(0,u.object)({objectId:Fe,initialSharedVersion:Ye,mutable:(0,u.boolean)()}),Receiving:hr}),ld=Et({Object:KA,Pure:(0,u.array)((0,u.pipe)((0,u.number)(),(0,u.integer)()))}),md=(0,u.union)([(0,u.object)({kind:(0,u.literal)("Input"),index:(0,u.pipe)((0,u.number)(),(0,u.integer)()),value:(0,u.unknown)(),type:(0,u.optional)((0,u.literal)("object"))}),(0,u.object)({kind:(0,u.literal)("Input"),index:(0,u.pipe)((0,u.number)(),(0,u.integer)()),value:(0,u.unknown)(),type:(0,u.literal)("pure")})]),UA=(0,u.union)([(0,u.object)({Epoch:(0,u.pipe)((0,u.number)(),(0,u.integer)())}),(0,u.object)({None:(0,u.nullable)((0,u.literal)(!0))})]),ud=(0,u.pipe)((0,u.union)([(0,u.number)(),(0,u.string)(),(0,u.bigint)()]),(0,u.check)(a=>{if(!["string","number","bigint"].includes(typeof a))return!1;try{return BigInt(a),!0}catch{return!1}})),vr=(0,u.union)([(0,u.object)({bool:(0,u.nullable)((0,u.literal)(!0))}),(0,u.object)({u8:(0,u.nullable)((0,u.literal)(!0))}),(0,u.object)({u64:(0,u.nullable)((0,u.literal)(!0))}),(0,u.object)({u128:(0,u.nullable)((0,u.literal)(!0))}),(0,u.object)({address:(0,u.nullable)((0,u.literal)(!0))}),(0,u.object)({signer:(0,u.nullable)((0,u.literal)(!0))}),(0,u.object)({vector:(0,u.lazy)(()=>vr)}),(0,u.object)({struct:(0,u.lazy)(()=>DA)}),(0,u.object)({u16:(0,u.nullable)((0,u.literal)(!0))}),(0,u.object)({u32:(0,u.nullable)((0,u.literal)(!0))}),(0,u.object)({u256:(0,u.nullable)((0,u.literal)(!0))})]),DA=(0,u.object)({address:(0,u.string)(),module:(0,u.string)(),name:(0,u.string)(),typeParams:(0,u.array)(vr)}),EA=(0,u.object)({budget:(0,u.optional)(ud),price:(0,u.optional)(ud),payment:(0,u.optional)((0,u.array)(hr)),owner:(0,u.optional)((0,u.string)())}),_A=[md,(0,u.object)({kind:(0,u.literal)("GasCoin")}),(0,u.object)({kind:(0,u.literal)("Result"),index:(0,u.pipe)((0,u.number)(),(0,u.integer)())}),(0,u.object)({kind:(0,u.literal)("NestedResult"),index:(0,u.pipe)((0,u.number)(),(0,u.integer)()),resultIndex:(0,u.pipe)((0,u.number)(),(0,u.integer)())})],jt=(0,u.union)([..._A]),$A=(0,u.object)({kind:(0,u.literal)("MoveCall"),target:(0,u.pipe)((0,u.string)(),(0,u.check)(a=>a.split("::").length===3)),typeArguments:(0,u.array)((0,u.string)()),arguments:(0,u.array)(jt)}),qA=(0,u.object)({kind:(0,u.literal)("TransferObjects"),objects:(0,u.array)(jt),address:jt}),eg=(0,u.object)({kind:(0,u.literal)("SplitCoins"),coin:jt,amounts:(0,u.array)(jt)}),tg=(0,u.object)({kind:(0,u.literal)("MergeCoins"),destination:jt,sources:(0,u.array)(jt)}),ng=(0,u.object)({kind:(0,u.literal)("MakeMoveVec"),type:(0,u.union)([(0,u.object)({Some:vr}),(0,u.object)({None:(0,u.nullable)((0,u.literal)(!0))})]),objects:(0,u.array)(jt)}),ig=(0,u.object)({kind:(0,u.literal)("Publish"),modules:(0,u.array)((0,u.array)((0,u.pipe)((0,u.number)(),(0,u.integer)()))),dependencies:(0,u.array)((0,u.string)())}),ag=(0,u.object)({kind:(0,u.literal)("Upgrade"),modules:(0,u.array)((0,u.array)((0,u.pipe)((0,u.number)(),(0,u.integer)()))),dependencies:(0,u.array)((0,u.string)()),packageId:(0,u.string)(),ticket:jt}),og=[$A,qA,eg,tg,ig,ag,ng],rg=(0,u.union)([...og]),rC=(0,u.object)({version:(0,u.literal)(1),sender:(0,u.optional)((0,u.string)()),expiration:(0,u.nullish)(UA),gasConfig:EA,inputs:(0,u.array)(md),transactions:(0,u.array)(rg)});function Rr(a){let n=a.inputs.map((i,o)=>{if(i.Object)return{kind:"Input",index:o,value:{Object:i.Object.ImmOrOwnedObject?{ImmOrOwned:i.Object.ImmOrOwnedObject}:i.Object.Receiving?{Receiving:{digest:i.Object.Receiving.digest,version:i.Object.Receiving.version,objectId:i.Object.Receiving.objectId}}:{Shared:{mutable:i.Object.SharedObject.mutable,initialSharedVersion:i.Object.SharedObject.initialSharedVersion,objectId:i.Object.SharedObject.objectId}}},type:"object"};if(i.Pure)return{kind:"Input",index:o,value:{Pure:Array.from((0,_t.fromBase64)(i.Pure.bytes))},type:"pure"};if(i.UnresolvedPure)return{kind:"Input",type:"pure",index:o,value:i.UnresolvedPure.value};if(i.UnresolvedObject)return{kind:"Input",type:"object",index:o,value:i.UnresolvedObject.objectId};throw new Error("Invalid input")});return{version:1,sender:a.sender??void 0,expiration:a.expiration?.$kind==="Epoch"?{Epoch:Number(a.expiration.Epoch)}:a.expiration?{None:!0}:null,gasConfig:{owner:a.gasData.owner??void 0,budget:a.gasData.budget??void 0,price:a.gasData.price??void 0,payment:a.gasData.payment??void 0},inputs:n,transactions:a.commands.map(i=>{if(i.MakeMoveVec)return{kind:"MakeMoveVec",type:i.MakeMoveVec.type===null?{None:!0}:{Some:Vt.parseFromStr(i.MakeMoveVec.type)},objects:i.MakeMoveVec.elements.map(o=>Xt(o,n))};if(i.MergeCoins)return{kind:"MergeCoins",destination:Xt(i.MergeCoins.destination,n),sources:i.MergeCoins.sources.map(o=>Xt(o,n))};if(i.MoveCall)return{kind:"MoveCall",target:`${i.MoveCall.package}::${i.MoveCall.module}::${i.MoveCall.function}`,typeArguments:i.MoveCall.typeArguments,arguments:i.MoveCall.arguments.map(o=>Xt(o,n))};if(i.Publish)return{kind:"Publish",modules:i.Publish.modules.map(o=>Array.from((0,_t.fromBase64)(o))),dependencies:i.Publish.dependencies};if(i.SplitCoins)return{kind:"SplitCoins",coin:Xt(i.SplitCoins.coin,n),amounts:i.SplitCoins.amounts.map(o=>Xt(o,n))};if(i.TransferObjects)return{kind:"TransferObjects",objects:i.TransferObjects.objects.map(o=>Xt(o,n)),address:Xt(i.TransferObjects.address,n)};if(i.Upgrade)return{kind:"Upgrade",modules:i.Upgrade.modules.map(o=>Array.from((0,_t.fromBase64)(o))),dependencies:i.Upgrade.dependencies,packageId:i.Upgrade.package,ticket:Xt(i.Upgrade.ticket,n)};throw new Error(`Unknown transaction ${Object.keys(i)}`)})}}function Xt(a,n){if(a.$kind==="GasCoin")return{kind:"GasCoin"};if(a.$kind==="Result")return{kind:"Result",index:a.Result};if(a.$kind==="NestedResult")return{kind:"NestedResult",index:a.NestedResult[0],resultIndex:a.NestedResult[1]};if(a.$kind==="Input")return n[a.Input];throw new Error(`Invalid argument ${Object.keys(a)}`)}function pd(a){return(0,u.parse)(Hn,{version:2,sender:a.sender??null,expiration:a.expiration?"Epoch"in a.expiration?{Epoch:a.expiration.Epoch}:{None:!0}:null,gasData:{owner:a.gasConfig.owner??null,budget:a.gasConfig.budget?.toString()??null,price:a.gasConfig.price?.toString()??null,payment:a.gasConfig.payment?.map(n=>({digest:n.digest,objectId:n.objectId,version:n.version.toString()}))??null},inputs:a.inputs.map(n=>{if(n.kind==="Input"){if((0,u.is)(ld,n.value)){let i=(0,u.parse)(ld,n.value);if(i.Object){if(i.Object.ImmOrOwned)return{Object:{ImmOrOwnedObject:{objectId:i.Object.ImmOrOwned.objectId,version:String(i.Object.ImmOrOwned.version),digest:i.Object.ImmOrOwned.digest}}};if(i.Object.Shared)return{Object:{SharedObject:{mutable:i.Object.Shared.mutable??null,initialSharedVersion:i.Object.Shared.initialSharedVersion,objectId:i.Object.Shared.objectId}}};if(i.Object.Receiving)return{Object:{Receiving:{digest:i.Object.Receiving.digest,version:String(i.Object.Receiving.version),objectId:i.Object.Receiving.objectId}}};throw new Error("Invalid object input")}return{Pure:{bytes:(0,_t.toBase64)(new Uint8Array(i.Pure))}}}return n.type==="object"?{UnresolvedObject:{objectId:n.value}}:{UnresolvedPure:{value:n.value}}}throw new Error("Invalid input")}),commands:a.transactions.map(n=>{switch(n.kind){case"MakeMoveVec":return{MakeMoveVec:{type:"Some"in n.type?Vt.tagToString(n.type.Some):null,elements:n.objects.map(i=>Mt(i))}};case"MergeCoins":return{MergeCoins:{destination:Mt(n.destination),sources:n.sources.map(i=>Mt(i))}};case"MoveCall":{let[i,o,r]=n.target.split("::");return{MoveCall:{package:i,module:o,function:r,typeArguments:n.typeArguments,arguments:n.arguments.map(s=>Mt(s))}}}case"Publish":return{Publish:{modules:n.modules.map(i=>(0,_t.toBase64)(Uint8Array.from(i))),dependencies:n.dependencies}};case"SplitCoins":return{SplitCoins:{coin:Mt(n.coin),amounts:n.amounts.map(i=>Mt(i))}};case"TransferObjects":return{TransferObjects:{objects:n.objects.map(i=>Mt(i)),address:Mt(n.address)}};case"Upgrade":return{Upgrade:{modules:n.modules.map(i=>(0,_t.toBase64)(Uint8Array.from(i))),dependencies:n.dependencies,package:n.packageId,ticket:Mt(n.ticket)}}}throw new Error(`Unknown transaction ${Object.keys(n)}`)})})}function Mt(a){switch(a.kind){case"GasCoin":return{GasCoin:!0};case"Result":return{Result:a.index};case"NestedResult":return{NestedResult:[a.index,a.resultIndex]};case"Input":return{Input:a.index}}}var R=require("valibot");function Zi(a){return(0,R.union)(Object.entries(a).map(([n,i])=>(0,R.object)({[n]:i})))}var At=Zi({GasCoin:(0,R.literal)(!0),Input:(0,R.pipe)((0,R.number)(),(0,R.integer)()),Result:(0,R.pipe)((0,R.number)(),(0,R.integer)()),NestedResult:(0,R.tuple)([(0,R.pipe)((0,R.number)(),(0,R.integer)()),(0,R.pipe)((0,R.number)(),(0,R.integer)())])}),sg=(0,R.object)({budget:(0,R.nullable)(Ye),price:(0,R.nullable)(Ye),owner:(0,R.nullable)(un),payment:(0,R.nullable)((0,R.array)(dt))}),dg=(0,R.object)({package:Fe,module:(0,R.string)(),function:(0,R.string)(),typeArguments:(0,R.array)((0,R.string)()),arguments:(0,R.array)(At)}),cg=(0,R.object)({name:(0,R.string)(),inputs:(0,R.record)((0,R.string)(),(0,R.union)([At,(0,R.array)(At)])),data:(0,R.record)((0,R.string)(),(0,R.unknown)())}),Ag=Zi({MoveCall:dg,TransferObjects:(0,R.object)({objects:(0,R.array)(At),address:At}),SplitCoins:(0,R.object)({coin:At,amounts:(0,R.array)(At)}),MergeCoins:(0,R.object)({destination:At,sources:(0,R.array)(At)}),Publish:(0,R.object)({modules:(0,R.array)(Dt),dependencies:(0,R.array)(Fe)}),MakeMoveVec:(0,R.object)({type:(0,R.nullable)((0,R.string)()),elements:(0,R.array)(At)}),Upgrade:(0,R.object)({modules:(0,R.array)(Dt),dependencies:(0,R.array)(Fe),package:Fe,ticket:At}),$Intent:cg}),gg=Zi({ImmOrOwnedObject:dt,SharedObject:(0,R.object)({objectId:Fe,initialSharedVersion:Ye,mutable:(0,R.boolean)()}),Receiving:dt}),lg=Zi({Object:gg,Pure:(0,R.object)({bytes:Dt}),UnresolvedPure:(0,R.object)({value:(0,R.unknown)()}),UnresolvedObject:(0,R.object)({objectId:Fe,version:(0,R.optional)((0,R.nullable)(Ye)),digest:(0,R.optional)((0,R.nullable)((0,R.string)())),initialSharedVersion:(0,R.optional)((0,R.nullable)(Ye))})}),ug=Zi({None:(0,R.literal)(!0),Epoch:Ye}),Cd=(0,R.object)({version:(0,R.literal)(2),sender:(0,R.nullish)(un),expiration:(0,R.nullish)(ug),gasData:sg,inputs:(0,R.array)(lg),commands:(0,R.array)(Ag)});var Id=require("valibot");Ie();var mg=50,pg=1000n,Cg=5e10;async function yd(a,n,i){return await vg(a,n),await hg(a,n),n.onlyTransactionKind||(await bg(a,n),await Ig(a,n),await yg(a,n)),await Rg(a),await i()}async function bg(a,n){a.gasConfig.price||(a.gasConfig.price=String(await mn(n).getReferenceGasPrice()))}async function Ig(a,n){if(a.gasConfig.budget)return;let i=await mn(n).dryRunTransactionBlock({transactionBlock:a.build({overrides:{gasData:{budget:String(Cg),payment:[]}}})});if(i.effects.status.status!=="success")throw new Error(`Dry run failed, could not automatically determine a budget: ${i.effects.status.error}`,{cause:i});let o=pg*BigInt(a.gasConfig.price||1n),r=BigInt(i.effects.gasUsed.computationCost)+o,s=r+BigInt(i.effects.gasUsed.storageCost)-BigInt(i.effects.gasUsed.storageRebate);a.gasConfig.budget=String(s>r?s:r)}async function yg(a,n){if(!a.gasConfig.payment){let o=(await mn(n).getCoins({owner:a.gasConfig.owner||a.sender,coinType:pr})).data.filter(r=>!a.inputs.find(d=>d.Object?.ImmOrOwnedObject?r.coinObjectId===d.Object.ImmOrOwnedObject.objectId:!1)).map(r=>({objectId:r.coinObjectId,digest:r.digest,version:r.version}));if(!o.length)throw new Error("No valid gas coins found for the transaction.");a.gasConfig.payment=o.map(r=>(0,Id.parse)(dt,r))}}async function hg(a,n){let i=a.inputs.filter(l=>l.UnresolvedObject&&!(l.UnresolvedObject.version||l.UnresolvedObject?.initialSharedVersion)),o=[...new Set(i.map(l=>Ve(l.UnresolvedObject.objectId)))],r=o.length?fg(o,mg):[],s=(await Promise.all(r.map(l=>mn(n).multiGetObjects({ids:l,options:{showOwner:!0}})))).flat(),d=new Map(o.map((l,m)=>[l,s[m]])),c=Array.from(d).filter(([l,m])=>m.error).map(([l,m])=>JSON.stringify(m.error));if(c.length)throw new Error(`The following input objects are invalid: ${c.join(", ")}`);let A=s.map(l=>{if(l.error||!l.data)throw new Error(`Failed to fetch object: ${l.error}`);let m=l.data.owner,I=m&&typeof m=="object"&&"Shared"in m?m.Shared.initial_shared_version:null;return{objectId:l.data.objectId,digest:l.data.digest,version:l.data.version,initialSharedVersion:I}}),g=new Map(o.map((l,m)=>[l,A[m]]));for(let[l,m]of a.inputs.entries()){if(!m.UnresolvedObject)continue;let I,h=j(m.UnresolvedObject.objectId),W=g.get(h);m.UnresolvedObject.initialSharedVersion??W?.initialSharedVersion?I=je.SharedObjectRef({objectId:h,initialSharedVersion:m.UnresolvedObject.initialSharedVersion||W?.initialSharedVersion,mutable:Bg(a,l)}):Yg(a,l)&&(I=je.ReceivingRef({objectId:h,digest:m.UnresolvedObject.digest??W?.digest,version:m.UnresolvedObject.version??W?.version})),a.inputs[a.inputs.indexOf(m)]=I??je.ObjectRef({objectId:h,digest:m.UnresolvedObject.digest??W?.digest,version:m.UnresolvedObject.version??W?.version})}}async function vg(a,n){let{inputs:i,commands:o}=a,r=[],s=new Set;o.forEach(c=>{if(c.MoveCall){if(c.MoveCall._argumentTypes)return;if(c.MoveCall.arguments.map(l=>l.$kind==="Input"?a.inputs[l.Input]:null).some(l=>l?.UnresolvedPure||l?.UnresolvedObject)){let l=`${c.MoveCall.package}::${c.MoveCall.module}::${c.MoveCall.function}`;s.add(l),r.push(c.MoveCall)}}switch(c.$kind){case"SplitCoins":c.SplitCoins.amounts.forEach(A=>{bd(A,y.U64,a)});break;case"TransferObjects":bd(c.TransferObjects.address,y.Address,a);break}});let d=new Map;if(s.size>0){let c=mn(n);await Promise.all([...s].map(async A=>{let[g,l,m]=A.split("::"),I=await c.getNormalizedMoveFunction({package:g,module:l,function:m});d.set(A,I.parameters.map(h=>cd(h)))}))}r.length&&await Promise.all(r.map(async c=>{let A=d.get(`${c.package}::${c.module}::${c.function}`);if(!A)return;let l=A.length>0&&dd(A.at(-1))?A.slice(0,A.length-1):A;c._argumentTypes=l})),o.forEach(c=>{if(!c.MoveCall)return;let A=c.MoveCall,g=`${A.package}::${A.module}::${A.function}`,l=A._argumentTypes;if(l){if(l.length!==c.MoveCall.arguments.length)throw new Error(`Incorrect number of arguments for ${g}`);l.forEach((m,I)=>{let h=A.arguments[I];if(h.$kind!=="Input")return;let W=i[h.Input];if(!W.UnresolvedPure&&!W.UnresolvedObject)return;let Y=W.UnresolvedPure?.value??W.UnresolvedObject?.objectId,f=Fa(m.body);if(f){h.type="pure",i[i.indexOf(W)]=je.Pure(f.serialize(Y));return}if(typeof Y!="string")throw new Error(`Expect the argument to be an object id string, got ${JSON.stringify(Y,null,2)}`);h.type="object";let T=W.UnresolvedPure?{$kind:"UnresolvedObject",UnresolvedObject:{objectId:Y}}:W;i[h.Input]=T})}})}function Rg(a){a.inputs.forEach((n,i)=>{if(n.$kind!=="Object"&&n.$kind!=="Pure")throw new Error(`Input at index ${i} has not been resolved. Expected a Pure or Object input, but found ${JSON.stringify(n)}`)})}function bd(a,n,i){if(a.$kind!=="Input")return;let o=i.inputs[a.Input];o.$kind==="UnresolvedPure"&&(i.inputs[a.Input]=je.Pure(n.serialize(o.UnresolvedPure.value)))}function Bg(a,n){let i=!1;return a.getInputUses(n,(o,r)=>{if(r.MoveCall&&r.MoveCall._argumentTypes){let s=r.MoveCall.arguments.indexOf(o);i=r.MoveCall._argumentTypes[s].ref!=="&"||i}(r.$kind==="MakeMoveVec"||r.$kind==="MergeCoins"||r.$kind==="SplitCoins")&&(i=!0)}),i}function Yg(a,n){let i=!1;return a.getInputUses(n,(o,r)=>{if(r.MoveCall&&r.MoveCall._argumentTypes){let s=r.MoveCall.arguments.indexOf(o);i=Wg(r.MoveCall._argumentTypes[s])||i}}),i}function Wg(a){return typeof a.body!="object"||!("datatype"in a.body)?!1:a.body.datatype.package==="0x2"&&a.body.datatype.module==="transfer"&&a.body.datatype.type==="Receiving"}function mn(a){if(!a.client)throw new Error("No sui client passed to Transaction#build, but transaction data was not sufficient to build offline.");return a.client}function fg(a,n){return Array.from({length:Math.ceil(a.length/n)},(i,o)=>a.slice(o*n,o*n+n))}function hd(a){function n(i){return a(i)}return n.system=()=>n("0x5"),n.clock=()=>n("0x6"),n.random=()=>n("0x8"),n.denyList=()=>n("0x403"),n.option=({type:i,value:o})=>r=>r.moveCall({typeArguments:[i],target:`0x1::option::${o===null?"none":"some"}`,arguments:o===null?[]:[r.object(o)]}),n}var vd=require("@mysten/bcs");Ie();function Rd(a){function n(i,o){if(typeof i=="string")return a(wi(i).serialize(o));if(i instanceof Uint8Array||(0,vd.isSerializedBcs)(i))return a(i);throw new Error("tx.pure must be called either a bcs type name, or a serialized bcs value")}return n.u8=i=>a(y.U8.serialize(i)),n.u16=i=>a(y.U16.serialize(i)),n.u32=i=>a(y.U32.serialize(i)),n.u64=i=>a(y.U64.serialize(i)),n.u128=i=>a(y.U128.serialize(i)),n.u256=i=>a(y.U256.serialize(i)),n.bool=i=>a(y.Bool.serialize(i)),n.string=i=>a(y.String.serialize(i)),n.address=i=>a(y.Address.serialize(i)),n.id=n.address,n.vector=(i,o)=>a(y.vector(wi(i)).serialize(o)),n.option=(i,o)=>a(y.option(wi(i)).serialize(o)),n}function wi(a){switch(a){case"u8":return y.u8();case"u16":return y.u16();case"u32":return y.u32();case"u64":return y.u64();case"u128":return y.u128();case"u256":return y.u256();case"bool":return y.bool();case"string":return y.string();case"id":case"address":return y.Address}let n=a.match(/^(vector|option)<(.+)>$/);if(n){let[i,o]=n.slice(1);return i==="vector"?y.vector(wi(o)):y.option(wi(o))}throw new Error(`Invalid Pure type name: ${a}`)}var fd=require("@mysten/bcs"),Na=require("valibot");Ie();Xe();var Bd=require("@noble/hashes/blake2b");function Yd(a,n){let i=Array.from(`${a}::`).map(r=>r.charCodeAt(0)),o=new Uint8Array(i.length+n.length);return o.set(i),o.set(n,i.length),(0,Bd.blake2b)(o,{dkLen:32})}function Wd(a){return j(a).replace("0x","")}var $t=class a{constructor(n){this.version=2,this.sender=n?.sender??null,this.expiration=n?.expiration??null,this.inputs=n?.inputs??[],this.commands=n?.commands??[],this.gasData=n?.gasData??{budget:null,price:null,owner:null,payment:null}}static fromKindBytes(n){let o=y.TransactionKind.parse(n).ProgrammableTransaction;if(!o)throw new Error("Unable to deserialize from bytes.");return a.restore({version:2,sender:null,expiration:null,gasData:{budget:null,owner:null,payment:null,price:null},inputs:o.inputs,commands:o.commands})}static fromBytes(n){let o=y.TransactionData.parse(n)?.V1,r=o.kind.ProgrammableTransaction;if(!o||!r)throw new Error("Unable to deserialize from bytes.");return a.restore({version:2,sender:o.sender,expiration:o.expiration,gasData:o.gasData,inputs:r.inputs,commands:r.commands})}static restore(n){return n.version===2?new a((0,Na.parse)(Hn,n)):new a((0,Na.parse)(Hn,pd(n)))}static getDigestFromBytes(n){let i=Yd("TransactionData",n);return(0,fd.toBase58)(i)}get gasConfig(){return this.gasData}set gasConfig(n){this.gasData=n}build({maxSizeBytes:n=1/0,overrides:i,onlyTransactionKind:o}={}){let r=this.inputs,s=this.commands,d={ProgrammableTransaction:{inputs:r,commands:s}};if(o)return y.TransactionKind.serialize(d,{maxSize:n}).toBytes();let c=i?.expiration??this.expiration,A=i?.sender??this.sender,g={...this.gasData,...i?.gasConfig,...i?.gasData};if(!A)throw new Error("Missing transaction sender");if(!g.budget)throw new Error("Missing gas budget");if(!g.payment)throw new Error("Missing gas payment");if(!g.price)throw new Error("Missing gas price");let l={sender:Wd(A),expiration:c||{None:!0},gasData:{payment:g.payment,owner:Wd(this.gasData.owner??A),price:BigInt(g.price),budget:BigInt(g.budget)},kind:{ProgrammableTransaction:{inputs:r,commands:s}}};return y.TransactionData.serialize({V1:l},{maxSize:n}).toBytes()}addInput(n,i){let o=this.inputs.length;return this.inputs.push(i),{Input:o,type:n,$kind:"Input"}}getInputUses(n,i){this.mapArguments((o,r)=>(o.$kind==="Input"&&o.Input===n&&i(o,r),o))}mapArguments(n){for(let i of this.commands)switch(i.$kind){case"MoveCall":i.MoveCall.arguments=i.MoveCall.arguments.map(r=>n(r,i));break;case"TransferObjects":i.TransferObjects.objects=i.TransferObjects.objects.map(r=>n(r,i)),i.TransferObjects.address=n(i.TransferObjects.address,i);break;case"SplitCoins":i.SplitCoins.coin=n(i.SplitCoins.coin,i),i.SplitCoins.amounts=i.SplitCoins.amounts.map(r=>n(r,i));break;case"MergeCoins":i.MergeCoins.destination=n(i.MergeCoins.destination,i),i.MergeCoins.sources=i.MergeCoins.sources.map(r=>n(r,i));break;case"MakeMoveVec":i.MakeMoveVec.elements=i.MakeMoveVec.elements.map(r=>n(r,i));break;case"Upgrade":i.Upgrade.ticket=n(i.Upgrade.ticket,i);break;case"$Intent":let o=i.$Intent.inputs;i.$Intent.inputs={};for(let[r,s]of Object.entries(o))i.$Intent.inputs[r]=Array.isArray(s)?s.map(d=>n(d,i)):n(s,i);break;case"Publish":break;default:throw new Error(`Unexpected transaction kind: ${i.$kind}`)}}replaceCommand(n,i){if(!Array.isArray(i)){this.commands[n]=i;return}let o=i.length-1;this.commands.splice(n,1,...i),o!==0&&this.mapArguments(r=>{switch(r.$kind){case"Result":r.Result>n&&(r.Result+=o);break;case"NestedResult":r.NestedResult[0]>n&&(r.NestedResult[0]+=o);break}return r})}getDigest(){let n=this.build({onlyTransactionKind:!1});return a.getDigestFromBytes(n)}snapshot(){return(0,Na.parse)(Hn,this)}};Xe();function Br(a){if(typeof a=="string")return j(a);if(a.Object)return a.Object.ImmOrOwnedObject?j(a.Object.ImmOrOwnedObject.objectId):a.Object.Receiving?j(a.Object.Receiving.objectId):j(a.Object.SharedObject.objectId);if(a.UnresolvedObject)return j(a.UnresolvedObject.objectId)}var Nd=a=>{throw TypeError(a)},Gr=(a,n,i)=>n.has(a)||Nd("Cannot "+i),x=(a,n,i)=>(Gr(a,n,"read from private field"),i?i.call(a):n.get(a)),Si=(a,n,i)=>n.has(a)?Nd("Cannot add the same private member more than once"):n instanceof WeakSet?n.add(a):n.set(a,i),pn=(a,n,i,o)=>(Gr(a,n,"write to private field"),o?o.call(a,i):n.set(a,i),i),Pt=(a,n,i)=>(Gr(a,n,"access private method"),i),Xi,Mi,Cn,U,gt,Ta,Fr,Wr,Nr;function Gd(a,n=1/0){let i={$kind:"Result",Result:a},o=[],r=s=>o[s]??(o[s]={$kind:"NestedResult",NestedResult:[a,s]});return new Proxy(i,{set(){throw new Error("The transaction result is a proxy, and does not support setting properties directly")},get(s,d){if(d in s)return Reflect.get(s,d);if(d===Symbol.iterator)return function*(){let A=0;for(;A<n;)yield r(A),A++};if(typeof d=="symbol")return;let c=parseInt(d,10);if(!(Number.isNaN(c)||c<0))return r(c)}})}var Td=Symbol.for("@mysten/transaction");function Za(a){return!!a&&typeof a=="object"&&a[Td]===!0}var Fd={buildPlugins:new Map,serializationPlugins:new Map},Yr=Symbol.for("@mysten/transaction/registry");function Vi(){try{let a=globalThis;return a[Yr]||(a[Yr]=Fd),a[Yr]}catch{return Fd}}var Gg=class fr{constructor(){Si(this,gt),Si(this,Xi),Si(this,Mi),Si(this,Cn,new Map),Si(this,U),this.object=hd(i=>{if(typeof i=="function")return this.object(i(this));if(typeof i=="object"&&(0,Wt.is)(ne,i))return i;let o=Br(i),r=x(this,U).inputs.find(s=>o===Br(s));return r?.Object?.SharedObject&&typeof i=="object"&&i.Object?.SharedObject&&(r.Object.SharedObject.mutable=r.Object.SharedObject.mutable||i.Object.SharedObject.mutable),r?{$kind:"Input",Input:x(this,U).inputs.indexOf(r),type:"object"}:x(this,U).addInput("object",typeof i=="string"?{$kind:"UnresolvedObject",UnresolvedObject:{objectId:j(i)}}:i)});let n=Vi();pn(this,U,new $t),pn(this,Mi,[...n.buildPlugins.values()]),pn(this,Xi,[...n.serializationPlugins.values()])}static fromKind(n){let i=new fr;return pn(i,U,$t.fromKindBytes(typeof n=="string"?(0,Jn.fromBase64)(n):n)),i}static from(n){let i=new fr;return Za(n)?pn(i,U,new $t(n.getData())):typeof n!="string"||!n.startsWith("{")?pn(i,U,$t.fromBytes(typeof n=="string"?(0,Jn.fromBase64)(n):n)):pn(i,U,$t.restore(JSON.parse(n))),i}static registerGlobalSerializationPlugin(n,i){Vi().serializationPlugins.set(n,i??n)}static unregisterGlobalSerializationPlugin(n){Vi().serializationPlugins.delete(n)}static registerGlobalBuildPlugin(n,i){Vi().buildPlugins.set(n,i??n)}static unregisterGlobalBuildPlugin(n){Vi().buildPlugins.delete(n)}addSerializationPlugin(n){x(this,Xi).push(n)}addBuildPlugin(n){x(this,Mi).push(n)}addIntentResolver(n,i){if(x(this,Cn).has(n)&&x(this,Cn).get(n)!==i)throw new Error(`Intent resolver for ${n} already exists`);x(this,Cn).set(n,i)}setSender(n){x(this,U).sender=n}setSenderIfNotSet(n){x(this,U).sender||(x(this,U).sender=n)}setExpiration(n){x(this,U).expiration=n?(0,Wt.parse)(Ir,n):null}setGasPrice(n){x(this,U).gasConfig.price=String(n)}setGasBudget(n){x(this,U).gasConfig.budget=String(n)}setGasBudgetIfNotSet(n){x(this,U).gasData.budget==null&&(x(this,U).gasConfig.budget=String(n))}setGasOwner(n){x(this,U).gasConfig.owner=n}setGasPayment(n){x(this,U).gasConfig.payment=n.map(i=>(0,Wt.parse)(dt,i))}get blockData(){return Rr(x(this,U).snapshot())}getData(){return x(this,U).snapshot()}get[Td](){return!0}get pure(){return Object.defineProperty(this,"pure",{enumerable:!1,value:Rd(n=>(0,Jn.isSerializedBcs)(n)?x(this,U).addInput("pure",{$kind:"Pure",Pure:{bytes:n.toBase64()}}):x(this,U).addInput("pure",(0,Wt.is)(br,n)?(0,Wt.parse)(br,n):n instanceof Uint8Array?je.Pure(n):{$kind:"UnresolvedPure",UnresolvedPure:{value:n}}))}),this.pure}get gas(){return{$kind:"GasCoin",GasCoin:!0}}objectRef(...n){return this.object(je.ObjectRef(...n))}receivingRef(...n){return this.object(je.ReceivingRef(...n))}sharedObjectRef(...n){return this.object(je.SharedObjectRef(...n))}add(n){if(typeof n=="function")return n(this);let i=x(this,U).commands.push(n);return Gd(i-1)}splitCoins(n,i){let o=Qe.SplitCoins(typeof n=="string"?this.object(n):Pt(this,gt,Fr).call(this,n),i.map(s=>typeof s=="number"||typeof s=="bigint"||typeof s=="string"?this.pure.u64(s):Pt(this,gt,Ta).call(this,s))),r=x(this,U).commands.push(o);return Gd(r-1,i.length)}mergeCoins(n,i){return this.add(Qe.MergeCoins(this.object(n),i.map(o=>this.object(o))))}publish({modules:n,dependencies:i}){return this.add(Qe.Publish({modules:n,dependencies:i}))}upgrade({modules:n,dependencies:i,package:o,ticket:r}){return this.add(Qe.Upgrade({modules:n,dependencies:i,package:o,ticket:this.object(r)}))}moveCall({arguments:n,...i}){return this.add(Qe.MoveCall({...i,arguments:n?.map(o=>Pt(this,gt,Ta).call(this,o))}))}transferObjects(n,i){return this.add(Qe.TransferObjects(n.map(o=>this.object(o)),typeof i=="string"?this.pure.address(i):Pt(this,gt,Ta).call(this,i)))}makeMoveVec({type:n,elements:i}){return this.add(Qe.MakeMoveVec({type:n,elements:i.map(o=>this.object(o))}))}serialize(){return JSON.stringify(Rr(x(this,U).snapshot()))}async toJSON(n={}){return await this.prepareForSerialization(n),JSON.stringify((0,Wt.parse)(Cd,x(this,U).snapshot()),(i,o)=>typeof o=="bigint"?o.toString():o,2)}async sign(n){let{signer:i,...o}=n,r=await this.build(o);return i.signTransaction(r)}async build(n={}){return await this.prepareForSerialization(n),await Pt(this,gt,Wr).call(this,n),x(this,U).build({onlyTransactionKind:n.onlyTransactionKind})}async getDigest(n={}){return await Pt(this,gt,Wr).call(this,n),x(this,U).getDigest()}async prepareForSerialization(n){let i=new Set;for(let r of x(this,U).commands)r.$Intent&&i.add(r.$Intent.name);let o=[...x(this,Xi)];for(let r of i)if(!n.supportedIntents?.includes(r)){if(!x(this,Cn).has(r))throw new Error(`Missing intent resolver for ${r}`);o.push(x(this,Cn).get(r))}await Pt(this,gt,Nr).call(this,o,n)}};Xi=new WeakMap;Mi=new WeakMap;Cn=new WeakMap;U=new WeakMap;gt=new WeakSet;Ta=function(a){return(0,Jn.isSerializedBcs)(a)?this.pure(a):Pt(this,gt,Fr).call(this,a)};Fr=function(a){return typeof a=="function"?(0,Wt.parse)(ne,a(this)):(0,Wt.parse)(ne,a)};Wr=async function(a){if(!a.onlyTransactionKind&&!x(this,U).sender)throw new Error("Missing transaction sender");await Pt(this,gt,Nr).call(this,[...x(this,Mi),yd],a)};Nr=async function(a,n){let i=o=>{if(o>=a.length)return()=>{};let r=a[o];return async()=>{let s=i(o+1),d=!1,c=!1;if(await r(x(this,U),n,async()=>{if(d)throw new Error(`next() was call multiple times in TransactionPlugin ${o}`);d=!0,await s(),c=!0}),!d)throw new Error(`next() was not called in TransactionPlugin ${o}`);if(!c)throw new Error(`next() was not awaited in TransactionPlugin ${o}`)}};await i(0)()};var ft=Gg;var qt=require("valibot");Ie();Xe();var wa="CoinWithBalance",Zd=Ni("0x2::sui::SUI");function oe({type:a=Zd,balance:n,useGasCoin:i=!0}){return o=>{o.addIntentResolver(wa,Ng);let r=a==="gas"?a:Ni(a);return o.add(Qe.Intent({name:wa,inputs:{},data:{type:r===Zd&&i?"gas":r,balance:BigInt(n)}}))}}var Fg=(0,qt.object)({type:(0,qt.string)(),balance:(0,qt.bigint)()});async function Ng(a,n,i){let o=new Set,r=new Map;if(!a.sender)throw new Error("Sender must be set to resolve CoinWithBalance");for(let g of a.commands)if(g.$kind==="$Intent"&&g.$Intent.name===wa){let{type:l,balance:m}=(0,qt.parse)(Fg,g.$Intent.data);l!=="gas"&&m>0n&&o.add(l),r.set(l,(r.get(l)??0n)+m)}let s=new Set;for(let g of a.inputs)g.Object?.ImmOrOwnedObject&&s.add(g.Object.ImmOrOwnedObject.objectId),g.UnresolvedObject?.objectId&&s.add(g.UnresolvedObject.objectId);let d=new Map,c=mn(n);await Promise.all([...o].map(async g=>{d.set(g,await Tg({coinType:g,balance:r.get(g),client:c,owner:a.sender,usedIds:s}))}));let A=new Map;A.set("gas",{$kind:"GasCoin",GasCoin:!0});for(let[g,l]of a.commands.entries()){if(l.$kind!=="$Intent"||l.$Intent.name!==wa)continue;let{type:m,balance:I}=l.$Intent.data;if(I===0n){a.replaceCommand(g,Qe.MoveCall({target:"0x2::coin::zero",typeArguments:[m]}));continue}let h=[];if(!A.has(m)){let[W,...Y]=d.get(m).map(f=>a.addInput("object",je.ObjectRef({objectId:f.coinObjectId,digest:f.digest,version:f.version})));Y.length>0&&h.push(Qe.MergeCoins(W,Y)),A.set(m,W)}h.push(Qe.SplitCoins(A.get(m),[a.addInput("pure",je.Pure(y.u64().serialize(I)))])),a.replaceCommand(g,h),a.mapArguments(W=>W.$kind==="Result"&&W.Result===g?{$kind:"NestedResult",NestedResult:[g+h.length-1,0]}:W)}return i()}async function Tg({coinType:a,balance:n,client:i,owner:o,usedIds:r}){let s=n,d=[];return c();async function c(A=null){let{data:g,hasNextPage:l,nextCursor:m}=await i.getCoins({owner:o,coinType:a,cursor:A}),I=g.sort((h,W)=>Number(BigInt(W.balance)-BigInt(h.balance)));for(let h of I){if(r.has(h.coinObjectId))continue;let W=BigInt(h.balance);if(d.push(h),s-=W,s<=0)return d}if(l)return c(m);throw new Error(`Not enough coins of type ${a} to satisfy requested balance`)}}Xe();var Zg=Symbol.for("@mysten/SuiClient");var Ht=class{get[Zg](){return!0}constructor(n){this.transport=n.transport??new Ra({url:n.url})}async getRpcApiVersion(){return(await this.transport.request({method:"rpc.discover",params:[]})).info.version}async getCoins(n){if(!n.owner||!xe(j(n.owner)))throw new Error("Invalid Sui address");return await this.transport.request({method:"suix_getCoins",params:[n.owner,n.coinType,n.cursor,n.limit]})}async getAllCoins(n){if(!n.owner||!xe(j(n.owner)))throw new Error("Invalid Sui address");return await this.transport.request({method:"suix_getAllCoins",params:[n.owner,n.cursor,n.limit]})}async getBalance(n){if(!n.owner||!xe(j(n.owner)))throw new Error("Invalid Sui address");return await this.transport.request({method:"suix_getBalance",params:[n.owner,n.coinType]})}async getAllBalances(n){if(!n.owner||!xe(j(n.owner)))throw new Error("Invalid Sui address");return await this.transport.request({method:"suix_getAllBalances",params:[n.owner]})}async getCoinMetadata(n){return await this.transport.request({method:"suix_getCoinMetadata",params:[n.coinType]})}async getTotalSupply(n){return await this.transport.request({method:"suix_getTotalSupply",params:[n.coinType]})}async call(n,i){return await this.transport.request({method:n,params:i})}async getMoveFunctionArgTypes(n){return await this.transport.request({method:"sui_getMoveFunctionArgTypes",params:[n.package,n.module,n.function]})}async getNormalizedMoveModulesByPackage(n){return await this.transport.request({method:"sui_getNormalizedMoveModulesByPackage",params:[n.package]})}async getNormalizedMoveModule(n){return await this.transport.request({method:"sui_getNormalizedMoveModule",params:[n.package,n.module]})}async getNormalizedMoveFunction(n){return await this.transport.request({method:"sui_getNormalizedMoveFunction",params:[n.package,n.module,n.function]})}async getNormalizedMoveStruct(n){return await this.transport.request({method:"sui_getNormalizedMoveStruct",params:[n.package,n.module,n.struct]})}async getOwnedObjects(n){if(!n.owner||!xe(j(n.owner)))throw new Error("Invalid Sui address");return await this.transport.request({method:"suix_getOwnedObjects",params:[n.owner,{filter:n.filter,options:n.options},n.cursor,n.limit]})}async getObject(n){if(!n.id||!Pn(Ve(n.id)))throw new Error("Invalid Sui Object id");return await this.transport.request({method:"sui_getObject",params:[n.id,n.options]})}async tryGetPastObject(n){return await this.transport.request({method:"sui_tryGetPastObject",params:[n.id,n.version,n.options]})}async multiGetObjects(n){if(n.ids.forEach(o=>{if(!o||!Pn(Ve(o)))throw new Error(`Invalid Sui Object id ${o}`)}),n.ids.length!==new Set(n.ids).size)throw new Error(`Duplicate object ids in batch call ${n.ids}`);return await this.transport.request({method:"sui_multiGetObjects",params:[n.ids,n.options]})}async queryTransactionBlocks(n){return await this.transport.request({method:"suix_queryTransactionBlocks",params:[{filter:n.filter,options:n.options},n.cursor,n.limit,(n.order||"descending")==="descending"]})}async getTransactionBlock(n){if(!Ya(n.digest))throw new Error("Invalid Transaction digest");return await this.transport.request({method:"sui_getTransactionBlock",params:[n.digest,n.options]})}async multiGetTransactionBlocks(n){if(n.digests.forEach(o=>{if(!Ya(o))throw new Error(`Invalid Transaction digest ${o}`)}),n.digests.length!==new Set(n.digests).size)throw new Error(`Duplicate digests in batch call ${n.digests}`);return await this.transport.request({method:"sui_multiGetTransactionBlocks",params:[n.digests,n.options]})}async executeTransactionBlock({transactionBlock:n,signature:i,options:o,requestType:r}){let s=await this.transport.request({method:"sui_executeTransactionBlock",params:[typeof n=="string"?n:(0,Lt.toBase64)(n),Array.isArray(i)?i:[i],o]});if(r==="WaitForLocalExecution")try{await this.waitForTransaction({digest:s.digest})}catch{}return s}async signAndExecuteTransaction({transaction:n,signer:i,...o}){let r;n instanceof Uint8Array?r=n:(n.setSenderIfNotSet(i.toSuiAddress()),r=await n.build({client:this}));let{signature:s,bytes:d}=await i.signTransaction(r);return this.executeTransactionBlock({transactionBlock:d,signature:s,...o})}async getTotalTransactionBlocks(){let n=await this.transport.request({method:"sui_getTotalTransactionBlocks",params:[]});return BigInt(n)}async getReferenceGasPrice(){let n=await this.transport.request({method:"suix_getReferenceGasPrice",params:[]});return BigInt(n)}async getStakes(n){if(!n.owner||!xe(j(n.owner)))throw new Error("Invalid Sui address");return await this.transport.request({method:"suix_getStakes",params:[n.owner]})}async getStakesByIds(n){return n.stakedSuiIds.forEach(i=>{if(!i||!Pn(Ve(i)))throw new Error(`Invalid Sui Stake id ${i}`)}),await this.transport.request({method:"suix_getStakesByIds",params:[n.stakedSuiIds]})}async getLatestSuiSystemState(){return await this.transport.request({method:"suix_getLatestSuiSystemState",params:[]})}async queryEvents(n){return await this.transport.request({method:"suix_queryEvents",params:[n.query,n.cursor,n.limit,(n.order||"descending")==="descending"]})}async subscribeEvent(n){return this.transport.subscribe({method:"suix_subscribeEvent",unsubscribe:"suix_unsubscribeEvent",params:[n.filter],onMessage:n.onMessage})}async subscribeTransaction(n){return this.transport.subscribe({method:"suix_subscribeTransaction",unsubscribe:"suix_unsubscribeTransaction",params:[n.filter],onMessage:n.onMessage})}async devInspectTransactionBlock(n){let i;if(Za(n.transactionBlock))n.transactionBlock.setSenderIfNotSet(n.sender),i=(0,Lt.toBase64)(await n.transactionBlock.build({client:this,onlyTransactionKind:!0}));else if(typeof n.transactionBlock=="string")i=n.transactionBlock;else if(n.transactionBlock instanceof Uint8Array)i=(0,Lt.toBase64)(n.transactionBlock);else throw new Error("Unknown transaction block format.");return await this.transport.request({method:"sui_devInspectTransactionBlock",params:[n.sender,i,n.gasPrice?.toString(),n.epoch]})}async dryRunTransactionBlock(n){return await this.transport.request({method:"sui_dryRunTransactionBlock",params:[typeof n.transactionBlock=="string"?n.transactionBlock:(0,Lt.toBase64)(n.transactionBlock)]})}async getDynamicFields(n){if(!n.parentId||!Pn(Ve(n.parentId)))throw new Error("Invalid Sui Object id");return await this.transport.request({method:"suix_getDynamicFields",params:[n.parentId,n.cursor,n.limit]})}async getDynamicFieldObject(n){return await this.transport.request({method:"suix_getDynamicFieldObject",params:[n.parentId,n.name]})}async getLatestCheckpointSequenceNumber(){let n=await this.transport.request({method:"sui_getLatestCheckpointSequenceNumber",params:[]});return String(n)}async getCheckpoint(n){return await this.transport.request({method:"sui_getCheckpoint",params:[n.id]})}async getCheckpoints(n){return await this.transport.request({method:"sui_getCheckpoints",params:[n.cursor,n?.limit,n.descendingOrder]})}async getCommitteeInfo(n){return await this.transport.request({method:"suix_getCommitteeInfo",params:[n?.epoch]})}async getNetworkMetrics(){return await this.transport.request({method:"suix_getNetworkMetrics",params:[]})}async getAddressMetrics(){return await this.transport.request({method:"suix_getLatestAddressMetrics",params:[]})}async getEpochMetrics(n){return await this.transport.request({method:"suix_getEpochMetrics",params:[n?.cursor,n?.limit,n?.descendingOrder]})}async getAllEpochAddressMetrics(n){return await this.transport.request({method:"suix_getAllEpochAddressMetrics",params:[n?.descendingOrder]})}async getEpochs(n){return await this.transport.request({method:"suix_getEpochs",params:[n?.cursor,n?.limit,n?.descendingOrder]})}async getMoveCallMetrics(){return await this.transport.request({method:"suix_getMoveCallMetrics",params:[]})}async getCurrentEpoch(){return await this.transport.request({method:"suix_getCurrentEpoch",params:[]})}async getValidatorsApy(){return await this.transport.request({method:"suix_getValidatorsApy",params:[]})}async getChainIdentifier(){let n=await this.getCheckpoint({id:"0"}),i=(0,Lt.fromBase58)(n.digest);return(0,Lt.toHex)(i.slice(0,4))}async resolveNameServiceAddress(n){return await this.transport.request({method:"suix_resolveNameServiceAddress",params:[n.name]})}async resolveNameServiceNames({format:n="dot",...i}){let{nextCursor:o,hasNextPage:r,data:s}=await this.transport.request({method:"suix_resolveNameServiceNames",params:[i.address,i.cursor,i.limit]});return{hasNextPage:r,nextCursor:o,data:s.map(d=>sd(d,n))}}async getProtocolConfig(n){return await this.transport.request({method:"sui_getProtocolConfig",params:[n?.version]})}async waitForTransaction({signal:n,timeout:i=60*1e3,pollInterval:o=2*1e3,...r}){let s=AbortSignal.timeout(i),d=new Promise((c,A)=>{s.addEventListener("abort",()=>A(s.reason))});for(d.catch(()=>{});!s.aborted;){n?.throwIfAborted();try{return await this.getTransactionBlock(r)}catch{await Promise.race([new Promise(A=>setTimeout(A,o)),d])}}throw s.throwIfAborted(),new Error("Unexpected error while waiting for transaction block.")}};var Pa=require("big.js");var Lr=ge(en());var Jt=ge(en());ye();function Vd(a,n,i){return a.moveCall({target:`${Jt.PUBLISHED_AT}::bridge_interface::swap`,typeArguments:n,arguments:[X(a,i.bridge),X(a,i.coin),$e(a,i.receiveAmountMin,"u64")]})}function Xd(a,n,i){return a.moveCall({target:`${Jt.PUBLISHED_AT}::bridge_interface::deposit`,typeArguments:[n],arguments:[X(a,i.bridge),X(a,i.userDeposit),X(a,i.coin)]})}function Md(a,n,i){return a.moveCall({target:`${Jt.PUBLISHED_AT}::bridge_interface::withdraw`,typeArguments:[n],arguments:[X(a,i.bridge),X(a,i.userDeposit),$e(a,i.amountLp,"u64")]})}function jd(a,n,i){return a.moveCall({target:`${Jt.PUBLISHED_AT}::bridge_interface::claim_reward`,typeArguments:[n],arguments:[X(a,i.bridge),X(a,i.userDeposit)]})}function Pd(a,n,i){return a.moveCall({target:`${Jt.PUBLISHED_AT}::bridge_interface::pool`,typeArguments:[n],arguments:[X(a,i)]})}function Zr(a,n,i){return a.moveCall({target:`${Jt.PUBLISHED_AT}::bridge_interface::swap_and_bridge_wormhole`,typeArguments:[n],arguments:[X(a,i.bridge),X(a,i.messenger),X(a,i.wormholeState),X(a,i.theClock),X(a,i.gasOracle),X(a,i.amount),X(a,i.recipient),$e(a,i.destinationChainId,"u8"),X(a,i.receiveToken),$e(a,i.nonce,"u256"),X(a,i.feeSuiCoin),X(a,i.feeTokenCoin)]})}function Ld(a,n){return a.moveCall({target:`${Jt.PUBLISHED_AT}::bridge_interface::new_user_deposit`,typeArguments:[n],arguments:[]})}function wr(a,n,i){return a.moveCall({target:`${Jt.PUBLISHED_AT}::bridge_interface::swap_and_bridge`,typeArguments:[n],arguments:[X(a,i.bridge),X(a,i.messenger),X(a,i.gasOracle),X(a,i.amount),X(a,i.recipient),$e(a,i.destinationChainId,"u8"),X(a,i.receiveToken),$e(a,i.nonce,"u256"),X(a,i.feeSuiCoin),X(a,i.feeTokenCoin)]})}var Od=ge(Vr());var Jd=ge(Vr());ye();function Xr(a,n,i){return a.moveCall({target:`${Jd.PUBLISHED_AT}::cctp_bridge_interface::bridge`,typeArguments:[n],arguments:[X(a,i.cctpBridge),X(a,i.gasOracle),X(a,i.tokenMessengerMinterState),X(a,i.messageTransmitterState),X(a,i.treasury),X(a,i.denyList),X(a,i.amount),X(a,i.feeSuiCoin),X(a,i.feeTokenCoin),$e(a,i.destinationChainId,"u8"),X(a,i.recipient),X(a,i.recipientWalletAddress)]})}var Qd=ge(jr());var xd=ge(jr());Ie();ye();Ie();ye();var Pr=class a{__VectorClass=!0;static $typeName="vector";static $numTypeParams=1;static $isPhantom=[!1];$typeName="vector";$fullTypeName;$typeArgs;$isPhantom=[!1];elements;constructor(n,i){this.$fullTypeName=D(this.$typeName,...n),this.$typeArgs=n,this.elements=i}static reified(n){return{typeName:a.$typeName,fullTypeName:D(a.$typeName,M(n)),typeArgs:[M(n)],isPhantom:a.$isPhantom,reifiedTypeArgs:[n],fromFields:i=>a.fromFields(n,i),fromFieldsWithTypes:i=>a.fromFieldsWithTypes(n,i),fromBcs:i=>a.fromBcs(n,i),bcs:a.bcs(ji(n)),fromJSONField:i=>a.fromJSONField(n,i),fromJSON:i=>a.fromJSON(n,i),new:i=>new a([M(n)],i),kind:"VectorClassReified"}}static get r(){return a.reified}static get bcs(){return y.vector}static fromFields(n,i){return a.reified(n).new(i.map(o=>O(n,o)))}static fromFieldsWithTypes(n,i){return a.reified(n).new(i.map(o=>J(n,o)))}static fromBcs(n,i){return a.fromFields(n,a.bcs(ji(n)).parse(i))}toJSONField(){return this.elements.map(n=>bn(this.$typeArgs[0],n))}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,elements:this.toJSONField()}}static fromJSONField(n,i){return a.reified(n).new(i.map(o=>k(n,o)))}static fromJSON(n,i){if(i.$typeName!==a.$typeName)throw new Error("not a vector json object");return a.fromJSONField(n,i.elements)}};function kn(a){return Pr.r(a)}function ce(a){return typeof a=="string"?{phantomType:a,kind:"PhantomReified"}:{phantomType:a.fullTypeName,kind:"PhantomReified"}}var jg=y.bytes(32).transform({input:a=>(0,K.fromHEX)(a),output:a=>(0,K.toHEX)(a)});function ji(a){switch(a){case"bool":return y.bool();case"u8":return y.u8();case"u16":return y.u16();case"u32":return y.u32();case"u64":return y.u64();case"u128":return y.u128();case"u256":return y.u256();case"address":return jg;default:return a.bcs}}function M(a){switch(a){case"u8":case"u16":case"u32":case"u64":case"u128":case"u256":case"bool":case"address":return a}switch(a.kind){case"PhantomReified":return a.phantomType;case"StructClassReified":return a.fullTypeName;case"VectorClassReified":return a.fullTypeName}throw new Error("unreachable")}function O(a,n){switch(a){case"bool":case"u8":case"u16":case"u32":return n;case"u64":case"u128":case"u256":return BigInt(n);case"address":return`0x${n}`}if(a.kind==="VectorClassReified")return a.fromFields(n).elements;switch(a.typeName){case"0x1::string::String":case"0x1::ascii::String":return new TextDecoder().decode(Uint8Array.from(n.bytes)).toString();case"0x2::url::Url":return new TextDecoder().decode(Uint8Array.from(n.url.bytes)).toString();case"0x2::object::ID":return`0x${n.bytes}`;case"0x2::object::UID":return`0x${n.id.bytes}`;case"0x1::option::Option":return n.vec.length===0?null:a.fromFields(n).vec[0];default:return a.fromFields(n)}}function J(a,n){switch(a){case"bool":case"u8":case"u16":case"u32":return n;case"u64":case"u128":case"u256":return BigInt(n);case"address":return n}if(a.kind==="VectorClassReified")return a.fromFieldsWithTypes(n).elements;switch(a.typeName){case"0x1::string::String":case"0x1::ascii::String":case"0x2::url::Url":case"0x2::object::ID":return n;case"0x2::object::UID":return n.id;case"0x2::balance::Balance":return a.fromFields({value:BigInt(n)});case"0x1::option::Option":return n===null?null:J(a.reifiedTypeArgs[0],n);default:return a.fromFieldsWithTypes(n)}}function lt(a,n,i){if(i.length!==n.length)throw new Error(`provided item has mismatching number of type argments ${a} (expected ${i.length}, got ${n.length}))`);for(let o=0;o<n.length;o++)if(w(n[o])!==w(M(i[o])))throw new Error(`provided item has mismatching type argments ${a} (expected ${M(i[o])}, got ${n[o]}))`)}function Gt(a,n){let{typeArgs:i}=We(a.type);lt(a.type,i,n)}function bn(a,n){let{typeName:i,typeArgs:o}=We(a);switch(i){case"bool":return n;case"u8":case"u16":case"u32":return n;case"u64":case"u128":case"u256":return n.toString();case"address":case"signer":return n;case"vector":return n.map(r=>bn(o[0],r));case"0x1::string::String":case"0x1::ascii::String":case"0x2::url::Url":case"0x2::object::ID":case"0x2::object::UID":return n;case"0x1::option::Option":return n===null?null:bn(o[0],n);default:return n.toJSONField()}}function k(a,n){switch(a){case"bool":case"u8":case"u16":case"u32":return n;case"u64":case"u128":case"u256":return BigInt(n);case"address":return n}if(a.kind==="VectorClassReified")return a.fromJSONField(n).elements;switch(a.typeName){case"0x1::string::String":case"0x1::ascii::String":case"0x2::url::Url":case"0x2::object::ID":case"0x2::object::UID":return n;case"0x1::option::Option":return n===null?null:k(a.reifiedTypeArgs[0],n);default:return a.fromJSONField(n)}}ye();var Sa="0x1";ye();Ie();function Va(a){return a=w(a),a===`${Sa}::string::String`}var Xa=class a{__StructClass=!0;static get $typeName(){return`${Sa}::string::String`}static $numTypeParams=0;static $isPhantom=[];$typeName=a.$typeName;$fullTypeName;$typeArgs;$isPhantom=a.$isPhantom;bytes;constructor(n,i){this.$fullTypeName=D(a.$typeName,...n),this.$typeArgs=n,this.bytes=i.bytes}static reified(){return{typeName:a.$typeName,fullTypeName:D(a.$typeName),typeArgs:[],isPhantom:a.$isPhantom,reifiedTypeArgs:[],fromFields:n=>a.fromFields(n),fromFieldsWithTypes:n=>a.fromFieldsWithTypes(n),fromBcs:n=>a.fromBcs(n),bcs:a.bcs,fromJSONField:n=>a.fromJSONField(n),fromJSON:n=>a.fromJSON(n),fromSuiParsedData:n=>a.fromSuiParsedData(n),fromSuiObjectData:n=>a.fromSuiObjectData(n),fetch:async(n,i)=>a.fetch(n,i),new:n=>new a([],n),kind:"StructClassReified"}}static get r(){return a.reified()}static phantom(){return ce(a.reified())}static get p(){return a.phantom()}static get bcs(){return y.struct("String",{bytes:y.vector(y.u8())})}static fromFields(n){return a.reified().new({bytes:O(kn("u8"),n.bytes)})}static fromFieldsWithTypes(n){if(!Va(n.type))throw new Error("not a String type");return a.reified().new({bytes:J(kn("u8"),n.fields.bytes)})}static fromBcs(n){return a.fromFields(a.bcs.parse(n))}toJSONField(){return{bytes:bn("vector<u8>",this.bytes)}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(n){return a.reified().new({bytes:k(kn("u8"),n.bytes)})}static fromJSON(n){if(n.$typeName!==a.$typeName)throw new Error("not a WithTwoGenerics json object");return a.fromJSONField(n)}static fromSuiParsedData(n){if(n.dataType!=="moveObject")throw new Error("not an object");if(!Va(n.type))throw new Error(`object at ${n.fields.id} is not a String object`);return a.fromFieldsWithTypes(n)}static fromSuiObjectData(n){if(n.bcs){if(n.bcs.dataType!=="moveObject"||!Va(n.bcs.type))throw new Error("object at is not a String object");return a.fromBcs((0,K.fromB64)(n.bcs.bcsBytes))}if(n.content)return a.fromSuiParsedData(n.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(n,i){let o=await n.getObject({id:i,options:{showBcs:!0}});if(o.error)throw new Error(`error fetching String object at id ${i}: ${o.error.code}`);if(o.data?.bcs?.dataType!=="moveObject"||!Va(o.data.bcs.type))throw new Error(`object at id ${i} is not a String object`);return a.fromSuiObjectData(o.data)}};ye();ye();var tn="0x2";Ie();function Ma(a){return a=w(a),a===`${tn}::object::ID`}var In=class a{__StructClass=!0;static get $typeName(){return`${tn}::object::ID`}static $numTypeParams=0;static $isPhantom=[];$typeName=a.$typeName;$fullTypeName;$typeArgs;$isPhantom=a.$isPhantom;bytes;constructor(n,i){this.$fullTypeName=D(a.$typeName,...n),this.$typeArgs=n,this.bytes=i.bytes}static reified(){return{typeName:a.$typeName,fullTypeName:D(a.$typeName),typeArgs:[],isPhantom:a.$isPhantom,reifiedTypeArgs:[],fromFields:n=>a.fromFields(n),fromFieldsWithTypes:n=>a.fromFieldsWithTypes(n),fromBcs:n=>a.fromBcs(n),bcs:a.bcs,fromJSONField:n=>a.fromJSONField(n),fromJSON:n=>a.fromJSON(n),fromSuiParsedData:n=>a.fromSuiParsedData(n),fromSuiObjectData:n=>a.fromSuiObjectData(n),fetch:async(n,i)=>a.fetch(n,i),new:n=>new a([],n),kind:"StructClassReified"}}static get r(){return a.reified()}static phantom(){return ce(a.reified())}static get p(){return a.phantom()}static get bcs(){return y.struct("ID",{bytes:y.bytes(32).transform({input:n=>(0,K.fromHEX)(n),output:n=>(0,K.toHEX)(n)})})}static fromFields(n){return a.reified().new({bytes:O("address",n.bytes)})}static fromFieldsWithTypes(n){if(!Ma(n.type))throw new Error("not a ID type");return a.reified().new({bytes:J("address",n.fields.bytes)})}static fromBcs(n){return a.fromFields(a.bcs.parse(n))}toJSONField(){return{bytes:this.bytes}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(n){return a.reified().new({bytes:k("address",n.bytes)})}static fromJSON(n){if(n.$typeName!==a.$typeName)throw new Error("not a WithTwoGenerics json object");return a.fromJSONField(n)}static fromSuiParsedData(n){if(n.dataType!=="moveObject")throw new Error("not an object");if(!Ma(n.type))throw new Error(`object at ${n.fields.id} is not a ID object`);return a.fromFieldsWithTypes(n)}static fromSuiObjectData(n){if(n.bcs){if(n.bcs.dataType!=="moveObject"||!Ma(n.bcs.type))throw new Error("object at is not a ID object");return a.fromBcs((0,K.fromB64)(n.bcs.bcsBytes))}if(n.content)return a.fromSuiParsedData(n.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(n,i){let o=await n.getObject({id:i,options:{showBcs:!0}});if(o.error)throw new Error(`error fetching ID object at id ${i}: ${o.error.code}`);if(o.data?.bcs?.dataType!=="moveObject"||!Ma(o.data.bcs.type))throw new Error(`object at id ${i} is not a ID object`);return a.fromSuiObjectData(o.data)}};function ja(a){return a=w(a),a===`${tn}::object::UID`}var qe=class a{__StructClass=!0;static get $typeName(){return`${tn}::object::UID`}static $numTypeParams=0;static $isPhantom=[];$typeName=a.$typeName;$fullTypeName;$typeArgs;$isPhantom=a.$isPhantom;id;constructor(n,i){this.$fullTypeName=D(a.$typeName,...n),this.$typeArgs=n,this.id=i.id}static reified(){return{typeName:a.$typeName,fullTypeName:D(a.$typeName),typeArgs:[],isPhantom:a.$isPhantom,reifiedTypeArgs:[],fromFields:n=>a.fromFields(n),fromFieldsWithTypes:n=>a.fromFieldsWithTypes(n),fromBcs:n=>a.fromBcs(n),bcs:a.bcs,fromJSONField:n=>a.fromJSONField(n),fromJSON:n=>a.fromJSON(n),fromSuiParsedData:n=>a.fromSuiParsedData(n),fromSuiObjectData:n=>a.fromSuiObjectData(n),fetch:async(n,i)=>a.fetch(n,i),new:n=>new a([],n),kind:"StructClassReified"}}static get r(){return a.reified()}static phantom(){return ce(a.reified())}static get p(){return a.phantom()}static get bcs(){return y.struct("UID",{id:In.bcs})}static fromFields(n){return a.reified().new({id:O(In.reified(),n.id)})}static fromFieldsWithTypes(n){if(!ja(n.type))throw new Error("not a UID type");return a.reified().new({id:J(In.reified(),n.fields.id)})}static fromBcs(n){return a.fromFields(a.bcs.parse(n))}toJSONField(){return{id:this.id}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(n){return a.reified().new({id:k(In.reified(),n.id)})}static fromJSON(n){if(n.$typeName!==a.$typeName)throw new Error("not a WithTwoGenerics json object");return a.fromJSONField(n)}static fromSuiParsedData(n){if(n.dataType!=="moveObject")throw new Error("not an object");if(!ja(n.type))throw new Error(`object at ${n.fields.id} is not a UID object`);return a.fromFieldsWithTypes(n)}static fromSuiObjectData(n){if(n.bcs){if(n.bcs.dataType!=="moveObject"||!ja(n.bcs.type))throw new Error("object at is not a UID object");return a.fromBcs((0,K.fromB64)(n.bcs.bcsBytes))}if(n.content)return a.fromSuiParsedData(n.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(n,i){let o=await n.getObject({id:i,options:{showBcs:!0}});if(o.error)throw new Error(`error fetching UID object at id ${i}: ${o.error.code}`);if(o.data?.bcs?.dataType!=="moveObject"||!ja(o.data.bcs.type))throw new Error(`object at id ${i} is not a UID object`);return a.fromSuiObjectData(o.data)}};function ut(a,n){return a.moveCall({target:`${xd.PUBLISHED_AT}::bytes32::from_hex`,arguments:[$e(a,n,`${Xa.$typeName}`)]})}async function Ft(a,n,i=[]){let o=await a(n),r=i.concat(o.data);return o.hasNextPage&&o.nextCursor?Ft(a,o.nextCursor,r):r}var zn=class extends Ge{constructor(i,o){super();this.nodeRpcUrlsConfig=i;this.api=o;this.client=new Ht({url:i.getNodeRpcUrl(this.chainSymbol)})}chainType="SUI";chainSymbol="SUI";client;send(){throw new B("Method send not implemented.")}async buildRawTransactionSwap(i){let o=i.sourceToken.suiAddresses;if(!o)throw new B("SUI token must contain 'suiAddresses'");(0,Lr.setAddress)(o.bridgeAddress,o.bridgeAddressOrigin);let r=De(this.chainType,i);return await this.buildRawTransactionSwapFromParams(r,o)}async buildRawTransactionSwapFromParams(i,o){let{amount:r,fromAccountAddress:s,fromTokenAddress:d,toTokenAddress:c,minimumReceiveAmount:A}=i,g=new ft;g.setSender(s);let l={bridge:o.bridgeObjectAddress,coin:oe({balance:BigInt(r),type:d}),receiveAmountMin:BigInt(A)},m=Vd(g,[d,c],l),I=await Ft(h=>this.client.getCoins({owner:i.toAccountAddress,coinType:c,cursor:h}));return I.length===0||!I[0]?g.transferObjects([m],i.toAccountAddress):g.mergeCoins(I[0].coinObjectId,[m]),await g.toJSON({client:this.client})}async buildRawTransactionSendFromCustomTx(i,o,r){let s=ft.from(i);return this.buildRawTransactionSendFromTx(r,s,o)}async buildRawTransactionSend(i){return this.buildRawTransactionSendFromTx(i,new ft)}async buildRawTransactionSendFromTx(i,o,r){let s=await ke(this.chainType,i,this.api),{messenger:d}=s,c=i.sourceToken.suiAddresses;if(!c)throw new B("SUI token must contain 'suiAddresses'");switch((0,Lr.setAddress)(c.bridgeAddress,c.bridgeAddressOrigin),(0,Qd.setAddress)(c.utilsAddress),d){case 1:return this.buildRawTransactionAllbridgeSend(s,c,o,r);case 2:return this.buildRawTransactionWormholeSend(s,c,o,r);case 3:case 4:return this.buildRawTransactionCctpSend(i,s,c,o,r);case 5:throw new ve("Messenger OFT is not supported yet.")}}async buildRawTransactionAllbridgeSend(i,o,r,s){let{amount:d,fromAccountAddress:c,fromTokenAddress:A,toChainId:g,toAccountAddress:l,toTokenAddress:m,fee:I,gasFeePaymentMethod:h,extraGas:W}=i,Y=I;if(W&&(Y=(0,Pa.Big)(Y).plus(W).toFixed()),r.setSender(c),h==="stablecoin"){let f=BigInt(d)-BigInt(Y),T,G;if(s){let[P]=r.splitCoins(s,[Y]);T=s,G=P}else T=oe({balance:f,type:A}),G=oe({balance:BigInt(Y),type:A});let Z={bridge:o.bridgeObjectAddress,messenger:o.allbridgeMessengerObjectAddress,amount:T,destinationChainId:g,nonce:Yt(),recipient:ut(r,it(l)),receiveToken:ut(r,it(m)),gasOracle:o.gasOracleObjectAddress,feeTokenCoin:G,feeSuiCoin:oe({balance:BigInt(0),useGasCoin:!1})};wr(r,A,Z)}else{let f=Y==="0"?oe({balance:BigInt(Y),useGasCoin:!1}):oe({balance:BigInt(Y)}),T={bridge:o.bridgeObjectAddress,messenger:o.allbridgeMessengerObjectAddress,amount:s??oe({balance:BigInt(d),type:A}),destinationChainId:g,nonce:Yt(),recipient:ut(r,it(l)),receiveToken:ut(r,it(m)),gasOracle:o.gasOracleObjectAddress,feeTokenCoin:oe({balance:BigInt(0),type:A}),feeSuiCoin:f};wr(r,A,T)}return await r.toJSON({client:this.client})}async buildRawTransactionWormholeSend(i,o,r,s){let{amount:d,fromAccountAddress:c,fromTokenAddress:A,toChainId:g,toAccountAddress:l,toTokenAddress:m,fee:I,gasFeePaymentMethod:h,extraGas:W}=i,Y=I;if(W&&(Y=(0,Pa.Big)(Y).plus(W).toFixed()),r.setSender(c),h==="stablecoin"){let f=BigInt(d)-BigInt(Y),T,G;if(s){let[P]=r.splitCoins(s,[Y]);T=s,G=P}else T=oe({balance:f,type:A}),G=oe({balance:BigInt(Y),type:A});let Z={bridge:o.bridgeObjectAddress,messenger:o.wormholeMessengerObjectAddress,wormholeState:o.wormholeStateObjectAddress,theClock:Ga,amount:T,destinationChainId:g,nonce:Yt(),recipient:ut(r,it(l)),receiveToken:ut(r,it(m)),gasOracle:o.gasOracleObjectAddress,feeTokenCoin:G,feeSuiCoin:oe({balance:BigInt(0),useGasCoin:!1})};Zr(r,A,Z)}else{let f=Y==="0"?oe({balance:BigInt(Y),useGasCoin:!1}):oe({balance:BigInt(Y)}),T={bridge:o.bridgeObjectAddress,messenger:o.wormholeMessengerObjectAddress,wormholeState:o.wormholeStateObjectAddress,theClock:Ga,amount:s??oe({balance:BigInt(d),type:A}),destinationChainId:g,nonce:Yt(),recipient:ut(r,it(l)),receiveToken:ut(r,it(m)),gasOracle:o.gasOracleObjectAddress,feeTokenCoin:oe({balance:BigInt(0),type:A}),feeSuiCoin:f};Zr(r,A,T)}return await r.toJSON({client:this.client})}async buildRawTransactionCctpSend(i,o,r,s,d){let{amount:c,fromAccountAddress:A,fromTokenAddress:g,toChainId:l,toAccountAddress:m,fee:I,gasFeePaymentMethod:h,extraGas:W}=o;(0,Od.setAddress)(r.cctpAddress,r.cctpAddressOrigin);let Y=I;W&&(Y=(0,Pa.Big)(Y).plus(W).toFixed()),s.setSender(A);let f=ut(s,it(m)),T;if(i.destinationToken.chainType==="SOLANA"){let G=await ca(this.chainType,i.toAccountAddress,i.destinationToken.tokenAddress,this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"));T=ut(s,it(G))}else T=f;if(h==="stablecoin"){let G=BigInt(c)-BigInt(Y),Z,P;if(d){let[Q]=s.splitCoins(d,[Y]);Z=d,P=Q}else Z=oe({balance:G,type:g}),P=oe({balance:BigInt(Y),type:g});let te={cctpBridge:r.cctpObjectAddress,tokenMessengerMinterState:r.cctpTokenMessengerMinterStateObjectAddress,messageTransmitterState:r.cctpMessageTransmitterStateObjectAddress,treasury:r.cctpTreasuryObjectAddress,denyList:r.cctpDenyListObjectAddress,amount:Z,destinationChainId:l,recipient:T,recipientWalletAddress:f,gasOracle:r.gasOracleObjectAddress,feeTokenCoin:P,feeSuiCoin:oe({balance:BigInt(0),useGasCoin:!1})};Xr(s,g,te)}else{let G=Y==="0"?oe({balance:BigInt(Y),useGasCoin:!1}):oe({balance:BigInt(Y)}),Z={cctpBridge:r.cctpObjectAddress,tokenMessengerMinterState:r.cctpTokenMessengerMinterStateObjectAddress,messageTransmitterState:r.cctpMessageTransmitterStateObjectAddress,treasury:r.cctpTreasuryObjectAddress,denyList:r.cctpDenyListObjectAddress,amount:d??oe({balance:BigInt(c),type:g}),destinationChainId:l,recipient:T,recipientWalletAddress:f,gasOracle:r.gasOracleObjectAddress,feeTokenCoin:oe({balance:BigInt(0),type:g}),feeSuiCoin:G};Xr(s,g,Z)}return await s.toJSON({client:this.client})}};var Dd=require("big.js");var Kd=ge(require("bn.js"));function La(a){return"0x"+new Kd.default(a).toString("hex")}function Ud(a){return new Promise(n=>setTimeout(()=>n(),a))}async function Ha(a,n){let i=await a.trx.sign(n);if(!i.signature)throw new an("Transaction was not signed properly");let r=(await a.trx.sendRawTransaction(i)).transaction.txID;return await Pg(a,r),{txId:r}}async function Pg(a,n,i=1e4){let o=Date.now();for(;;){if(Date.now()-o>i)throw new Wn("Transaction not found");let r=await a.trx.getUnconfirmedTransactionInfo(n);if(!r?.receipt){await Ud(2e3);continue}if(r.receipt.result==="SUCCESS")return r;throw new Wn(`Transaction status is ${r.receipt.result}`)}}var Pi=class extends Ge{constructor(i,o){super();this.tronWeb=i;this.api=o}chainType="TRX";async send(i){let o=await ke(this.chainType,i,this.api),r=await this.buildRawTransactionSendFromParams(i,o);return await Ha(this.tronWeb,r)}async buildRawTransactionSwap(i){let o=De(this.chainType,i);return await this.buildRawTransactionSwapFromParams(o)}async buildRawTransactionSwapFromParams(i){let{amount:o,contractAddress:r,fromAccountAddress:s,fromTokenAddress:d,toAccountAddress:c,toTokenAddress:A,minimumReceiveAmount:g}=i,l=[{type:"uint256",value:o},{type:"bytes32",value:d},{type:"bytes32",value:A},{type:"address",value:c},{type:"uint256",value:g}];return this.buildRawTransaction(r,"swap(uint256,bytes32,bytes32,address,uint256)",l,"0",s)}async buildRawTransactionSend(i){let o=await ke(this.chainType,i,this.api);return this.buildRawTransactionSendFromParams(i,o)}async buildRawTransactionSendFromParams(i,o){let{amount:r,contractAddress:s,fromAccountAddress:d,fromTokenAddress:c,toChainId:A,toAccountAddress:g,toTokenAddress:l,messenger:m,fee:I,gasFeePaymentMethod:h,extraGas:W,extraGasDest:Y}=o,f=I;W&&(f=(0,Dd.Big)(f).plus(W).toFixed());let T=Yt().toString(),G,Z,P;switch(m){case 3:case 4:h==="stablecoin"?(G=[{type:"uint256",value:r},{type:"bytes32",value:g},{type:"uint256",value:A},{type:"uint256",value:f}],Z="0"):(G=[{type:"uint256",value:r},{type:"bytes32",value:g},{type:"uint256",value:A},{type:"uint256",value:0}],Z=f),P="bridge(uint256,bytes32,uint256,uint256)";break;case 5:h==="stablecoin"?(G=[{type:"address",value:i.sourceToken.tokenAddress},{type:"uint256",value:r},{type:"bytes32",value:g},{type:"uint256",value:A},{type:"uint256",value:f},{type:"uint256",value:Y??"0"},{type:"uint256",value:"10"}],Z="0"):(G=[{type:"address",value:i.sourceToken.tokenAddress},{type:"uint256",value:r},{type:"bytes32",value:g},{type:"uint256",value:A},{type:"uint256",value:0},{type:"uint256",value:Y??"0"},{type:"uint256",value:"10"}],Z=f),P="bridge(address,uint256,bytes32,uint256,uint256,uint256,uint256)";break;case 1:case 2:h==="stablecoin"?(G=[{type:"bytes32",value:c},{type:"uint256",value:r},{type:"bytes32",value:g},{type:"uint256",value:A},{type:"bytes32",value:l},{type:"uint256",value:T},{type:"uint8",value:m},{type:"uint256",value:f}],Z="0"):(G=[{type:"bytes32",value:c},{type:"uint256",value:r},{type:"bytes32",value:g},{type:"uint256",value:A},{type:"bytes32",value:l},{type:"uint256",value:T},{type:"uint8",value:m},{type:"uint256",value:0}],Z=f),P="swapAndBridge(bytes32,uint256,bytes32,uint256,bytes32,uint256,uint8,uint256)";break}return this.buildRawTransaction(s,P,G,Z,d)}async buildRawTransaction(i,o,r,s,d){let c=await this.tronWeb.transactionBuilder.triggerSmartContract(i,o,{callValue:+s},r,d);if(!c?.result?.result)throw new B("Unknown error: "+JSON.stringify(c,null,2));return c.transaction}};var Ja=class{constructor(n,i,o,r){this.api=n;this.nodeRpcUrlsConfig=i;this.params=o;this.tokenService=r;this.rawTxBuilder=new Aa(n,i,o,r)}rawTxBuilder;async getAllowance(n,i){let o,r;i?(o=n,r=i):r=n;let s=hi(r.token,r.messenger);return await this.tokenService.getAllowance({...r,spender:s},o)}async checkAllowance(n,i){let o,r;i?(o=n,r=i):r=n;let s=hi(r.token,r.messenger);return this.tokenService.checkAllowance({...r,spender:s},o)}async approve(n,i){let o=hi(i.token,i.messenger);return this.tokenService.approve(n,{...i,spender:o})}async send(n,i){return H(i.amount),z("amount",i.amount,i.sourceToken.decimals),ga(i.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,n).send(i)}};function hi(a,n=1){switch(n){case 3:if(a.cctpAddress)return a.cctpAddress;throw new he("Such route does not support CCTP protocol");case 4:if(a.cctpV2Address)return a.cctpV2Address;throw new he("Such route does not support CCTP V2 protocol");case 5:if(a.oftBridgeAddress)return a.oftBridgeAddress;throw new ve("Such route does not support OFT protocol");case 1:case 2:return a.bridgeAddress}}function ga(a,n,i,o,r){switch(L.getChainProperty(a).chainType){case"EVM":{if(r)return new yi(r,n,i);{let s=i.getNodeRpcUrl(a);return new yi(new _d.Web3(s),n,i)}}case"TRX":{if(r)return new Pi(r,n);{let s=i.getNodeRpcUrl(a);return new Pi(new Ed.TronWeb({fullHost:s,solidityNode:s,eventServer:s}),n)}}case"SOLANA":return new ma(i.getNodeRpcUrl("SOL"),{wormholeMessengerProgramId:o.wormholeMessengerProgramId,solanaLookUpTable:o.solanaLookUpTable,cctpParams:o.cctpParams,jupiterParams:{jupiterUrl:o.jupiterUrl,jupiterApiKeyHeader:o.jupiterApiKeyHeader,jupiterMaxAccounts:o.jupiterMaxAccounts}},n);case"SRB":return new Ca(i,o,n);case"SUI":return new zn(i,n);case"ALG":if(r){let s=r,d=Hr.AlgorandClient.fromClients({algod:s});return new bi(d,n)}else{let s=i.getNodeRpcUrl(a),d=Hr.AlgorandClient.fromConfig({algodConfig:{server:s}});return new bi(d,n)}}}var Ur=require("@algorandfoundation/algokit-utils"),cc=require("big.js");var Lg=(a,n)=>a!==null&&Object.prototype.hasOwnProperty.call(a,n),$d="__cache__",Jr=function(a){return typeof a!="string"?$d+JSON.stringify(a):$d+a},kr=class{constructor(n={defaultTtl:60*1e3}){this.cache={},this.defaultTtl=n.defaultTtl||60*1e3}put(n,i,o){let r=(o?o.ttl:void 0)||this.defaultTtl,s=(o?o.callback:void 0)||function(){},d=Jr(n),c=this.cache[d];c&&clearTimeout(c.handle);let A=setTimeout(()=>this.remove(n),r);this.cache[d]={handle:A,data:i,callback:s}}get(n){let i=this.cache[Jr(n)];return i&&i.data}remove(n){let i=Jr(n),o=this.cache[i];o&&(clearTimeout(o.handle),delete this.cache[i],o.callback(n,o.data))}clear(){for(let n in this.cache)Lg(this.cache,n)&&clearTimeout(this.cache[n].handle);this.cache={}}size(){return Object.keys(this.cache).length}},kt=kr;var Ac=require("tronweb"),Un=require("web3");var Nt=require("big.js");function qd(a,n,i,o,r){let s=V(a,3),d=(0,Nt.Big)(s),c=(0,Nt.Big)(i),A=(0,Nt.Big)(o).plus(r),g,l;if(c.eq(0)||A.eq(0)){let I=d.div(2);g=(0,Nt.Big)(o).plus(I),l=(0,Nt.Big)(r).plus(I)}else g=(0,Nt.Big)(o).plus(d.mul(o).div(A)),l=(0,Nt.Big)(r).plus(d.mul(r).div(A));return(0,Nt.Big)(ls(n,g.toFixed(),l.toFixed())).minus(c).toFixed()}function ec(a){let n=V(a,3);return(0,Nt.Big)(n).round().toFixed()}var ic=require("algosdk");var tc=require("@algorandfoundation/algokit-utils/types/app-arc56"),Li=require("@algorandfoundation/algokit-utils/types/app-client"),Hg=require("@algorandfoundation/algokit-utils/types/app-factory"),nc=require("algosdk"),ka={name:"Pool",structs:{},methods:[{name:"createApplication",args:[{type:"address",name:"owner"},{type:"address",name:"router"},{type:"uint64",name:"a"},{type:"uint64",name:"assetId"},{type:"uint64",name:"feeShareBP"},{type:"uint64",name:"balanceRatioMinBP"}],returns:{type:"void"},actions:{create:["NoOp"],call:[]},readonly:!1,events:[],recommendations:{}},{name:"optInToApplication",args:[],returns:{type:"void"},actions:{create:[],call:["OptIn"]},readonly:!1,events:[],recommendations:{}},{name:"optInAsset",args:[],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,desc:"Opt-in the application account to the ASA stored in `this.asset`.\nThis performs an inner axfer of 0 to the app's own address.\nCall once after deploy (or whenever you change the asset).",events:[],recommendations:{}},{name:"noop",args:[],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"deposit",args:[],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[{name:"RewardsClaimed",args:[{type:"address",name:"user"},{type:"uint64",name:"pending"}]},{name:"Deposit",args:[{type:"address",name:"to"},{type:"uint64",name:"lpAmount"}]}],recommendations:{}},{name:"withdraw",args:[{type:"uint64",name:"amountLp",desc:"The Withdrawn amount"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[{name:"RewardsClaimed",args:[{type:"address",name:"user"},{type:"uint64",name:"pending"}]},{name:"Withdraw",args:[{type:"address",name:"from"},{type:"uint64",name:"lpAmount"}]}],recommendations:{}},{name:"swapToVUsd",args:[{type:"address",name:"user"},{type:"uint64",name:"amount",desc:"The amount of tokens to swap."},{type:"bool",name:"zeroFee",desc:`When true it allows to swap without incurring any fees. It is intended for use with service
|
|
2
2
|
accounts.`}],returns:{type:"uint64",desc:"returns the difference between the old and the new value of vUsdBalance"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[{name:"SwappedToVUsd",args:[{type:"address",name:"user"},{type:"uint64",name:"asset"},{type:"uint64",name:"amount"},{type:"uint64",name:"result"},{type:"uint64",name:"fee"}]}],recommendations:{}},{name:"swapFromVUsd",args:[{type:"address",name:"user",desc:"The address of the recipient."},{type:"uint64",name:"amount",desc:"The amount of vUSD to swap."},{type:"uint64",name:"receiveAmountMin",desc:`The minimum amount of tokens required to be received during the swap, otherwise the
|
|
3
3
|
transaction reverts.`},{type:"bool",name:"zeroFee",desc:`When true it allows to swap without incurring any fees. It is intended for use with service
|
|
4
4
|
accounts.`}],returns:{type:"uint64",desc:"returns the difference between the old and the new value of vUsdBalance"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[{name:"SwappedFromVUsd",args:[{type:"address",name:"user"},{type:"uint64",name:"asset"},{type:"uint64",name:"amount"},{type:"uint64",name:"result"},{type:"uint64",name:"fee"}]}],recommendations:{}},{name:"setFeeShare",args:[{type:"uint64",name:"feeShareBP"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"adjustTotalLpAmount",args:[],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[{name:"RewardsClaimed",args:[{type:"address",name:"user"},{type:"uint64",name:"pending"}]},{name:"Deposit",args:[{type:"address",name:"to"},{type:"uint64",name:"lpAmount"}]}],recommendations:{}},{name:"setBalanceRatioMinBP",args:[{type:"uint64",name:"balanceRatioMinBP"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"stopDeposit",args:[],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"startDeposit",args:[],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"stopWithdraw",args:[],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"startWithdraw",args:[],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"setStopAuthority",args:[{type:"address",name:"stopAuthority"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"setRouter",args:[{type:"address",name:"router"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"claimRewards",args:[],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[{name:"RewardsClaimed",args:[{type:"address",name:"user"},{type:"uint64",name:"pending"}]}],recommendations:{}},{name:"setAdminFeeShare",args:[{type:"uint64",name:"adminFeeShareBP"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"claimAdminFee",args:[],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"pendingReward",args:[{type:"account",name:"user"}],returns:{type:"uint64"},actions:{create:[],call:["NoOp"]},readonly:!0,events:[],recommendations:{}},{name:"decimals",args:[],returns:{type:"uint64"},actions:{create:[],call:["NoOp"]},readonly:!0,events:[],recommendations:{}},{name:"transferOwnership",args:[{type:"address",name:"newOwner"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}}],arcs:[22,28],desc:`4AD - D = 4A(x + y) - (D\xB3 / 4xy)
|
|
5
5
|
X - is value of real stable token
|
|
6
|
-
Y - is value of virtual usd`,networks:{},state:{schema:{global:{ints:15,bytes:4},local:{ints:2,bytes:0}},keys:{global:{feeShareBP:{keyType:"AVMString",valueType:"AVMUint64",key:"ZmVlU2hhcmVCUA=="},router:{keyType:"AVMString",valueType:"address",key:"cm91dGVy"},tokenBalance:{keyType:"AVMString",valueType:"AVMUint64",key:"dG9rZW5CYWxhbmNl"},vUsdBalance:{keyType:"AVMString",valueType:"AVMUint64",key:"dlVzZEJhbGFuY2U="},balanceRatioMinBP:{keyType:"AVMString",valueType:"AVMUint64",key:"YmFsYW5jZVJhdGlvTWluQlA="},reserves:{keyType:"AVMString",valueType:"AVMUint64",key:"cmVzZXJ2ZXM="},a:{keyType:"AVMString",valueType:"AVMUint64",key:"YQ=="},d:{keyType:"AVMString",valueType:"AVMUint64",key:"ZA=="},tokenAmountReduce:{keyType:"AVMString",valueType:"AVMUint64",key:"dG9rZW5BbW91bnRSZWR1Y2U="},tokenAmountIncrease:{keyType:"AVMString",valueType:"AVMUint64",key:"dG9rZW5BbW91bnRJbmNyZWFzZQ=="},stopAuthority:{keyType:"AVMString",valueType:"address",key:"c3RvcEF1dGhvcml0eQ=="},canDeposit:{keyType:"AVMString",valueType:"AVMUint64",key:"Y2FuRGVwb3NpdA=="},canWithdraw:{keyType:"AVMString",valueType:"AVMUint64",key:"Y2FuV2l0aGRyYXc="},asset:{keyType:"AVMString",valueType:"AVMUint64",key:"YXNzZXQ="},adminFeeShareBP:{keyType:"AVMString",valueType:"AVMUint64",key:"YWRtaW5GZWVTaGFyZUJQ"},totalSupply:{keyType:"AVMString",valueType:"AVMUint64",key:"dG90YWxTdXBwbHk="},accRewardPerShareP:{keyType:"AVMString",valueType:"AVMBytes",key:"YWNjUmV3YXJkUGVyU2hhcmVQ"},adminFeeAmount:{keyType:"AVMString",valueType:"AVMUint64",key:"YWRtaW5GZWVBbW91bnQ="},owner:{keyType:"AVMString",valueType:"address",key:"b3duZXI="}},local:{balance:{keyType:"AVMString",valueType:"AVMUint64",key:"YmFsYW5jZQ=="},userRewardDebt:{keyType:"AVMString",valueType:"AVMUint64",key:"dXNlclJld2FyZERlYnQ="}},box:{}},maps:{global:{},local:{},box:{}}},bareActions:{create:[],call:[]},sourceInfo:{approval:{sourceInfo:[{pc:[1446],errorMessage:'"Pool: withdraw prohibited'},{pc:[1249],errorMessage:"Asset must go to app"},{pc:[1232],errorMessage:"Asset txn missing"},{pc:[1270],errorMessage:"CloseTo not allowed"},{pc:[514,529,553,577,589,605,617,632,647,659,671,683,695,711,723,739,773,803,819,831,840,865],errorMessage:"OnCompletion is not NoOp"},{pc:[853],errorMessage:"OnCompletion is not OptIn"},{pc:[3306],errorMessage:"Only owner"},{pc:[1216],errorMessage:"Pool: deposit prohibited"},{pc:[1141],errorMessage:"Pool: is not stopAuthority"},{pc:[1206],errorMessage:"Pool: low token balance"},{pc:[1182],errorMessage:"Pool: low vUSD balance"},{pc:[1131],errorMessage:"Pool: only router"},{pc:[1701,1983],errorMessage:"Pool: reserves"},{pc:[2027],errorMessage:"Pool: slippage"},{pc:[2116,2175],errorMessage:"Pool: too large"},{pc:[1280],errorMessage:"Pool: too little"},{pc:[1369],errorMessage:"Pool: too much"},{pc:[1723],errorMessage:"Pool: zero D changes"},{pc:[1693],errorMessage:"Pool: zero changes"},{pc:[1263],errorMessage:"Rekey not allowed"},{pc:[1468],errorMessage:"RewardManager: not enough amount"},{pc:[2994],errorMessage:"RewardManager: too high"},{pc:[1256],errorMessage:"Wrong asset"},{pc:[984],errorMessage:"asset exists"},{pc:[869],errorMessage:"can only call when creating"},{pc:[517,532,556,580,592,608,620,635,650,662,674,686,698,714,726,742,776,806,822,834,843,856],errorMessage:"can only call when not creating"},{pc:[977,1080,1129,1139,1153,1163,1180,1204,1215,1225,1229,1284,1298,1308,1326,1336,1350,1360,1374,1412,1445,1451,1476,1531,1563,1614,1618,1624,1660,1686,1690,1697,1705,1719,1728,1775,1805,1815,1823,1833,1841,1870,1929,1939,1955,1976,1987,2002,2032,2066,2137,2148,2251,2260,2408,2413,2421,2529,2537,2578,2586,2917,2954,3015,3023,3028,3064,3092,3100,3118,3138,3152,3216,3250,3304],errorMessage:"check GlobalState exists"},{pc:[1463,1500,1516,2906,2934,3058,3078,3164,3186,3201],errorMessage:"check LocalState exists"},{pc:[2626],errorMessage:"n must be non-negative"},{pc:[1395,1426,1642,1674],errorMessage:"overflow"},{pc:[1242],errorMessage:"transaction type is axfer"}],pcOffsetMethod:"none"},clear:{sourceInfo:[],pcOffsetMethod:"none"}},source:{approval:"I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxIDggNCAxMDAwMAogICAgYnl0ZWNibG9jayAidG9rZW5CYWxhbmNlIiAidlVzZEJhbGFuY2UiICJhc3NldCIgInJlc2VydmVzIiAiYmFsYW5jZSIgInVzZXJSZXdhcmREZWJ0IiAiZCIgInRvdGFsU3VwcGx5IiAiYWNjUmV3YXJkUGVyU2hhcmVQIiAweDAxMDAwMDAwMDAwMDAwIDB4MDEgImFkbWluRmVlQW1vdW50IiAiY2FuRGVwb3NpdCIgImNhbldpdGhkcmF3IiAib3duZXIiICJmZWVTaGFyZUJQIiAiYmFsYW5jZVJhdGlvTWluQlAiIDB4MDIgImFkbWluRmVlU2hhcmVCUCIgMHgxNTFmN2M3NSAiYSIgInJvdXRlciIgInN0b3BBdXRob3JpdHkiICJ0b2tlbkFtb3VudFJlZHVjZSIgInRva2VuQW1vdW50SW5jcmVhc2UiIDB4YmE4MTgwNzYgMHgwMyAweDAxMDAwMDAwMDAwMDAwMDAwMAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjI4CiAgICAvLyBhZG1pbkZlZVNoYXJlQlAgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiBCUCAvIDUgfSk7IC8vIERlZmF1bHQgYWRtaW4gZmVlIGlzIDIwJQogICAgYnl0ZWMgMTggLy8gImFkbWluRmVlU2hhcmVCUCIKICAgIHB1c2hpbnQgMjAwMCAvLyAyMDAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjI5CiAgICAvLyB0b3RhbFN1cHBseSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyA3IC8vICJ0b3RhbFN1cHBseSIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMwCiAgICAvLyBhY2NSZXdhcmRQZXJTaGFyZVAgPSBHbG9iYWxTdGF0ZTxiaWd1aW50Pih7IGluaXRpYWxWYWx1ZTogMG4gfSk7CiAgICBieXRlYyA4IC8vICJhY2NSZXdhcmRQZXJTaGFyZVAiCiAgICBwdXNoYnl0ZXMgMHgKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzEKICAgIC8vIGFkbWluRmVlQW1vdW50ID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjIDExIC8vICJhZG1pbkZlZUFtb3VudCIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDEKICAgIC8vIHRva2VuQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18wIC8vICJ0b2tlbkJhbGFuY2UiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQyCiAgICAvLyB2VXNkQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18xIC8vICJ2VXNkQmFsYW5jZSIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDQKICAgIC8vIHJlc2VydmVzID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzMgLy8gInJlc2VydmVzIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NgogICAgLy8gZCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyA2IC8vICJkIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MgogICAgLy8gY2FuRGVwb3NpdCA9IEdsb2JhbFN0YXRlPGJvb2xlYW4+KHsgaW5pdGlhbFZhbHVlOiB0cnVlIH0pOy8vIGlzIGRlcG9zaXQgb3BlcmF0aW9uIGFsbG93ZWQKICAgIGJ5dGVjIDEyIC8vICJjYW5EZXBvc2l0IgogICAgaW50Y18xIC8vIDEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MwogICAgLy8gY2FuV2l0aGRyYXcgPSBHbG9iYWxTdGF0ZTxib29sZWFuPih7IGluaXRpYWxWYWx1ZTogdHJ1ZSB9KTsvLyBpcyB3aXRoZHJhd24gb3BlcmF0aW9uIGFsbG93ZWQKICAgIGJ5dGVjIDEzIC8vICJjYW5XaXRoZHJhdyIKICAgIGludGNfMSAvLyAxCiAgICBhcHBfZ2xvYmFsX3B1dAoKbWFpbl9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMwogICAgLy8gZXhwb3J0IGNsYXNzIFBvb2wgZXh0ZW5kcyBSZXdhcmRNYW5hZ2VyIGltcGxlbWVudHMgQ29udmVudGlvbmFsUm91dGluZyB7CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9hZnRlcl9pZl9lbHNlQDMxCiAgICBwdXNoYnl0ZXNzIDB4NTE2ZDM0N2IgMHgwMWEzYTNmZiAweDc2MTBhNDYwIDB4ZTgzYTg3YWIgMHg5MmUwM2IxYyAweDIxZjFkZGZmIDB4ZDk3OGFkMTQgMHgwZDFiNGMwNiAweDc1YmY5YTI4IDB4ZjQ5M2Q3ZWQgMHg4ZDVjYjZkZiAweGZlMDRhNWNlIDB4MDI4ZTA4NTkgMHg0MWZjOTY2ZSAweGFiZjIwMDE0IDB4MDRiMTYxZjEgMHg2NjU5MWNjZiAweGE1YWU2YmQxIDB4YTA0YzViYzQgMHgzNjFiNjE1OSAweDMyYmJiMDExIDB4Yjg3NzllZTcgMHhlMTdiYWZiNCAvLyBtZXRob2QgImNyZWF0ZUFwcGxpY2F0aW9uKGFkZHJlc3MsYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpdm9pZCIsIG1ldGhvZCAib3B0SW5Ub0FwcGxpY2F0aW9uKCl2b2lkIiwgbWV0aG9kICJvcHRJbkFzc2V0KCl2b2lkIiwgbWV0aG9kICJub29wKCl2b2lkIiwgbWV0aG9kICJkZXBvc2l0KCl2b2lkIiwgbWV0aG9kICJ3aXRoZHJhdyh1aW50NjQpdm9pZCIsIG1ldGhvZCAic3dhcFRvVlVzZChhZGRyZXNzLHVpbnQ2NCxib29sKXVpbnQ2NCIsIG1ldGhvZCAic3dhcEZyb21WVXNkKGFkZHJlc3MsdWludDY0LHVpbnQ2NCxib29sKXVpbnQ2NCIsIG1ldGhvZCAic2V0RmVlU2hhcmUodWludDY0KXZvaWQiLCBtZXRob2QgImFkanVzdFRvdGFsTHBBbW91bnQoKXZvaWQiLCBtZXRob2QgInNldEJhbGFuY2VSYXRpb01pbkJQKHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJzdG9wRGVwb3NpdCgpdm9pZCIsIG1ldGhvZCAic3RhcnREZXBvc2l0KCl2b2lkIiwgbWV0aG9kICJzdG9wV2l0aGRyYXcoKXZvaWQiLCBtZXRob2QgInN0YXJ0V2l0aGRyYXcoKXZvaWQiLCBtZXRob2QgInNldFN0b3BBdXRob3JpdHkoYWRkcmVzcyl2b2lkIiwgbWV0aG9kICJzZXRSb3V0ZXIoYWRkcmVzcyl2b2lkIiwgbWV0aG9kICJjbGFpbVJld2FyZHMoKXZvaWQiLCBtZXRob2QgInNldEFkbWluRmVlU2hhcmUodWludDY0KXZvaWQiLCBtZXRob2QgImNsYWltQWRtaW5GZWUoKXZvaWQiLCBtZXRob2QgInBlbmRpbmdSZXdhcmQoYWNjb3VudCl1aW50NjQiLCBtZXRob2QgImRlY2ltYWxzKCl1aW50NjQiLCBtZXRob2QgInRyYW5zZmVyT3duZXJzaGlwKGFkZHJlc3Mpdm9pZCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fY3JlYXRlQXBwbGljYXRpb25fcm91dGVANSBtYWluX29wdEluVG9BcHBsaWNhdGlvbl9yb3V0ZUA2IG1haW5fb3B0SW5Bc3NldF9yb3V0ZUA3IG1haW5fbm9vcF9yb3V0ZUA4IG1haW5fZGVwb3NpdF9yb3V0ZUA5IG1haW5fd2l0aGRyYXdfcm91dGVAMTAgbWFpbl9zd2FwVG9WVXNkX3JvdXRlQDExIG1haW5fc3dhcEZyb21WVXNkX3JvdXRlQDEyIG1haW5fc2V0RmVlU2hhcmVfcm91dGVAMTMgbWFpbl9hZGp1c3RUb3RhbExwQW1vdW50X3JvdXRlQDE0IG1haW5fc2V0QmFsYW5jZVJhdGlvTWluQlBfcm91dGVAMTUgbWFpbl9zdG9wRGVwb3NpdF9yb3V0ZUAxNiBtYWluX3N0YXJ0RGVwb3NpdF9yb3V0ZUAxNyBtYWluX3N0b3BXaXRoZHJhd19yb3V0ZUAxOCBtYWluX3N0YXJ0V2l0aGRyYXdfcm91dGVAMTkgbWFpbl9zZXRTdG9wQXV0aG9yaXR5X3JvdXRlQDIwIG1haW5fc2V0Um91dGVyX3JvdXRlQDIxIG1haW5fY2xhaW1SZXdhcmRzX3JvdXRlQDIyIG1haW5fc2V0QWRtaW5GZWVTaGFyZV9yb3V0ZUAyMyBtYWluX2NsYWltQWRtaW5GZWVfcm91dGVAMjQgbWFpbl9wZW5kaW5nUmV3YXJkX3JvdXRlQDI1IG1haW5fZGVjaW1hbHNfcm91dGVAMjYgbWFpbl90cmFuc2Zlck93bmVyc2hpcF9yb3V0ZUAyNwoKbWFpbl9hZnRlcl9pZl9lbHNlQDMxOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzMKICAgIC8vIGV4cG9ydCBjbGFzcyBQb29sIGV4dGVuZHMgUmV3YXJkTWFuYWdlciBpbXBsZW1lbnRzIENvbnZlbnRpb25hbFJvdXRpbmcgewogICAgaW50Y18wIC8vIDAKICAgIHJldHVybgoKbWFpbl90cmFuc2Zlck93bmVyc2hpcF9yb3V0ZUAyNzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjE2CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzMKICAgIC8vIGV4cG9ydCBjbGFzcyBQb29sIGV4dGVuZHMgUmV3YXJkTWFuYWdlciBpbXBsZW1lbnRzIENvbnZlbnRpb25hbFJvdXRpbmcgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6MTYKICAgIC8vIEBhYmltZXRob2QoKQogICAgY2FsbHN1YiB0cmFuc2Zlck93bmVyc2hpcAogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9kZWNpbWFsc19yb3V0ZUAyNjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo5MQogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIHB1c2hieXRlcyAweDE1MWY3Yzc1MDAwMDAwMDAwMDAwMDAwMwogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX3BlbmRpbmdSZXdhcmRfcm91dGVAMjU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6ODYKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMwogICAgLy8gZXhwb3J0IGNsYXNzIFBvb2wgZXh0ZW5kcyBSZXdhcmRNYW5hZ2VyIGltcGxlbWVudHMgQ29udmVudGlvbmFsUm91dGluZyB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBY2NvdW50cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjg2CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIGNhbGxzdWIgcGVuZGluZ1Jld2FyZAogICAgaXRvYgogICAgYnl0ZWMgMTkgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fY2xhaW1BZG1pbkZlZV9yb3V0ZUAyNDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo3MgogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgY2xhaW1BZG1pbkZlZQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9zZXRBZG1pbkZlZVNoYXJlX3JvdXRlQDIzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjY1CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzMKICAgIC8vIGV4cG9ydCBjbGFzcyBQb29sIGV4dGVuZHMgUmV3YXJkTWFuYWdlciBpbXBsZW1lbnRzIENvbnZlbnRpb25hbFJvdXRpbmcgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjY1CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgc2V0QWRtaW5GZWVTaGFyZQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9jbGFpbVJld2FyZHNfcm91dGVAMjI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NTAKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGNsYWltUmV3YXJkcwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9zZXRSb3V0ZXJfcm91dGVAMjE6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozNTcKICAgIC8vIHNldFJvdXRlcihyb3V0ZXI6IEFkZHJlc3MpOiB2b2lkIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzMKICAgIC8vIGV4cG9ydCBjbGFzcyBQb29sIGV4dGVuZHMgUmV3YXJkTWFuYWdlciBpbXBsZW1lbnRzIENvbnZlbnRpb25hbFJvdXRpbmcgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzU3CiAgICAvLyBzZXRSb3V0ZXIocm91dGVyOiBBZGRyZXNzKTogdm9pZCB7CiAgICBjYWxsc3ViIHNldFJvdXRlcgogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9zZXRTdG9wQXV0aG9yaXR5X3JvdXRlQDIwOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzUyCiAgICAvLyBzZXRTdG9wQXV0aG9yaXR5KHN0b3BBdXRob3JpdHk6IEFkZHJlc3MpOiB2b2lkIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzMKICAgIC8vIGV4cG9ydCBjbGFzcyBQb29sIGV4dGVuZHMgUmV3YXJkTWFuYWdlciBpbXBsZW1lbnRzIENvbnZlbnRpb25hbFJvdXRpbmcgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzUyCiAgICAvLyBzZXRTdG9wQXV0aG9yaXR5KHN0b3BBdXRob3JpdHk6IEFkZHJlc3MpOiB2b2lkIHsKICAgIGNhbGxzdWIgc2V0U3RvcEF1dGhvcml0eQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9zdGFydFdpdGhkcmF3X3JvdXRlQDE5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzQ3CiAgICAvLyBzdGFydFdpdGhkcmF3KCk6IHZvaWQgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIHN0YXJ0V2l0aGRyYXcKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fc3RvcFdpdGhkcmF3X3JvdXRlQDE4OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzQyCiAgICAvLyBzdG9wV2l0aGRyYXcoKTogdm9pZCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgc3RvcFdpdGhkcmF3CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX3N0YXJ0RGVwb3NpdF9yb3V0ZUAxNzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMzNwogICAgLy8gc3RhcnREZXBvc2l0KCk6IHZvaWQgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIHN0YXJ0RGVwb3NpdAogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9zdG9wRGVwb3NpdF9yb3V0ZUAxNjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMzMgogICAgLy8gc3RvcERlcG9zaXQoKTogdm9pZCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgc3RvcERlcG9zaXQKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fc2V0QmFsYW5jZVJhdGlvTWluQlBfcm91dGVAMTU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMjYKICAgIC8vIHNldEJhbGFuY2VSYXRpb01pbkJQKGJhbGFuY2VSYXRpb01pbkJQOiB1aW50NjQpOiB2b2lkIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzMKICAgIC8vIGV4cG9ydCBjbGFzcyBQb29sIGV4dGVuZHMgUmV3YXJkTWFuYWdlciBpbXBsZW1lbnRzIENvbnZlbnRpb25hbFJvdXRpbmcgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzI2CiAgICAvLyBzZXRCYWxhbmNlUmF0aW9NaW5CUChiYWxhbmNlUmF0aW9NaW5CUDogdWludDY0KTogdm9pZCB7CiAgICBjYWxsc3ViIHNldEJhbGFuY2VSYXRpb01pbkJQCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2FkanVzdFRvdGFsTHBBbW91bnRfcm91dGVAMTQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMTMKICAgIC8vIGFkanVzdFRvdGFsTHBBbW91bnQoKTogdm9pZCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgYWRqdXN0VG90YWxMcEFtb3VudAogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9zZXRGZWVTaGFyZV9yb3V0ZUAxMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMwNwogICAgLy8gc2V0RmVlU2hhcmUoZmVlU2hhcmVCUDogdWludDY0KTogdm9pZCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMzCiAgICAvLyBleHBvcnQgY2xhc3MgUG9vbCBleHRlbmRzIFJld2FyZE1hbmFnZXIgaW1wbGVtZW50cyBDb252ZW50aW9uYWxSb3V0aW5nIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMwNwogICAgLy8gc2V0RmVlU2hhcmUoZmVlU2hhcmVCUDogdWludDY0KTogdm9pZCB7CiAgICBjYWxsc3ViIHNldEZlZVNoYXJlCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX3N3YXBGcm9tVlVzZF9yb3V0ZUAxMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI1OS0yNjQKICAgIC8vIHN3YXBGcm9tVlVzZCgKICAgIC8vICAgdXNlcjogQWRkcmVzcywKICAgIC8vICAgYW1vdW50OiB1aW50NjQsCiAgICAvLyAgIHJlY2VpdmVBbW91bnRNaW46IHVpbnQ2NCwKICAgIC8vICAgemVyb0ZlZTogYm9vbGVhbiwKICAgIC8vICk6IHVpbnQ2NCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMzCiAgICAvLyBleHBvcnQgY2xhc3MgUG9vbCBleHRlbmRzIFJld2FyZE1hbmFnZXIgaW1wbGVtZW50cyBDb252ZW50aW9uYWxSb3V0aW5nIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDQKICAgIGludGNfMCAvLyAwCiAgICBnZXRiaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI1OS0yNjQKICAgIC8vIHN3YXBGcm9tVlVzZCgKICAgIC8vICAgdXNlcjogQWRkcmVzcywKICAgIC8vICAgYW1vdW50OiB1aW50NjQsCiAgICAvLyAgIHJlY2VpdmVBbW91bnRNaW46IHVpbnQ2NCwKICAgIC8vICAgemVyb0ZlZTogYm9vbGVhbiwKICAgIC8vICk6IHVpbnQ2NCB7CiAgICBjYWxsc3ViIHN3YXBGcm9tVlVzZAogICAgaXRvYgogICAgYnl0ZWMgMTkgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fc3dhcFRvVlVzZF9yb3V0ZUAxMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIxMy0yMTcKICAgIC8vIHN3YXBUb1ZVc2QoCiAgICAvLyAgIHVzZXI6IEFkZHJlc3MsCiAgICAvLyAgIGFtb3VudDogdWludDY0LAogICAgLy8gICB6ZXJvRmVlOiBib29sZWFuLAogICAgLy8gKTogdWludDY0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzMKICAgIC8vIGV4cG9ydCBjbGFzcyBQb29sIGV4dGVuZHMgUmV3YXJkTWFuYWdlciBpbXBsZW1lbnRzIENvbnZlbnRpb25hbFJvdXRpbmcgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgaW50Y18wIC8vIDAKICAgIGdldGJpdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjEzLTIxNwogICAgLy8gc3dhcFRvVlVzZCgKICAgIC8vICAgdXNlcjogQWRkcmVzcywKICAgIC8vICAgYW1vdW50OiB1aW50NjQsCiAgICAvLyAgIHplcm9GZWU6IGJvb2xlYW4sCiAgICAvLyApOiB1aW50NjQgewogICAgY2FsbHN1YiBzd2FwVG9WVXNkCiAgICBpdG9iCiAgICBieXRlYyAxOSAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl93aXRoZHJhd19yb3V0ZUAxMDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE2OAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMzCiAgICAvLyBleHBvcnQgY2xhc3MgUG9vbCBleHRlbmRzIFJld2FyZE1hbmFnZXIgaW1wbGVtZW50cyBDb252ZW50aW9uYWxSb3V0aW5nIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE2OAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHdpdGhkcmF3CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2RlcG9zaXRfcm91dGVAOToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjEyOQogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZGVwb3NpdAogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9ub29wX3JvdXRlQDg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo5MgogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fb3B0SW5Bc3NldF9yb3V0ZUA3OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NzcKICAgIC8vIG9wdEluQXNzZXQoKTogdm9pZCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgb3B0SW5Bc3NldAogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9vcHRJblRvQXBwbGljYXRpb25fcm91dGVANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjY4CiAgICAvLyBvcHRJblRvQXBwbGljYXRpb24oKTogdm9pZCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzEgLy8gT3B0SW4KICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBPcHRJbgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIG9wdEluVG9BcHBsaWNhdGlvbgogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9jcmVhdGVBcHBsaWNhdGlvbl9yb3V0ZUA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTUKICAgIC8vIGNyZWF0ZUFwcGxpY2F0aW9uKG93bmVyOiBBZGRyZXNzLCByb3V0ZXI6IEFkZHJlc3MsIGE6IHVpbnQ2NCwgYXNzZXRJZDogdWludDY0LCBmZWVTaGFyZUJQOiB1aW50NjQsIGJhbGFuY2VSYXRpb01pbkJQOiB1aW50NjQpOiB2b2lkIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMwogICAgLy8gZXhwb3J0IGNsYXNzIFBvb2wgZXh0ZW5kcyBSZXdhcmRNYW5hZ2VyIGltcGxlbWVudHMgQ29udmVudGlvbmFsUm91dGluZyB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA1CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA2CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1NQogICAgLy8gY3JlYXRlQXBwbGljYXRpb24ob3duZXI6IEFkZHJlc3MsIHJvdXRlcjogQWRkcmVzcywgYTogdWludDY0LCBhc3NldElkOiB1aW50NjQsIGZlZVNoYXJlQlA6IHVpbnQ2NCwgYmFsYW5jZVJhdGlvTWluQlA6IHVpbnQ2NCk6IHZvaWQgewogICAgY2FsbHN1YiBjcmVhdGVBcHBsaWNhdGlvbgogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czo6YmlndWludFRvVWludDY0TW9kdWxvKHY6IGJ5dGVzKSAtPiB1aW50NjQ6CmJpZ3VpbnRUb1VpbnQ2NE1vZHVsbzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czoyNgogICAgLy8gZXhwb3J0IGZ1bmN0aW9uIGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbyh2OiBiaWd1aW50KTogdWludDY0IHsKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjI4CiAgICAvLyBjb25zdCBsZW4gPSBvcC5sZW4oYik7CiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6MjkKICAgIC8vIGNvbnN0IHN0YXJ0OiB1aW50NjQgPSBsZW4gPiA4ID8gKGxlbiAtIDgpIDogMDsKICAgIGludGNfMiAvLyA4CiAgICA+CiAgICBieiBiaWd1aW50VG9VaW50NjRNb2R1bG9fdGVybmFyeV9mYWxzZUAyCiAgICBmcmFtZV9kaWcgMAogICAgaW50Y18yIC8vIDgKICAgIC0KCmJpZ3VpbnRUb1VpbnQ2NE1vZHVsb190ZXJuYXJ5X21lcmdlQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6MzAKICAgIC8vIGNvbnN0IGxhc3Q4ID0gYi5zbGljZShzdGFydCk7ICAgICAgICAgICAvLyBrZWVwIGxlYXN0LXNpZ25pZmljYW50IDggYnl0ZXMKICAgIGR1cAogICAgZnJhbWVfZGlnIDAKICAgIGR1cAogICAgY292ZXIgMwogICAgPj0KICAgIGRpZyAyCiAgICBzd2FwCiAgICBzZWxlY3QKICAgIGZyYW1lX2RpZyAtMQogICAgc3dhcAogICAgdW5jb3ZlciAyCiAgICBzdWJzdHJpbmczCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6MzEKICAgIC8vIHJldHVybiBvcC5idG9pKGxhc3Q4KTsgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29udmVydCB0byB1aW50NjQKICAgIGJ0b2kKICAgIHN3YXAKICAgIHJldHN1YgoKYmlndWludFRvVWludDY0TW9kdWxvX3Rlcm5hcnlfZmFsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czoyOQogICAgLy8gY29uc3Qgc3RhcnQ6IHVpbnQ2NCA9IGxlbiA+IDggPyAobGVuIC0gOCkgOiAwOwogICAgaW50Y18wIC8vIDAKICAgIGIgYmlndWludFRvVWludDY0TW9kdWxvX3Rlcm5hcnlfbWVyZ2VAMwoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLmNyZWF0ZUFwcGxpY2F0aW9uKG93bmVyOiBieXRlcywgcm91dGVyOiBieXRlcywgYTogdWludDY0LCBhc3NldElkOiB1aW50NjQsIGZlZVNoYXJlQlA6IHVpbnQ2NCwgYmFsYW5jZVJhdGlvTWluQlA6IHVpbnQ2NCkgLT4gdm9pZDoKY3JlYXRlQXBwbGljYXRpb246CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1NQogICAgLy8gY3JlYXRlQXBwbGljYXRpb24ob3duZXI6IEFkZHJlc3MsIHJvdXRlcjogQWRkcmVzcywgYTogdWludDY0LCBhc3NldElkOiB1aW50NjQsIGZlZVNoYXJlQlA6IHVpbnQ2NCwgYmFsYW5jZVJhdGlvTWluQlA6IHVpbnQ2NCk6IHZvaWQgewogICAgcHJvdG8gNiAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czo2CiAgICAvLyBwcm90ZWN0ZWQgb3duZXIgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPigpOwogICAgYnl0ZWMgMTQgLy8gIm93bmVyIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6OQogICAgLy8gdGhpcy5vd25lci52YWx1ZSA9IG93bmVyOwogICAgZnJhbWVfZGlnIC02CiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjI3CiAgICAvLyBhc3NldCA9IEdsb2JhbFN0YXRlPEFzc2V0PigpOwogICAgYnl0ZWNfMiAvLyAiYXNzZXQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzgKICAgIC8vIHRoaXMuYXNzZXQudmFsdWUgPSBBc3NldChhc3NldElkKTsKICAgIGZyYW1lX2RpZyAtMwogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ1CiAgICAvLyBhID0gR2xvYmFsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgMjAgLy8gImEiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1NwogICAgLy8gdGhpcy5hLnZhbHVlID0gYTsKICAgIGZyYW1lX2RpZyAtNAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQwCiAgICAvLyByb3V0ZXIgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPigpOy8vIGlzIGRlcG9zaXQgb3BlcmF0aW9uIGFsbG93ZWQKICAgIGJ5dGVjIDIxIC8vICJyb3V0ZXIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1OAogICAgLy8gdGhpcy5yb3V0ZXIudmFsdWUgPSByb3V0ZXI7CiAgICBmcmFtZV9kaWcgLTUKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MQogICAgLy8gcHJpdmF0ZSBzdG9wQXV0aG9yaXR5ID0gR2xvYmFsU3RhdGU8QWRkcmVzcz4oKTsvLyBjYW4gcmVzdHJpY3QgZGVwb3NpdCBvciB3aXRoZHJhdyBvcGVyYXRpb25zCiAgICBieXRlYyAyMiAvLyAic3RvcEF1dGhvcml0eSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjU5CiAgICAvLyB0aGlzLnN0b3BBdXRob3JpdHkudmFsdWUgPSBvd25lcjsKICAgIGZyYW1lX2RpZyAtNgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM5CiAgICAvLyBmZWVTaGFyZUJQID0gR2xvYmFsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgMTUgLy8gImZlZVNoYXJlQlAiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo2MAogICAgLy8gdGhpcy5mZWVTaGFyZUJQLnZhbHVlID0gZmVlU2hhcmVCUDsKICAgIGZyYW1lX2RpZyAtMgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQzCiAgICAvLyBiYWxhbmNlUmF0aW9NaW5CUCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDE2IC8vICJiYWxhbmNlUmF0aW9NaW5CUCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjYxCiAgICAvLyB0aGlzLmJhbGFuY2VSYXRpb01pbkJQLnZhbHVlID0gYmFsYW5jZVJhdGlvTWluQlA7CiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjcKICAgIC8vIGFzc2V0ID0gR2xvYmFsU3RhdGU8QXNzZXQ+KCk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMiAvLyAiYXNzZXQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NjMKICAgIC8vIGNvbnN0IGRlY2ltYWxzID0gdGhpcy5hc3NldC52YWx1ZS5kZWNpbWFsczsKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXREZWNpbWFscwogICAgc3dhcAogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgIGFzc2VydCAvLyBhc3NldCBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIwCiAgICAvLyBjb25zdCBTWVNURU1fUFJFQ0lTSU9OOiB1aW50NjQgPSAzOwogICAgcHVzaGludCAzIC8vIDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjY0CiAgICAvLyB0aGlzLnRva2VuQW1vdW50UmVkdWNlLnZhbHVlID0gZGVjaW1hbHMgPiBTWVNURU1fUFJFQ0lTSU9OID8gMTAgKiogKGRlY2ltYWxzIC0gU1lTVEVNX1BSRUNJU0lPTikgOiAwOwogICAgPgogICAgYnogY3JlYXRlQXBwbGljYXRpb25fdGVybmFyeV9mYWxzZUAyCiAgICBmcmFtZV9kaWcgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjAKICAgIC8vIGNvbnN0IFNZU1RFTV9QUkVDSVNJT046IHVpbnQ2NCA9IDM7CiAgICBwdXNoaW50IDMgLy8gMwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NjQKICAgIC8vIHRoaXMudG9rZW5BbW91bnRSZWR1Y2UudmFsdWUgPSBkZWNpbWFscyA+IFNZU1RFTV9QUkVDSVNJT04gPyAxMCAqKiAoZGVjaW1hbHMgLSBTWVNURU1fUFJFQ0lTSU9OKSA6IDA7CiAgICAtCiAgICBwdXNoaW50IDEwIC8vIDEwCiAgICBzd2FwCiAgICBleHAKCmNyZWF0ZUFwcGxpY2F0aW9uX3Rlcm5hcnlfbWVyZ2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ4CiAgICAvLyBwcml2YXRlIHRva2VuQW1vdW50UmVkdWNlID0gR2xvYmFsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgMjMgLy8gInRva2VuQW1vdW50UmVkdWNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NjQKICAgIC8vIHRoaXMudG9rZW5BbW91bnRSZWR1Y2UudmFsdWUgPSBkZWNpbWFscyA+IFNZU1RFTV9QUkVDSVNJT04gPyAxMCAqKiAoZGVjaW1hbHMgLSBTWVNURU1fUFJFQ0lTSU9OKSA6IDA7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NjUKICAgIC8vIHRoaXMudG9rZW5BbW91bnRJbmNyZWFzZS52YWx1ZSA9IGRlY2ltYWxzIDwgU1lTVEVNX1BSRUNJU0lPTiA/IDEwICoqIChTWVNURU1fUFJFQ0lTSU9OIC0gZGVjaW1hbHMpIDogMDsKICAgIGZyYW1lX2RpZyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMAogICAgLy8gY29uc3QgU1lTVEVNX1BSRUNJU0lPTjogdWludDY0ID0gMzsKICAgIHB1c2hpbnQgMyAvLyAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo2NQogICAgLy8gdGhpcy50b2tlbkFtb3VudEluY3JlYXNlLnZhbHVlID0gZGVjaW1hbHMgPCBTWVNURU1fUFJFQ0lTSU9OID8gMTAgKiogKFNZU1RFTV9QUkVDSVNJT04gLSBkZWNpbWFscykgOiAwOwogICAgPAogICAgYnogY3JlYXRlQXBwbGljYXRpb25fdGVybmFyeV9mYWxzZUA1CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMAogICAgLy8gY29uc3QgU1lTVEVNX1BSRUNJU0lPTjogdWludDY0ID0gMzsKICAgIHB1c2hpbnQgMyAvLyAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo2NQogICAgLy8gdGhpcy50b2tlbkFtb3VudEluY3JlYXNlLnZhbHVlID0gZGVjaW1hbHMgPCBTWVNURU1fUFJFQ0lTSU9OID8gMTAgKiogKFNZU1RFTV9QUkVDSVNJT04gLSBkZWNpbWFscykgOiAwOwogICAgZnJhbWVfZGlnIDAKICAgIC0KICAgIHB1c2hpbnQgMTAgLy8gMTAKICAgIHN3YXAKICAgIGV4cAoKY3JlYXRlQXBwbGljYXRpb25fdGVybmFyeV9tZXJnZUA2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDkKICAgIC8vIHByaXZhdGUgdG9rZW5BbW91bnRJbmNyZWFzZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDI0IC8vICJ0b2tlbkFtb3VudEluY3JlYXNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NjUKICAgIC8vIHRoaXMudG9rZW5BbW91bnRJbmNyZWFzZS52YWx1ZSA9IGRlY2ltYWxzIDwgU1lTVEVNX1BSRUNJU0lPTiA/IDEwICoqIChTWVNURU1fUFJFQ0lTSU9OIC0gZGVjaW1hbHMpIDogMDsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCmNyZWF0ZUFwcGxpY2F0aW9uX3Rlcm5hcnlfZmFsc2VANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjY1CiAgICAvLyB0aGlzLnRva2VuQW1vdW50SW5jcmVhc2UudmFsdWUgPSBkZWNpbWFscyA8IFNZU1RFTV9QUkVDSVNJT04gPyAxMCAqKiAoU1lTVEVNX1BSRUNJU0lPTiAtIGRlY2ltYWxzKSA6IDA7CiAgICBpbnRjXzAgLy8gMAogICAgYiBjcmVhdGVBcHBsaWNhdGlvbl90ZXJuYXJ5X21lcmdlQDYKCmNyZWF0ZUFwcGxpY2F0aW9uX3Rlcm5hcnlfZmFsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjY0CiAgICAvLyB0aGlzLnRva2VuQW1vdW50UmVkdWNlLnZhbHVlID0gZGVjaW1hbHMgPiBTWVNURU1fUFJFQ0lTSU9OID8gMTAgKiogKGRlY2ltYWxzIC0gU1lTVEVNX1BSRUNJU0lPTikgOiAwOwogICAgaW50Y18wIC8vIDAKICAgIGIgY3JlYXRlQXBwbGljYXRpb25fdGVybmFyeV9tZXJnZUAzCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wub3B0SW5Ub0FwcGxpY2F0aW9uKCkgLT4gdm9pZDoKb3B0SW5Ub0FwcGxpY2F0aW9uOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NjgKICAgIC8vIG9wdEluVG9BcHBsaWNhdGlvbigpOiB2b2lkIHsKICAgIHByb3RvIDAgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NjkKICAgIC8vIHN1cGVyLm9wdEluVG9BcHBsaWNhdGlvbihUeG4uc2VuZGVyKTsKICAgIHR4biBTZW5kZXIKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjQyCiAgICAvLyBpZiAoIXRoaXMuYmFsYW5jZSh0bykuaGFzVmFsdWUpIHsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzMKICAgIC8vIGJhbGFuY2UgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDQgLy8gImJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NDIKICAgIC8vIGlmICghdGhpcy5iYWxhbmNlKHRvKS5oYXNWYWx1ZSkgewogICAgYXBwX2xvY2FsX2dldF9leAogICAgYnVyeSAxCiAgICBibnogb3B0SW5Ub0FwcGxpY2F0aW9uX2FmdGVyX2lmX2Vsc2VAMwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjQzCiAgICAvLyB0aGlzLmJhbGFuY2UodG8pLnZhbHVlID0gMDsKICAgIGZyYW1lX2RpZyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzMKICAgIC8vIGJhbGFuY2UgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDQgLy8gImJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NDMKICAgIC8vIHRoaXMuYmFsYW5jZSh0bykudmFsdWUgPSAwOwogICAgaW50Y18wIC8vIDAKICAgIGFwcF9sb2NhbF9wdXQKCm9wdEluVG9BcHBsaWNhdGlvbl9hZnRlcl9pZl9lbHNlQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NDUKICAgIC8vIGlmICghdGhpcy51c2VyUmV3YXJkRGVidCh0bykuaGFzVmFsdWUpIHsKICAgIGZyYW1lX2RpZyAwCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjM0CiAgICAvLyB1c2VyUmV3YXJkRGVidCA9IExvY2FsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgNSAvLyAidXNlclJld2FyZERlYnQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NDUKICAgIC8vIGlmICghdGhpcy51c2VyUmV3YXJkRGVidCh0bykuaGFzVmFsdWUpIHsKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGJ1cnkgMQogICAgYm56IG9wdEluVG9BcHBsaWNhdGlvbl9hZnRlcl9pZl9lbHNlQDUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo0NgogICAgLy8gdGhpcy51c2VyUmV3YXJkRGVidCh0bykudmFsdWUgPSAwOwogICAgZnJhbWVfZGlnIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozNAogICAgLy8gdXNlclJld2FyZERlYnQgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDUgLy8gInVzZXJSZXdhcmREZWJ0IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjQ2CiAgICAvLyB0aGlzLnVzZXJSZXdhcmREZWJ0KHRvKS52YWx1ZSA9IDA7CiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2xvY2FsX3B1dAoKb3B0SW5Ub0FwcGxpY2F0aW9uX2FmdGVyX2lmX2Vsc2VANToKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLm9wdEluQXNzZXQoKSAtPiB2b2lkOgpvcHRJbkFzc2V0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NzgKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6ODEtODcKICAgIC8vIGl0eG4KICAgIC8vICAgLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICAgIHhmZXJBc3NldDogdGhpcy5hc3NldC52YWx1ZSwKICAgIC8vICAgICBhc3NldEFtb3VudDogMCwKICAgIC8vICAgICBhc3NldFJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpOwogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjI3CiAgICAvLyBhc3NldCA9IEdsb2JhbFN0YXRlPEFzc2V0PigpOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzIgLy8gImFzc2V0IgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjg1CiAgICAvLyBhc3NldFJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjg0CiAgICAvLyBhc3NldEFtb3VudDogMCwKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6ODEtODYKICAgIC8vIGl0eG4KICAgIC8vICAgLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICAgIHhmZXJBc3NldDogdGhpcy5hc3NldC52YWx1ZSwKICAgIC8vICAgICBhc3NldEFtb3VudDogMCwKICAgIC8vICAgICBhc3NldFJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgfSkKICAgIGludGNfMyAvLyA0CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjgxLTg3CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsCiAgICAvLyAgICAgYXNzZXRBbW91bnQ6IDAsCiAgICAvLyAgICAgYXNzZXRSZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKTsKICAgIGl0eG5fc3VibWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo4OQogICAgLy8gbG9nKCdQb29sOiBvcHQtaW4gY29tcGxldGVkJyk7CiAgICBwdXNoYnl0ZXMgIlBvb2w6IG9wdC1pbiBjb21wbGV0ZWQiCiAgICBsb2cKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLm9ubHlSb3V0ZXIoKSAtPiB2b2lkOgpvbmx5Um91dGVyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OTcKICAgIC8vIGFzc2VydChvcC5UeG4uc2VuZGVyLmJ5dGVzID09PSB0aGlzLnJvdXRlci52YWx1ZS5ieXRlcywgJ1Bvb2w6IG9ubHkgcm91dGVyJyk7CiAgICB0eG4gU2VuZGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MAogICAgLy8gcm91dGVyID0gR2xvYmFsU3RhdGU8QWRkcmVzcz4oKTsvLyBpcyBkZXBvc2l0IG9wZXJhdGlvbiBhbGxvd2VkCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMjEgLy8gInJvdXRlciIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo5NwogICAgLy8gYXNzZXJ0KG9wLlR4bi5zZW5kZXIuYnl0ZXMgPT09IHRoaXMucm91dGVyLnZhbHVlLmJ5dGVzLCAnUG9vbDogb25seSByb3V0ZXInKTsKICAgID09CiAgICBhc3NlcnQgLy8gUG9vbDogb25seSByb3V0ZXIKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLm9ubHlTdG9wQXV0aG9yaXR5KCkgLT4gdm9pZDoKb25seVN0b3BBdXRob3JpdHk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMDEKICAgIC8vIGFzc2VydChvcC5UeG4uc2VuZGVyLmJ5dGVzID09PSB0aGlzLnN0b3BBdXRob3JpdHkudmFsdWUuYnl0ZXMsICdQb29sOiBpcyBub3Qgc3RvcEF1dGhvcml0eScpOwogICAgdHhuIFNlbmRlcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTEKICAgIC8vIHByaXZhdGUgc3RvcEF1dGhvcml0eSA9IEdsb2JhbFN0YXRlPEFkZHJlc3M+KCk7Ly8gY2FuIHJlc3RyaWN0IGRlcG9zaXQgb3Igd2l0aGRyYXcgb3BlcmF0aW9ucwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDIyIC8vICJzdG9wQXV0aG9yaXR5IgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjEwMQogICAgLy8gYXNzZXJ0KG9wLlR4bi5zZW5kZXIuYnl0ZXMgPT09IHRoaXMuc3RvcEF1dGhvcml0eS52YWx1ZS5ieXRlcywgJ1Bvb2w6IGlzIG5vdCBzdG9wQXV0aG9yaXR5Jyk7CiAgICA9PQogICAgYXNzZXJ0IC8vIFBvb2w6IGlzIG5vdCBzdG9wQXV0aG9yaXR5CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC52YWxpZGF0ZUJhbGFuY2VSYXRpbygpIC0+IHZvaWQ6CnZhbGlkYXRlQmFsYW5jZVJhdGlvOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTA3CiAgICAvLyBwcml2YXRlIHZhbGlkYXRlQmFsYW5jZVJhdGlvKCk6IHZvaWQgewogICAgcHJvdG8gMCAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MQogICAgLy8gdG9rZW5CYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18wIC8vICJ0b2tlbkJhbGFuY2UiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgc3dhcAogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQyCiAgICAvLyB2VXNkQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgc3dhcAogICAgZHVwCiAgICBjb3ZlciAyCiAgICBjb3ZlciAzCiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMTAKICAgIC8vIGlmICh0b2tlbkJhbGFuY2UgPiB2VXNkQmFsYW5jZSkgewogICAgPgogICAgYnogdmFsaWRhdGVCYWxhbmNlUmF0aW9fZWxzZV9ib2R5QDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjExMQogICAgLy8gYXNzZXJ0KCh2VXNkQmFsYW5jZSAqIEJQKSAvIHRva2VuQmFsYW5jZSA+PSB0aGlzLmJhbGFuY2VSYXRpb01pbkJQLnZhbHVlLCAnUG9vbDogbG93IHZVU0QgYmFsYW5jZScpOwogICAgZnJhbWVfZGlnIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxOQogICAgLy8gZXhwb3J0IGNvbnN0IEJQOiB1aW50NjQgPSAxMF8wMDA7CiAgICBpbnRjIDQgLy8gMTAwMDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjExMQogICAgLy8gYXNzZXJ0KCh2VXNkQmFsYW5jZSAqIEJQKSAvIHRva2VuQmFsYW5jZSA+PSB0aGlzLmJhbGFuY2VSYXRpb01pbkJQLnZhbHVlLCAnUG9vbDogbG93IHZVU0QgYmFsYW5jZScpOwogICAgKgogICAgZnJhbWVfZGlnIDAKICAgIC8KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQzCiAgICAvLyBiYWxhbmNlUmF0aW9NaW5CUCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxNiAvLyAiYmFsYW5jZVJhdGlvTWluQlAiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTExCiAgICAvLyBhc3NlcnQoKHZVc2RCYWxhbmNlICogQlApIC8gdG9rZW5CYWxhbmNlID49IHRoaXMuYmFsYW5jZVJhdGlvTWluQlAudmFsdWUsICdQb29sOiBsb3cgdlVTRCBiYWxhbmNlJyk7CiAgICA+PQogICAgYXNzZXJ0IC8vIFBvb2w6IGxvdyB2VVNEIGJhbGFuY2UKCnZhbGlkYXRlQmFsYW5jZVJhdGlvX2FmdGVyX2lmX2Vsc2VANToKICAgIHJldHN1YgoKdmFsaWRhdGVCYWxhbmNlUmF0aW9fZWxzZV9ib2R5QDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMTIKICAgIC8vIH0gZWxzZSBpZiAodG9rZW5CYWxhbmNlIDwgdlVzZEJhbGFuY2UpIHsKICAgIGZyYW1lX2RpZyAwCiAgICBmcmFtZV9kaWcgMQogICAgPAogICAgYnogdmFsaWRhdGVCYWxhbmNlUmF0aW9fYWZ0ZXJfaWZfZWxzZUA1CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMTMKICAgIC8vIGFzc2VydCgodG9rZW5CYWxhbmNlICogQlApIC8gdlVzZEJhbGFuY2UgPj0gdGhpcy5iYWxhbmNlUmF0aW9NaW5CUC52YWx1ZSwgJ1Bvb2w6IGxvdyB0b2tlbiBiYWxhbmNlJyk7CiAgICBmcmFtZV9kaWcgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjE5CiAgICAvLyBleHBvcnQgY29uc3QgQlA6IHVpbnQ2NCA9IDEwXzAwMDsKICAgIGludGMgNCAvLyAxMDAwMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTEzCiAgICAvLyBhc3NlcnQoKHRva2VuQmFsYW5jZSAqIEJQKSAvIHZVc2RCYWxhbmNlID49IHRoaXMuYmFsYW5jZVJhdGlvTWluQlAudmFsdWUsICdQb29sOiBsb3cgdG9rZW4gYmFsYW5jZScpOwogICAgKgogICAgZnJhbWVfZGlnIDEKICAgIC8KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQzCiAgICAvLyBiYWxhbmNlUmF0aW9NaW5CUCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxNiAvLyAiYmFsYW5jZVJhdGlvTWluQlAiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTEzCiAgICAvLyBhc3NlcnQoKHRva2VuQmFsYW5jZSAqIEJQKSAvIHZVc2RCYWxhbmNlID49IHRoaXMuYmFsYW5jZVJhdGlvTWluQlAudmFsdWUsICdQb29sOiBsb3cgdG9rZW4gYmFsYW5jZScpOwogICAgPj0KICAgIGFzc2VydCAvLyBQb29sOiBsb3cgdG9rZW4gYmFsYW5jZQogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuZGVwb3NpdCgpIC0+IHZvaWQ6CmRlcG9zaXQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMjktMTMwCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIC8vIGRlcG9zaXQoKTogdm9pZCB7CiAgICBwcm90byAwIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUyCiAgICAvLyBjYW5EZXBvc2l0ID0gR2xvYmFsU3RhdGU8Ym9vbGVhbj4oeyBpbml0aWFsVmFsdWU6IHRydWUgfSk7Ly8gaXMgZGVwb3NpdCBvcGVyYXRpb24gYWxsb3dlZAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDEyIC8vICJjYW5EZXBvc2l0IgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjExOAogICAgLy8gYXNzZXJ0KHRoaXMuY2FuRGVwb3NpdC52YWx1ZSwgJ1Bvb2w6IGRlcG9zaXQgcHJvaGliaXRlZCcpOwogICAgYXNzZXJ0IC8vIFBvb2w6IGRlcG9zaXQgcHJvaGliaXRlZAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDYKICAgIC8vIGQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDYgLy8gImQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgc3dhcAogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyNwogICAgLy8gYXNzZXQgPSBHbG9iYWxTdGF0ZTxBc3NldD4oKTsKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18yIC8vICJhc3NldCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6MzYKICAgIC8vIGFzc2VydChUeG4uZ3JvdXBJbmRleCA+IDAsIGBBc3NldCB0eG4gbWlzc2luZ2ApOwogICAgdHhuIEdyb3VwSW5kZXgKICAgIGFzc2VydCAvLyBBc3NldCB0eG4gbWlzc2luZwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjM5CiAgICAvLyBjb25zdCBwcmV2SWR4OiB1aW50NjQgPSBUeG4uZ3JvdXBJbmRleCAtIDE7CiAgICB0eG4gR3JvdXBJbmRleAogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czo0MQogICAgLy8gY29uc3QgcGF5ID0gZ3R4bi5Bc3NldFRyYW5zZmVyVHhuKHByZXZJZHgpOwogICAgZHVwCiAgICBndHhucyBUeXBlRW51bQogICAgaW50Y18zIC8vIGF4ZmVyCiAgICA9PQogICAgYXNzZXJ0IC8vIHRyYW5zYWN0aW9uIHR5cGUgaXMgYXhmZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czo0NAogICAgLy8gYXNzZXJ0KHBheS5hc3NldFJlY2VpdmVyID09PSBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywgYEFzc2V0IG11c3QgZ28gdG8gYXBwYCk7CiAgICBkdXAKICAgIGd0eG5zIEFzc2V0UmVjZWl2ZXIKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICA9PQogICAgYXNzZXJ0IC8vIEFzc2V0IG11c3QgZ28gdG8gYXBwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6NDUKICAgIC8vIGFzc2VydChwYXkueGZlckFzc2V0LmlkID09PSBhc3NldElkLCBgV3JvbmcgYXNzZXRgKTsKICAgIGR1cAogICAgZ3R4bnMgWGZlckFzc2V0CiAgICB1bmNvdmVyIDIKICAgID09CiAgICBhc3NlcnQgLy8gV3JvbmcgYXNzZXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czo0OAogICAgLy8gYXNzZXJ0KHBheS5yZWtleVRvID09PSBHbG9iYWwuemVyb0FkZHJlc3MsIGBSZWtleSBub3QgYWxsb3dlZGApOwogICAgZHVwCiAgICBndHhucyBSZWtleVRvCiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKICAgID09CiAgICBhc3NlcnQgLy8gUmVrZXkgbm90IGFsbG93ZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czo0OQogICAgLy8gYXNzZXJ0KHBheS5hc3NldENsb3NlVG8gPT09IEdsb2JhbC56ZXJvQWRkcmVzcywgYENsb3NlVG8gbm90IGFsbG93ZWRgKTsKICAgIGR1cAogICAgZ3R4bnMgQXNzZXRDbG9zZVRvCiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKICAgID09CiAgICBhc3NlcnQgLy8gQ2xvc2VUbyBub3QgYWxsb3dlZAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjUwCiAgICAvLyByZXR1cm4gcGF5LmFzc2V0QW1vdW50OwogICAgZ3R4bnMgQXNzZXRBbW91bnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjEzNgogICAgLy8gY29uc3QgYW1vdW50U1AgPSB0aGlzLnRvU3lzdGVtUHJlY2lzaW9uKGFtb3VudCk7CiAgICBjYWxsc3ViIHRvU3lzdGVtUHJlY2lzaW9uCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjEzNwogICAgLy8gYXNzZXJ0KGFtb3VudFNQID4gMCwgJ1Bvb2w6IHRvbyBsaXR0bGUnKTsKICAgIGR1cAogICAgYXNzZXJ0IC8vIFBvb2w6IHRvbyBsaXR0bGUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ0CiAgICAvLyByZXNlcnZlcyA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMyAvLyAicmVzZXJ2ZXMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTQwCiAgICAvLyB0aGlzLnJlc2VydmVzLnZhbHVlICs9IGFtb3VudFNQOwogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDQKICAgIC8vIHJlc2VydmVzID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzMgLy8gInJlc2VydmVzIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTQwCiAgICAvLyB0aGlzLnJlc2VydmVzLnZhbHVlICs9IGFtb3VudFNQOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQxCiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gInRva2VuQmFsYW5jZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBzd2FwCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGNvdmVyIDMKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQyCiAgICAvLyB2VXNkQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgc3dhcAogICAgZHVwCiAgICBjb3ZlciAyCiAgICBjb3ZlciA0CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNDUKICAgIC8vIGNvbnN0IG9sZEJhbGFuY2U6IHVpbnQ2NCA9ICh0b2tlbkJhbGFuY2UgKyB2VXNkQmFsYW5jZSk7CiAgICArCiAgICBzd2FwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNDYKICAgIC8vIGlmIChvbGREID09PSAwIHx8IG9sZEJhbGFuY2UgPT09IDApIHsKICAgIGJ6IGRlcG9zaXRfaWZfYm9keUAyCiAgICBmcmFtZV9kaWcgNAogICAgYm56IGRlcG9zaXRfZWxzZV9ib2R5QDMKCmRlcG9zaXRfaWZfYm9keUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTQ4CiAgICAvLyBjb25zdCBoYWxmQW1vdW50OiB1aW50NjQgPSBhbW91bnRTUCA+PiAxOwogICAgZnJhbWVfZGlnIDEKICAgIGludGNfMSAvLyAxCiAgICBzaHIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQxCiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gInRva2VuQmFsYW5jZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNDkKICAgIC8vIHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlICs9IGhhbGZBbW91bnQ7CiAgICBkaWcgMQogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDEKICAgIC8vIHRva2VuQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18wIC8vICJ0b2tlbkJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNDkKICAgIC8vIHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlICs9IGhhbGZBbW91bnQ7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDIKICAgIC8vIHZVc2RCYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18xIC8vICJ2VXNkQmFsYW5jZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNTAKICAgIC8vIHRoaXMudlVzZEJhbGFuY2UudmFsdWUgKz0gaGFsZkFtb3VudDsKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQyCiAgICAvLyB2VXNkQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18xIC8vICJ2VXNkQmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE1MAogICAgLy8gdGhpcy52VXNkQmFsYW5jZS52YWx1ZSArPSBoYWxmQW1vdW50OwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKCmRlcG9zaXRfYWZ0ZXJfaWZfZWxzZUA0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTU2CiAgICAvLyB0aGlzLnVwZGF0ZUQoKTsKICAgIGNhbGxzdWIgdXBkYXRlRAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTU4CiAgICAvLyB0aGlzLmRlcG9zaXRMcChUeG4uc2VuZGVyLCB0aGlzLmQudmFsdWUgLSBvbGREKTsKICAgIHR4biBTZW5kZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyBkID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA2IC8vICJkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE1OAogICAgLy8gdGhpcy5kZXBvc2l0THAoVHhuLnNlbmRlciwgdGhpcy5kLnZhbHVlIC0gb2xkRCk7CiAgICBmcmFtZV9kaWcgMAogICAgLQogICAgY2FsbHN1YiBkZXBvc2l0THAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQxCiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gInRva2VuQmFsYW5jZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMQogICAgLy8gY29uc3QgTUFYX1RPS0VOX0JBTEFOQ0U6IHVpbnQ2NCA9IDIgKiogNDA7IC8vIE1heCBwb3NzaWJsZSB0b2tlbiBiYWxhbmNlCiAgICBwdXNoaW50IDEwOTk1MTE2Mjc3NzYgLy8gMTA5OTUxMTYyNzc3NgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTYwCiAgICAvLyBhc3NlcnQodGhpcy50b2tlbkJhbGFuY2UudmFsdWUgPCBNQVhfVE9LRU5fQkFMQU5DRSwgJ1Bvb2w6IHRvbyBtdWNoJyk7CiAgICA8CiAgICBhc3NlcnQgLy8gUG9vbDogdG9vIG11Y2gKICAgIHJldHN1YgoKZGVwb3NpdF9lbHNlX2JvZHlAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQxCiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gInRva2VuQmFsYW5jZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNTMKICAgIC8vIHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlICs9IG5ldyBVaW50TjY0KChCaWdVaW50KGFtb3VudFNQKSAqIEJpZ1VpbnQodG9rZW5CYWxhbmNlKSkgLyBCaWdVaW50KG9sZEJhbGFuY2UpKS5uYXRpdmU7CiAgICBmcmFtZV9kaWcgMQogICAgaXRvYgogICAgZnJhbWVfZGlnIDIKICAgIGl0b2IKICAgIGRpZyAxCiAgICBiKgogICAgZnJhbWVfZGlnIDQKICAgIGl0b2IKICAgIHN3YXAKICAgIGRpZyAxCiAgICBiLwogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzIgLy8gOAogICAgYnplcm8KICAgIHN3YXAKICAgIGRpZyAxCiAgICBifAogICAgYnRvaQogICAgdW5jb3ZlciA0CiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MQogICAgLy8gdG9rZW5CYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzAgLy8gInRva2VuQmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE1MwogICAgLy8gdGhpcy50b2tlbkJhbGFuY2UudmFsdWUgKz0gbmV3IFVpbnRONjQoKEJpZ1VpbnQoYW1vdW50U1ApICogQmlnVWludCh0b2tlbkJhbGFuY2UpKSAvIEJpZ1VpbnQob2xkQmFsYW5jZSkpLm5hdGl2ZTsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MgogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gInZVc2RCYWxhbmNlIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE1NAogICAgLy8gdGhpcy52VXNkQmFsYW5jZS52YWx1ZSArPSBuZXcgVWludE42NCgoQmlnVWludChhbW91bnRTUCkgKiBCaWdVaW50KHZVc2RCYWxhbmNlKSkgLyBCaWdVaW50KG9sZEJhbGFuY2UpKS5uYXRpdmU7CiAgICBmcmFtZV9kaWcgMwogICAgaXRvYgogICAgdW5jb3ZlciA0CiAgICBiKgogICAgdW5jb3ZlciAzCiAgICBiLwogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICB1bmNvdmVyIDIKICAgIGJ8CiAgICBidG9pCiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MgogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNTQKICAgIC8vIHRoaXMudlVzZEJhbGFuY2UudmFsdWUgKz0gbmV3IFVpbnRONjQoKEJpZ1VpbnQoYW1vdW50U1ApICogQmlnVWludCh2VXNkQmFsYW5jZSkpIC8gQmlnVWludChvbGRCYWxhbmNlKSkubmF0aXZlOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIGIgZGVwb3NpdF9hZnRlcl9pZl9lbHNlQDQKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC53aXRoZHJhdyhhbW91bnRMcDogdWludDY0KSAtPiB2b2lkOgp3aXRoZHJhdzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE2OC0xNjkKICAgIC8vIEBhYmltZXRob2QoKQogICAgLy8gd2l0aGRyYXcoYW1vdW50THA6IHVpbnQ2NCk6IHZvaWQgewogICAgcHJvdG8gMSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MwogICAgLy8gY2FuV2l0aGRyYXcgPSBHbG9iYWxTdGF0ZTxib29sZWFuPih7IGluaXRpYWxWYWx1ZTogdHJ1ZSB9KTsvLyBpcyB3aXRoZHJhd24gb3BlcmF0aW9uIGFsbG93ZWQKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxMyAvLyAiY2FuV2l0aGRyYXciCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTIyCiAgICAvLyBhc3NlcnQodGhpcy5jYW5XaXRoZHJhdy52YWx1ZSwgJyJQb29sOiB3aXRoZHJhdyBwcm9oaWJpdGVkJyk7CiAgICBhc3NlcnQgLy8gIlBvb2w6IHdpdGhkcmF3IHByb2hpYml0ZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyBkID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA2IC8vICJkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE3MwogICAgLy8gdGhpcy53aXRoZHJhd0xwKFR4bi5zZW5kZXIsIGFtb3VudExwKTsKICAgIHR4biBTZW5kZXIKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEyNgogICAgLy8gbGV0IHVzZXJMcEFtb3VudCA9IHRoaXMuYmFsYW5jZShmcm9tKS52YWx1ZTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzMKICAgIC8vIGJhbGFuY2UgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDQgLy8gImJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTI2CiAgICAvLyBsZXQgdXNlckxwQW1vdW50ID0gdGhpcy5iYWxhbmNlKGZyb20pLnZhbHVlOwogICAgYXBwX2xvY2FsX2dldF9leAogICAgc3dhcAogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgIGFzc2VydCAvLyBjaGVjayBMb2NhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEyNwogICAgLy8gYXNzZXJ0KHVzZXJMcEFtb3VudCA+PSBscEFtb3VudCwgJ1Jld2FyZE1hbmFnZXI6IG5vdCBlbm91Z2ggYW1vdW50Jyk7CiAgICBkdXAKICAgIGZyYW1lX2RpZyAtMQogICAgPj0KICAgIGFzc2VydCAvLyBSZXdhcmRNYW5hZ2VyOiBub3QgZW5vdWdoIGFtb3VudAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMwCiAgICAvLyBhY2NSZXdhcmRQZXJTaGFyZVAgPSBHbG9iYWxTdGF0ZTxiaWd1aW50Pih7IGluaXRpYWxWYWx1ZTogMG4gfSk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgOCAvLyAiYWNjUmV3YXJkUGVyU2hhcmVQIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHN3YXAKICAgIGNvdmVyIDIKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMjkKICAgIC8vIGxldCBwZW5kaW5nOiB1aW50NjQgPSAwOwogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMzAKICAgIC8vIGlmICh1c2VyTHBBbW91bnQgPiAwKSB7CiAgICBieiB3aXRoZHJhd19hZnRlcl9pZl9lbHNlQDYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMzEKICAgIC8vIHBlbmRpbmcgPSBiaWd1aW50VG9VaW50NjRNb2R1bG8oKEJpZ1VpbnQodXNlckxwQW1vdW50KSAqIGFjY1Jld2FyZFBlclNoYXJlUCkgLyBQX1NDQUxFKSAtIHRoaXMudXNlclJld2FyZERlYnQoZnJvbSkudmFsdWU7CiAgICBmcmFtZV9kaWcgMgogICAgaXRvYgogICAgZnJhbWVfZGlnIDMKICAgIGIqCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjAKICAgIC8vIGNvbnN0IFBfU0NBTEU6IGJpZ3VpbnQgPSBCaWdVaW50KDEgPDwgUCk7CiAgICBieXRlYyA5IC8vIDB4MDEwMDAwMDAwMDAwMDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMzEKICAgIC8vIHBlbmRpbmcgPSBiaWd1aW50VG9VaW50NjRNb2R1bG8oKEJpZ1VpbnQodXNlckxwQW1vdW50KSAqIGFjY1Jld2FyZFBlclNoYXJlUCkgLyBQX1NDQUxFKSAtIHRoaXMudXNlclJld2FyZERlYnQoZnJvbSkudmFsdWU7CiAgICBiLwogICAgY2FsbHN1YiBiaWd1aW50VG9VaW50NjRNb2R1bG8KICAgIGZyYW1lX2RpZyAxCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjM0CiAgICAvLyB1c2VyUmV3YXJkRGVidCA9IExvY2FsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgNSAvLyAidXNlclJld2FyZERlYnQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTMxCiAgICAvLyBwZW5kaW5nID0gYmlndWludFRvVWludDY0TW9kdWxvKChCaWdVaW50KHVzZXJMcEFtb3VudCkgKiBhY2NSZXdhcmRQZXJTaGFyZVApIC8gUF9TQ0FMRSkgLSB0aGlzLnVzZXJSZXdhcmREZWJ0KGZyb20pLnZhbHVlOwogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICAtCiAgICBmcmFtZV9idXJ5IDQKCndpdGhkcmF3X2FmdGVyX2lmX2Vsc2VANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMzMKICAgIC8vIHVzZXJMcEFtb3VudCAtPSBscEFtb3VudDsKICAgIGZyYW1lX2RpZyAyCiAgICBmcmFtZV9kaWcgLTEKICAgIC0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMzQKICAgIC8vIHRoaXMuYmFsYW5jZShmcm9tKS52YWx1ZSAtPSBscEFtb3VudDsKICAgIGZyYW1lX2RpZyAxCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzMKICAgIC8vIGJhbGFuY2UgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDQgLy8gImJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTM0CiAgICAvLyB0aGlzLmJhbGFuY2UoZnJvbSkudmFsdWUgLT0gbHBBbW91bnQ7CiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIGZyYW1lX2RpZyAtMQogICAgLQogICAgZGlnIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMwogICAgLy8gYmFsYW5jZSA9IExvY2FsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgNCAvLyAiYmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMzQKICAgIC8vIHRoaXMuYmFsYW5jZShmcm9tKS52YWx1ZSAtPSBscEFtb3VudDsKICAgIHVuY292ZXIgMgogICAgYXBwX2xvY2FsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjI5CiAgICAvLyB0b3RhbFN1cHBseSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNyAvLyAidG90YWxTdXBwbHkiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEzNQogICAgLy8gdGhpcy50b3RhbFN1cHBseS52YWx1ZSAtPSBscEFtb3VudDsKICAgIGZyYW1lX2RpZyAtMQogICAgLQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjI5CiAgICAvLyB0b3RhbFN1cHBseSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyA3IC8vICJ0b3RhbFN1cHBseSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMzUKICAgIC8vIHRoaXMudG90YWxTdXBwbHkudmFsdWUgLT0gbHBBbW91bnQ7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEzNgogICAgLy8gdGhpcy51c2VyUmV3YXJkRGVidChmcm9tKS52YWx1ZSA9IGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbyhCaWdVaW50KHVzZXJMcEFtb3VudCkgKiBhY2NSZXdhcmRQZXJTaGFyZVAgLyBQX1NDQUxFKTsKICAgIHN3YXAKICAgIGl0b2IKICAgIGZyYW1lX2RpZyAzCiAgICBiKgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjIwCiAgICAvLyBjb25zdCBQX1NDQUxFOiBiaWd1aW50ID0gQmlnVWludCgxIDw8IFApOwogICAgYnl0ZWMgOSAvLyAweDAxMDAwMDAwMDAwMDAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTM2CiAgICAvLyB0aGlzLnVzZXJSZXdhcmREZWJ0KGZyb20pLnZhbHVlID0gYmlndWludFRvVWludDY0TW9kdWxvKEJpZ1VpbnQodXNlckxwQW1vdW50KSAqIGFjY1Jld2FyZFBlclNoYXJlUCAvIFBfU0NBTEUpOwogICAgYi8KICAgIGNhbGxzdWIgYmlndWludFRvVWludDY0TW9kdWxvCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzQKICAgIC8vIHVzZXJSZXdhcmREZWJ0ID0gTG9jYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlYyA1IC8vICJ1c2VyUmV3YXJkRGVidCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMzYKICAgIC8vIHRoaXMudXNlclJld2FyZERlYnQoZnJvbSkudmFsdWUgPSBiaWd1aW50VG9VaW50NjRNb2R1bG8oQmlnVWludCh1c2VyTHBBbW91bnQpICogYWNjUmV3YXJkUGVyU2hhcmVQIC8gUF9TQ0FMRSk7CiAgICBzd2FwCiAgICBhcHBfbG9jYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTM3CiAgICAvLyBpZiAocGVuZGluZyA+IDApIHsKICAgIGZyYW1lX2RpZyA0CiAgICBieiB3aXRoZHJhd19hZnRlcl9pZl9lbHNlQDkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMzgKICAgIC8vIGFzc2V0VHJhbnNmZXIoeyB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsIGFzc2V0QW1vdW50OiBwZW5kaW5nLCBhc3NldFJlY2VpdmVyOiBmcm9tIH0pLnN1Ym1pdCgpOwogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjI3CiAgICAvLyBhc3NldCA9IEdsb2JhbFN0YXRlPEFzc2V0PigpOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzIgLy8gImFzc2V0IgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGZyYW1lX2RpZyAxCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgZnJhbWVfZGlnIDQKICAgIGR1cAogICAgY292ZXIgMgogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMzgKICAgIC8vIGFzc2V0VHJhbnNmZXIoeyB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsIGFzc2V0QW1vdW50OiBwZW5kaW5nLCBhc3NldFJlY2VpdmVyOiBmcm9tIH0pLnN1Ym1pdCgpOwogICAgaW50Y18zIC8vIDQKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMzkKICAgIC8vIGVtaXQ8UmV3YXJkc0NsYWltZWQ+KHsgdXNlcjogbmV3IEFkZHJlc3MoZnJvbSksIHBlbmRpbmcgfSk7CiAgICBpdG9iCiAgICBjb25jYXQKICAgIGJ5dGVjIDI1IC8vIG1ldGhvZCAiUmV3YXJkc0NsYWltZWQoYWRkcmVzcyx1aW50NjQpIgogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKCndpdGhkcmF3X2FmdGVyX2lmX2Vsc2VAOToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxNDEKICAgIC8vIGVtaXQ8V2l0aGRyYXc+KHsgZnJvbTogbmV3IEFkZHJlc3MoZnJvbSksIGxwQW1vdW50IH0pOwogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICBmcmFtZV9kaWcgMQogICAgZGlnIDEKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4ZDNhZmE0ZjEgLy8gbWV0aG9kICJXaXRoZHJhdyhhZGRyZXNzLHVpbnQ2NCkiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDEKICAgIC8vIHRva2VuQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAidG9rZW5CYWxhbmNlIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQyCiAgICAvLyB2VXNkQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTgxCiAgICAvLyBjb25zdCBvbGRCYWxhbmNlOiB1aW50NjQgPSAodG9rZW5CYWxhbmNlICsgdlVzZEJhbGFuY2UpOwogICAgZHVwMgogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDEKICAgIC8vIHRva2VuQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAidG9rZW5CYWxhbmNlIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE4MgogICAgLy8gdGhpcy50b2tlbkJhbGFuY2UudmFsdWUgLT0gbmV3IFVpbnRONjQoKEJpZ1VpbnQoYW1vdW50THApICogQmlnVWludCh0b2tlbkJhbGFuY2UpKSAvIEJpZ1VpbnQob2xkQmFsYW5jZSkpLm5hdGl2ZTsKICAgIHVuY292ZXIgMwogICAgaXRvYgogICAgZGlnIDQKICAgIGIqCiAgICBkaWcgMgogICAgaXRvYgogICAgc3dhcAogICAgZGlnIDEKICAgIGIvCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMiAvLyA4CiAgICBiemVybwogICAgc3dhcAogICAgZGlnIDEKICAgIGJ8CiAgICBidG9pCiAgICB1bmNvdmVyIDMKICAgIHN3YXAKICAgIC0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQxCiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMCAvLyAidG9rZW5CYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTgyCiAgICAvLyB0aGlzLnRva2VuQmFsYW5jZS52YWx1ZSAtPSBuZXcgVWludE42NCgoQmlnVWludChhbW91bnRMcCkgKiBCaWdVaW50KHRva2VuQmFsYW5jZSkpIC8gQmlnVWludChvbGRCYWxhbmNlKSkubmF0aXZlOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQyCiAgICAvLyB2VXNkQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTgzCiAgICAvLyB0aGlzLnZVc2RCYWxhbmNlLnZhbHVlIC09IG5ldyBVaW50TjY0KChCaWdVaW50KGFtb3VudExwKSAqIEJpZ1VpbnQodlVzZEJhbGFuY2UpKSAvIEJpZ1VpbnQob2xkQmFsYW5jZSkpLm5hdGl2ZTsKICAgIHVuY292ZXIgNAogICAgaXRvYgogICAgdW5jb3ZlciA1CiAgICBiKgogICAgdW5jb3ZlciAzCiAgICBiLwogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICB1bmNvdmVyIDIKICAgIGJ8CiAgICBidG9pCiAgICAtCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MgogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxODMKICAgIC8vIHRoaXMudlVzZEJhbGFuY2UudmFsdWUgLT0gbmV3IFVpbnRONjQoKEJpZ1VpbnQoYW1vdW50THApICogQmlnVWludCh2VXNkQmFsYW5jZSkpIC8gQmlnVWludChvbGRCYWxhbmNlKSkubmF0aXZlOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQxCiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gInRva2VuQmFsYW5jZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MgogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gInZVc2RCYWxhbmNlIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE4NQogICAgLy8gYXNzZXJ0KHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlICsgdGhpcy52VXNkQmFsYW5jZS52YWx1ZSA8IG9sZEJhbGFuY2UsICdQb29sOiB6ZXJvIGNoYW5nZXMnKTsKICAgICsKICAgID4KICAgIGFzc2VydCAvLyBQb29sOiB6ZXJvIGNoYW5nZXMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ0CiAgICAvLyByZXNlcnZlcyA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMyAvLyAicmVzZXJ2ZXMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTg4CiAgICAvLyBhc3NlcnQoYW1vdW50THAgPD0gdGhpcy5yZXNlcnZlcy52YWx1ZSwgJ1Bvb2w6IHJlc2VydmVzJyk7CiAgICBmcmFtZV9kaWcgLTEKICAgID49CiAgICBhc3NlcnQgLy8gUG9vbDogcmVzZXJ2ZXMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ0CiAgICAvLyByZXNlcnZlcyA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMyAvLyAicmVzZXJ2ZXMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTkxCiAgICAvLyB0aGlzLnJlc2VydmVzLnZhbHVlIC09IGFtb3VudExwOwogICAgZnJhbWVfZGlnIC0xCiAgICAtCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NAogICAgLy8gcmVzZXJ2ZXMgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMyAvLyAicmVzZXJ2ZXMiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxOTEKICAgIC8vIHRoaXMucmVzZXJ2ZXMudmFsdWUgLT0gYW1vdW50THA7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTk0CiAgICAvLyB0aGlzLnVwZGF0ZUQoKTsKICAgIGNhbGxzdWIgdXBkYXRlRAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDYKICAgIC8vIGQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDYgLy8gImQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTk1CiAgICAvLyBhc3NlcnQodGhpcy5kLnZhbHVlIDwgb2xkRCwgJ1Bvb2w6IHplcm8gRCBjaGFuZ2VzJyk7CiAgICBmcmFtZV9kaWcgMAogICAgPAogICAgYXNzZXJ0IC8vIFBvb2w6IHplcm8gRCBjaGFuZ2VzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxOTctMjAxCiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsCiAgICAvLyAgIGFzc2V0QW1vdW50OiB0aGlzLmZyb21TeXN0ZW1QcmVjaXNpb24oYW1vdW50THApLAogICAgLy8gICBhc3NldFJlY2VpdmVyOiBUeG4uc2VuZGVyLAogICAgLy8gfSkuc3VibWl0KCk7CiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjcKICAgIC8vIGFzc2V0ID0gR2xvYmFsU3RhdGU8QXNzZXQ+KCk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMiAvLyAiYXNzZXQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTk5CiAgICAvLyBhc3NldEFtb3VudDogdGhpcy5mcm9tU3lzdGVtUHJlY2lzaW9uKGFtb3VudExwKSwKICAgIGZyYW1lX2RpZyAtMQogICAgY2FsbHN1YiBmcm9tU3lzdGVtUHJlY2lzaW9uCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMDAKICAgIC8vIGFzc2V0UmVjZWl2ZXI6IFR4bi5zZW5kZXIsCiAgICB0eG4gU2VuZGVyCiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxOTctMjAxCiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsCiAgICAvLyAgIGFzc2V0QW1vdW50OiB0aGlzLmZyb21TeXN0ZW1QcmVjaXNpb24oYW1vdW50THApLAogICAgLy8gICBhc3NldFJlY2VpdmVyOiBUeG4uc2VuZGVyLAogICAgLy8gfSkuc3VibWl0KCk7CiAgICBpbnRjXzMgLy8gNAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuc3dhcFRvVlVzZCh1c2VyOiBieXRlcywgYW1vdW50OiB1aW50NjQsIHplcm9GZWU6IHVpbnQ2NCkgLT4gdWludDY0Ogpzd2FwVG9WVXNkOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjEzLTIxNwogICAgLy8gc3dhcFRvVlVzZCgKICAgIC8vICAgdXNlcjogQWRkcmVzcywKICAgIC8vICAgYW1vdW50OiB1aW50NjQsCiAgICAvLyAgIHplcm9GZWU6IGJvb2xlYW4sCiAgICAvLyApOiB1aW50NjQgewogICAgcHJvdG8gMyAxCiAgICBwdXNoYnl0ZXMgIiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIxOAogICAgLy8gdGhpcy5vbmx5Um91dGVyKCk7CiAgICBjYWxsc3ViIG9ubHlSb3V0ZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIyMAogICAgLy8gbGV0IHJlc3VsdDogdWludDY0ID0gMDsgLy8gMCBieSBkZWZhdWx0CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjIwLTIyMQogICAgLy8gbGV0IHJlc3VsdDogdWludDY0ID0gMDsgLy8gMCBieSBkZWZhdWx0CiAgICAvLyBsZXQgZmVlOiB1aW50NjQgPSAwOwogICAgZHVwbiAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMjIKICAgIC8vIGlmIChhbW91bnQgPiAwKSB7CiAgICBmcmFtZV9kaWcgLTIKICAgIGJ6IHN3YXBUb1ZVc2RfYWZ0ZXJfaWZfZWxzZUA2CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMjMKICAgIC8vIGlmICghemVyb0ZlZSkgewogICAgZnJhbWVfZGlnIC0xCiAgICBibnogc3dhcFRvVlVzZF9hZnRlcl9pZl9lbHNlQDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM5CiAgICAvLyBmZWVTaGFyZUJQID0gR2xvYmFsU3RhdGU8dWludDY0PigpOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDE1IC8vICJmZWVTaGFyZUJQIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIyNAogICAgLy8gZmVlID0gKGFtb3VudCAqIHRoaXMuZmVlU2hhcmVCUC52YWx1ZSkgLyBCUDsKICAgIGZyYW1lX2RpZyAtMgogICAgKgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjE5CiAgICAvLyBleHBvcnQgY29uc3QgQlA6IHVpbnQ2NCA9IDEwXzAwMDsKICAgIGludGMgNCAvLyAxMDAwMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjI0CiAgICAvLyBmZWUgPSAoYW1vdW50ICogdGhpcy5mZWVTaGFyZUJQLnZhbHVlKSAvIEJQOwogICAgLwogICAgZnJhbWVfYnVyeSAyCgpzd2FwVG9WVXNkX2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIyNgogICAgLy8gY29uc3QgYW1vdW50SW4gPSB0aGlzLnRvU3lzdGVtUHJlY2lzaW9uKGFtb3VudCAtIGZlZSk7CiAgICBmcmFtZV9kaWcgLTIKICAgIGZyYW1lX2RpZyAyCiAgICAtCiAgICBjYWxsc3ViIHRvU3lzdGVtUHJlY2lzaW9uCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMjgKICAgIC8vIGZlZSA9IGFtb3VudCAtIHRoaXMuZnJvbVN5c3RlbVByZWNpc2lvbihhbW91bnRJbik7CiAgICBkdXAKICAgIGNhbGxzdWIgZnJvbVN5c3RlbVByZWNpc2lvbgogICAgZnJhbWVfZGlnIC0yCiAgICBzd2FwCiAgICAtCiAgICBmcmFtZV9idXJ5IDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQxCiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gInRva2VuQmFsYW5jZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMzEKICAgIC8vIHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlICs9IGFtb3VudEluOwogICAgZGlnIDEKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQxCiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMCAvLyAidG9rZW5CYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjMxCiAgICAvLyB0aGlzLnRva2VuQmFsYW5jZS52YWx1ZSArPSBhbW91bnRJbjsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NAogICAgLy8gcmVzZXJ2ZXMgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzMgLy8gInJlc2VydmVzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIzMgogICAgLy8gdGhpcy5yZXNlcnZlcy52YWx1ZSArPSBhbW91bnRJbjsKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ0CiAgICAvLyByZXNlcnZlcyA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18zIC8vICJyZXNlcnZlcyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIzMgogICAgLy8gdGhpcy5yZXNlcnZlcy52YWx1ZSArPSBhbW91bnRJbjsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MQogICAgLy8gdG9rZW5CYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18wIC8vICJ0b2tlbkJhbGFuY2UiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjM0CiAgICAvLyBjb25zdCB2VXNkTmV3QW1vdW50ID0gdGhpcy5nZXRZKHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlKTsKICAgIGNhbGxzdWIgZ2V0WQogICAgZHVwCiAgICBmcmFtZV9idXJ5IDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQyCiAgICAvLyB2VXNkQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjM1CiAgICAvLyBpZiAodGhpcy52VXNkQmFsYW5jZS52YWx1ZSA+IHZVc2ROZXdBbW91bnQpIHsKICAgIDwKICAgIGJ6IHN3YXBUb1ZVc2RfYWZ0ZXJfaWZfZWxzZUA1CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MgogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gInZVc2RCYWxhbmNlIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIzNgogICAgLy8gcmVzdWx0ID0gdGhpcy52VXNkQmFsYW5jZS52YWx1ZSAtIHZVc2ROZXdBbW91bnQ7CiAgICBmcmFtZV9kaWcgMAogICAgLQogICAgZnJhbWVfYnVyeSAxCgpzd2FwVG9WVXNkX2FmdGVyX2lmX2Vsc2VANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQyCiAgICAvLyB2VXNkQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18xIC8vICJ2VXNkQmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIzOAogICAgLy8gdGhpcy52VXNkQmFsYW5jZS52YWx1ZSA9IHZVc2ROZXdBbW91bnQ7CiAgICBmcmFtZV9kaWcgMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIzOQogICAgLy8gdGhpcy5hZGRSZXdhcmRzKGZlZSk7CiAgICBmcmFtZV9kaWcgMgogICAgZHVwCiAgICBjYWxsc3ViIGFkZFJld2FyZHMKICAgIGZyYW1lX2J1cnkgMwogICAgZnJhbWVfZGlnIDEKICAgIGZyYW1lX2J1cnkgNAoKc3dhcFRvVlVzZF9hZnRlcl9pZl9lbHNlQDY6CiAgICBmcmFtZV9kaWcgMwogICAgZnJhbWVfZGlnIDQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyNwogICAgLy8gYXNzZXQgPSBHbG9iYWxTdGF0ZTxBc3NldD4oKTsKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18yIC8vICJhc3NldCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNDIKICAgIC8vIGVtaXQ8U3dhcHBlZFRvVlVzZD4oeyB1c2VyLCBhc3NldDogdGhpcy5hc3NldC52YWx1ZS5pZCwgYW1vdW50LCByZXN1bHQsIGZlZSB9KTsKICAgIGZyYW1lX2RpZyAtMgogICAgaXRvYgogICAgZGlnIDIKICAgIGl0b2IKICAgIHVuY292ZXIgNAogICAgaXRvYgogICAgZnJhbWVfZGlnIC0zCiAgICB1bmNvdmVyIDQKICAgIGNvbmNhdAogICAgdW5jb3ZlciAzCiAgICBjb25jYXQKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHB1c2hieXRlcyAweDJiYmJlY2EzIC8vIG1ldGhvZCAiU3dhcHBlZFRvVlVzZChhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjQ0CiAgICAvLyB0aGlzLnZhbGlkYXRlQmFsYW5jZVJhdGlvKCk7CiAgICBjYWxsc3ViIHZhbGlkYXRlQmFsYW5jZVJhdGlvCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNDUKICAgIC8vIHJldHVybiByZXN1bHQ7CiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLnN3YXBGcm9tVlVzZCh1c2VyOiBieXRlcywgYW1vdW50OiB1aW50NjQsIHJlY2VpdmVBbW91bnRNaW46IHVpbnQ2NCwgemVyb0ZlZTogdWludDY0KSAtPiB1aW50NjQ6CnN3YXBGcm9tVlVzZDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI1OS0yNjQKICAgIC8vIHN3YXBGcm9tVlVzZCgKICAgIC8vICAgdXNlcjogQWRkcmVzcywKICAgIC8vICAgYW1vdW50OiB1aW50NjQsCiAgICAvLyAgIHJlY2VpdmVBbW91bnRNaW46IHVpbnQ2NCwKICAgIC8vICAgemVyb0ZlZTogYm9vbGVhbiwKICAgIC8vICk6IHVpbnQ2NCB7CiAgICBwcm90byA0IDEKICAgIHB1c2hieXRlcyAiIgogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNjUKICAgIC8vIHRoaXMub25seVJvdXRlcigpOwogICAgY2FsbHN1YiBvbmx5Um91dGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNjcKICAgIC8vIGxldCByZXN1bHRTUDogdWludDY0ID0gMDsgLy8gMCBieSBkZWZhdWx0CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjY4LTI2OQogICAgLy8gbGV0IHJlc3VsdDogdWludDY0ID0gMDsgLy8gMCBieSBkZWZhdWx0CiAgICAvLyBsZXQgZmVlOiB1aW50NjQgPSAwOwogICAgZHVwbiA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNzAKICAgIC8vIGlmIChhbW91bnQgPiAwKSB7CiAgICBmcmFtZV9kaWcgLTMKICAgIGJ6IHN3YXBGcm9tVlVzZF9hZnRlcl9pZl9lbHNlQDcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQyCiAgICAvLyB2VXNkQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjcxCiAgICAvLyB0aGlzLnZVc2RCYWxhbmNlLnZhbHVlICs9IGFtb3VudDsKICAgIGZyYW1lX2RpZyAtMwogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDIKICAgIC8vIHZVc2RCYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzEgLy8gInZVc2RCYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjcxCiAgICAvLyB0aGlzLnZVc2RCYWxhbmNlLnZhbHVlICs9IGFtb3VudDsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MgogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gInZVc2RCYWxhbmNlIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI3MgogICAgLy8gY29uc3QgbmV3QW1vdW50ID0gdGhpcy5nZXRZKHRoaXMudlVzZEJhbGFuY2UudmFsdWUpOwogICAgY2FsbHN1YiBnZXRZCiAgICBkdXAKICAgIGZyYW1lX2J1cnkgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDEKICAgIC8vIHRva2VuQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAidG9rZW5CYWxhbmNlIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHN3YXAKICAgIGR1cAogICAgY292ZXIgMgogICAgZnJhbWVfYnVyeSAxCiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNzQKICAgIC8vIGlmICh0b2tlbkJhbGFuY2UgPiBuZXdBbW91bnQpIHsKICAgIDwKICAgIGJ6IHN3YXBGcm9tVlVzZF9hZnRlcl9pZl9lbHNlQDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI3NQogICAgLy8gcmVzdWx0U1AgPSB0b2tlbkJhbGFuY2UgLSBuZXdBbW91bnQ7CiAgICBmcmFtZV9kaWcgMQogICAgZnJhbWVfZGlnIDAKICAgIC0KICAgIGR1cAogICAgZnJhbWVfYnVyeSAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNzYKICAgIC8vIHJlc3VsdCA9IHRoaXMuZnJvbVN5c3RlbVByZWNpc2lvbihyZXN1bHRTUCk7CiAgICBjYWxsc3ViIGZyb21TeXN0ZW1QcmVjaXNpb24KICAgIGZyYW1lX2J1cnkgMwoKc3dhcEZyb21WVXNkX2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ0CiAgICAvLyByZXNlcnZlcyA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMyAvLyAicmVzZXJ2ZXMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjgwCiAgICAvLyBhc3NlcnQocmVzdWx0U1AgPD0gdGhpcy5yZXNlcnZlcy52YWx1ZSwgJ1Bvb2w6IHJlc2VydmVzJyk7CiAgICBmcmFtZV9kaWcgMgogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgIDw9CiAgICBhc3NlcnQgLy8gUG9vbDogcmVzZXJ2ZXMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ0CiAgICAvLyByZXNlcnZlcyA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMyAvLyAicmVzZXJ2ZXMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjgyCiAgICAvLyB0aGlzLnJlc2VydmVzLnZhbHVlIC09IHJlc3VsdFNQOwogICAgc3dhcAogICAgLQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDQKICAgIC8vIHJlc2VydmVzID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzMgLy8gInJlc2VydmVzIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjgyCiAgICAvLyB0aGlzLnJlc2VydmVzLnZhbHVlIC09IHJlc3VsdFNQOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI4MwogICAgLy8gaWYgKCF6ZXJvRmVlKSB7CiAgICBmcmFtZV9kaWcgLTEKICAgIGJueiBzd2FwRnJvbVZVc2RfYWZ0ZXJfaWZfZWxzZUA1CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozOQogICAgLy8gZmVlU2hhcmVCUCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxNSAvLyAiZmVlU2hhcmVCUCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyODQKICAgIC8vIGZlZSA9IChyZXN1bHQgKiB0aGlzLmZlZVNoYXJlQlAudmFsdWUpIC8gQlA7CiAgICBmcmFtZV9kaWcgMwogICAgKgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjE5CiAgICAvLyBleHBvcnQgY29uc3QgQlA6IHVpbnQ2NCA9IDEwXzAwMDsKICAgIGludGMgNCAvLyAxMDAwMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6Mjg0CiAgICAvLyBmZWUgPSAocmVzdWx0ICogdGhpcy5mZWVTaGFyZUJQLnZhbHVlKSAvIEJQOwogICAgLwogICAgZnJhbWVfYnVyeSA0Cgpzd2FwRnJvbVZVc2RfYWZ0ZXJfaWZfZWxzZUA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6Mjg3CiAgICAvLyByZXN1bHQgLT0gZmVlOwogICAgZnJhbWVfZGlnIDMKICAgIGZyYW1lX2RpZyA0CiAgICBkdXAKICAgIGNvdmVyIDIKICAgIC0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQxCiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMCAvLyAidG9rZW5CYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6Mjg5CiAgICAvLyB0aGlzLnRva2VuQmFsYW5jZS52YWx1ZSA9IG5ld0Ftb3VudDsKICAgIGZyYW1lX2RpZyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjkwCiAgICAvLyBhc3NlcnQocmVzdWx0ID49IHJlY2VpdmVBbW91bnRNaW4sICdQb29sOiBzbGlwcGFnZScpOwogICAgZHVwCiAgICBmcmFtZV9kaWcgLTIKICAgID49CiAgICBhc3NlcnQgLy8gUG9vbDogc2xpcHBhZ2UKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI5MS0yOTUKICAgIC8vIGl0eG4uYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgIHhmZXJBc3NldDogdGhpcy5hc3NldC52YWx1ZSwKICAgIC8vICAgYXNzZXRBbW91bnQ6IHJlc3VsdCwKICAgIC8vICAgYXNzZXRSZWNlaXZlcjogdXNlci5uYXRpdmUsCiAgICAvLyB9KS5zdWJtaXQoKTsKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyNwogICAgLy8gYXNzZXQgPSBHbG9iYWxTdGF0ZTxBc3NldD4oKTsKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18yIC8vICJhc3NldCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTQKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgZGlnIDEKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyOTEtMjk1CiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsCiAgICAvLyAgIGFzc2V0QW1vdW50OiByZXN1bHQsCiAgICAvLyAgIGFzc2V0UmVjZWl2ZXI6IHVzZXIubmF0aXZlLAogICAgLy8gfSkuc3VibWl0KCk7CiAgICBpbnRjXzMgLy8gNAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6Mjk2CiAgICAvLyB0aGlzLmFkZFJld2FyZHMoZmVlKTsKICAgIGRpZyAxCiAgICBjYWxsc3ViIGFkZFJld2FyZHMKICAgIGZyYW1lX2J1cnkgNgogICAgZnJhbWVfYnVyeSA1Cgpzd2FwRnJvbVZVc2RfYWZ0ZXJfaWZfZWxzZUA3OgogICAgZnJhbWVfZGlnIDUKICAgIGZyYW1lX2RpZyA2CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjcKICAgIC8vIGFzc2V0ID0gR2xvYmFsU3RhdGU8QXNzZXQ+KCk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMiAvLyAiYXNzZXQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6Mjk4CiAgICAvLyBlbWl0PFN3YXBwZWRGcm9tVlVzZD4oeyB1c2VyLCBhc3NldDogdGhpcy5hc3NldC52YWx1ZS5pZCwgYW1vdW50LCByZXN1bHQsIGZlZSB9KTsKICAgIGZyYW1lX2RpZyAtMwogICAgaXRvYgogICAgZGlnIDIKICAgIGl0b2IKICAgIHVuY292ZXIgNAogICAgaXRvYgogICAgZnJhbWVfZGlnIC00CiAgICB1bmNvdmVyIDQKICAgIGNvbmNhdAogICAgdW5jb3ZlciAzCiAgICBjb25jYXQKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHB1c2hieXRlcyAweGQzZjFkNTQyIC8vIG1ldGhvZCAiU3dhcHBlZEZyb21WVXNkKGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMDAKICAgIC8vIHRoaXMudmFsaWRhdGVCYWxhbmNlUmF0aW8oKTsKICAgIGNhbGxzdWIgdmFsaWRhdGVCYWxhbmNlUmF0aW8KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMwMQogICAgLy8gcmV0dXJuIHJlc3VsdDsKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuc2V0RmVlU2hhcmUoZmVlU2hhcmVCUDogdWludDY0KSAtPiB2b2lkOgpzZXRGZWVTaGFyZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMwNwogICAgLy8gc2V0RmVlU2hhcmUoZmVlU2hhcmVCUDogdWludDY0KTogdm9pZCB7CiAgICBwcm90byAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMwOAogICAgLy8gdGhpcy5vbmx5T3duZXIoKTsKICAgIGNhbGxzdWIgb25seU93bmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMDkKICAgIC8vIGFzc2VydChmZWVTaGFyZUJQIDw9IEJQLCAnUG9vbDogdG9vIGxhcmdlJyk7CiAgICBmcmFtZV9kaWcgLTEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxOQogICAgLy8gZXhwb3J0IGNvbnN0IEJQOiB1aW50NjQgPSAxMF8wMDA7CiAgICBpbnRjIDQgLy8gMTAwMDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMwOQogICAgLy8gYXNzZXJ0KGZlZVNoYXJlQlAgPD0gQlAsICdQb29sOiB0b28gbGFyZ2UnKTsKICAgIDw9CiAgICBhc3NlcnQgLy8gUG9vbDogdG9vIGxhcmdlCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozOQogICAgLy8gZmVlU2hhcmVCUCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDE1IC8vICJmZWVTaGFyZUJQIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzEwCiAgICAvLyB0aGlzLmZlZVNoYXJlQlAudmFsdWUgPSBmZWVTaGFyZUJQOwogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuYWRqdXN0VG90YWxMcEFtb3VudCgpIC0+IHZvaWQ6CmFkanVzdFRvdGFsTHBBbW91bnQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMTMKICAgIC8vIGFkanVzdFRvdGFsTHBBbW91bnQoKTogdm9pZCB7CiAgICBwcm90byAwIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMxNAogICAgLy8gdGhpcy5vbmx5T3duZXIoKTsKICAgIGNhbGxzdWIgb25seU93bmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NgogICAgLy8gZCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNiAvLyAiZCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBzd2FwCiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjI5CiAgICAvLyB0b3RhbFN1cHBseSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNyAvLyAidG90YWxTdXBwbHkiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgc3dhcAogICAgZHVwCiAgICBjb3ZlciAyCiAgICBjb3ZlciAzCiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMTgKICAgIC8vIGlmIChkID4gdG90YWxTdXBwbHkpIHsKICAgID4KICAgIGJ6IGFkanVzdFRvdGFsTHBBbW91bnRfYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMTkKICAgIC8vIHRoaXMuZGVwb3NpdExwKFR4bi5zZW5kZXIsIGQgLSB0b3RhbFN1cHBseSk7CiAgICB0eG4gU2VuZGVyCiAgICBmcmFtZV9kaWcgMAogICAgZnJhbWVfZGlnIDEKICAgIC0KICAgIGNhbGxzdWIgZGVwb3NpdExwCgphZGp1c3RUb3RhbExwQW1vdW50X2FmdGVyX2lmX2Vsc2VAMjoKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLnNldEJhbGFuY2VSYXRpb01pbkJQKGJhbGFuY2VSYXRpb01pbkJQOiB1aW50NjQpIC0+IHZvaWQ6CnNldEJhbGFuY2VSYXRpb01pbkJQOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzI2CiAgICAvLyBzZXRCYWxhbmNlUmF0aW9NaW5CUChiYWxhbmNlUmF0aW9NaW5CUDogdWludDY0KTogdm9pZCB7CiAgICBwcm90byAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMyNwogICAgLy8gdGhpcy5vbmx5T3duZXIoKTsKICAgIGNhbGxzdWIgb25seU93bmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMjgKICAgIC8vIGFzc2VydChiYWxhbmNlUmF0aW9NaW5CUCA8PSBCUCwgJ1Bvb2w6IHRvbyBsYXJnZScpOwogICAgZnJhbWVfZGlnIC0xCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTkKICAgIC8vIGV4cG9ydCBjb25zdCBCUDogdWludDY0ID0gMTBfMDAwOwogICAgaW50YyA0IC8vIDEwMDAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMjgKICAgIC8vIGFzc2VydChiYWxhbmNlUmF0aW9NaW5CUCA8PSBCUCwgJ1Bvb2w6IHRvbyBsYXJnZScpOwogICAgPD0KICAgIGFzc2VydCAvLyBQb29sOiB0b28gbGFyZ2UKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQzCiAgICAvLyBiYWxhbmNlUmF0aW9NaW5CUCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDE2IC8vICJiYWxhbmNlUmF0aW9NaW5CUCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMyOQogICAgLy8gdGhpcy5iYWxhbmNlUmF0aW9NaW5CUC52YWx1ZSA9IGJhbGFuY2VSYXRpb01pbkJQOwogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuc3RvcERlcG9zaXQoKSAtPiB2b2lkOgpzdG9wRGVwb3NpdDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMzMwogICAgLy8gdGhpcy5vbmx5U3RvcEF1dGhvcml0eSgpOwogICAgY2FsbHN1YiBvbmx5U3RvcEF1dGhvcml0eQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTIKICAgIC8vIGNhbkRlcG9zaXQgPSBHbG9iYWxTdGF0ZTxib29sZWFuPih7IGluaXRpYWxWYWx1ZTogdHJ1ZSB9KTsvLyBpcyBkZXBvc2l0IG9wZXJhdGlvbiBhbGxvd2VkCiAgICBieXRlYyAxMiAvLyAiY2FuRGVwb3NpdCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMzNAogICAgLy8gdGhpcy5jYW5EZXBvc2l0LnZhbHVlID0gZmFsc2U7CiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLnN0YXJ0RGVwb3NpdCgpIC0+IHZvaWQ6CnN0YXJ0RGVwb3NpdDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMzOAogICAgLy8gdGhpcy5vbmx5T3duZXIoKTsKICAgIGNhbGxzdWIgb25seU93bmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MgogICAgLy8gY2FuRGVwb3NpdCA9IEdsb2JhbFN0YXRlPGJvb2xlYW4+KHsgaW5pdGlhbFZhbHVlOiB0cnVlIH0pOy8vIGlzIGRlcG9zaXQgb3BlcmF0aW9uIGFsbG93ZWQKICAgIGJ5dGVjIDEyIC8vICJjYW5EZXBvc2l0IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzM5CiAgICAvLyB0aGlzLmNhbkRlcG9zaXQudmFsdWUgPSB0cnVlOwogICAgaW50Y18xIC8vIDEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC5zdG9wV2l0aGRyYXcoKSAtPiB2b2lkOgpzdG9wV2l0aGRyYXc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozNDMKICAgIC8vIHRoaXMub25seVN0b3BBdXRob3JpdHkoKTsKICAgIGNhbGxzdWIgb25seVN0b3BBdXRob3JpdHkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUzCiAgICAvLyBjYW5XaXRoZHJhdyA9IEdsb2JhbFN0YXRlPGJvb2xlYW4+KHsgaW5pdGlhbFZhbHVlOiB0cnVlIH0pOy8vIGlzIHdpdGhkcmF3biBvcGVyYXRpb24gYWxsb3dlZAogICAgYnl0ZWMgMTMgLy8gImNhbldpdGhkcmF3IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzQ0CiAgICAvLyB0aGlzLmNhbldpdGhkcmF3LnZhbHVlID0gZmFsc2U7CiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLnN0YXJ0V2l0aGRyYXcoKSAtPiB2b2lkOgpzdGFydFdpdGhkcmF3OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzQ4CiAgICAvLyB0aGlzLm9ubHlPd25lcigpOwogICAgY2FsbHN1YiBvbmx5T3duZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUzCiAgICAvLyBjYW5XaXRoZHJhdyA9IEdsb2JhbFN0YXRlPGJvb2xlYW4+KHsgaW5pdGlhbFZhbHVlOiB0cnVlIH0pOy8vIGlzIHdpdGhkcmF3biBvcGVyYXRpb24gYWxsb3dlZAogICAgYnl0ZWMgMTMgLy8gImNhbldpdGhkcmF3IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzQ5CiAgICAvLyB0aGlzLmNhbldpdGhkcmF3LnZhbHVlID0gdHJ1ZTsKICAgIGludGNfMSAvLyAxCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuc2V0U3RvcEF1dGhvcml0eShzdG9wQXV0aG9yaXR5OiBieXRlcykgLT4gdm9pZDoKc2V0U3RvcEF1dGhvcml0eToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM1MgogICAgLy8gc2V0U3RvcEF1dGhvcml0eShzdG9wQXV0aG9yaXR5OiBBZGRyZXNzKTogdm9pZCB7CiAgICBwcm90byAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM1MwogICAgLy8gdGhpcy5vbmx5T3duZXIoKTsKICAgIGNhbGxzdWIgb25seU93bmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MQogICAgLy8gcHJpdmF0ZSBzdG9wQXV0aG9yaXR5ID0gR2xvYmFsU3RhdGU8QWRkcmVzcz4oKTsvLyBjYW4gcmVzdHJpY3QgZGVwb3NpdCBvciB3aXRoZHJhdyBvcGVyYXRpb25zCiAgICBieXRlYyAyMiAvLyAic3RvcEF1dGhvcml0eSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM1NAogICAgLy8gdGhpcy5zdG9wQXV0aG9yaXR5LnZhbHVlID0gc3RvcEF1dGhvcml0eTsKICAgIGZyYW1lX2RpZyAtMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLnNldFJvdXRlcihyb3V0ZXI6IGJ5dGVzKSAtPiB2b2lkOgpzZXRSb3V0ZXI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozNTcKICAgIC8vIHNldFJvdXRlcihyb3V0ZXI6IEFkZHJlc3MpOiB2b2lkIHsKICAgIHByb3RvIDEgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzU4CiAgICAvLyB0aGlzLm9ubHlPd25lcigpOwogICAgY2FsbHN1YiBvbmx5T3duZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQwCiAgICAvLyByb3V0ZXIgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPigpOy8vIGlzIGRlcG9zaXQgb3BlcmF0aW9uIGFsbG93ZWQKICAgIGJ5dGVjIDIxIC8vICJyb3V0ZXIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozNTkKICAgIC8vIHRoaXMucm91dGVyLnZhbHVlID0gcm91dGVyOwogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuZ2V0WSh4OiB1aW50NjQpIC0+IHVpbnQ2NDoKZ2V0WToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM2NQogICAgLy8gcHJpdmF0ZSBnZXRZKHg6IHVpbnQ2NCk6IHVpbnQ2NCB7CiAgICBwcm90byAxIDEKICAgIGludGNfMCAvLyAwCiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM2NgogICAgLy8gY29uc3QgeF8gPSBCaWdVaW50KHgpOwogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyBkID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA2IC8vICJkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM2NwogICAgLy8gY29uc3QgZF8gPSBCaWdVaW50KHRoaXMuZC52YWx1ZSk7CiAgICBpdG9iCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ1CiAgICAvLyBhID0gR2xvYmFsU3RhdGU8dWludDY0PigpOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDIwIC8vICJhIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM2OAogICAgLy8gY29uc3QgYTQgPSBCaWdVaW50KHRoaXMuYS52YWx1ZSA8PCAyKTsKICAgIHB1c2hpbnQgMiAvLyAyCiAgICBzaGwKICAgIGl0b2IKICAgIGR1cAogICAgY292ZXIgMwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzY5CiAgICAvLyBjb25zdCBhOCA9IEJpZ1VpbnQoYTQgKiAybik7CiAgICBieXRlYyAxNyAvLyAweDAyCiAgICBiKgogICAgY292ZXIgMgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzcxCiAgICAvLyBjb25zdCBkTWludXNYSXNQb3NpdGl2ZSA9IGRfID49IHhfOwogICAgYjw9CiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM3MgogICAgLy8gY29uc3QgZE1pbnVzWEFiczogYmlndWludCA9IGRNaW51c1hJc1Bvc2l0aXZlID8gKGRfIC0geF8pIDogKHhfIC0gZF8pOwogICAgYnogZ2V0WV90ZXJuYXJ5X2ZhbHNlQDIKICAgIGZyYW1lX2RpZyAzCiAgICBmcmFtZV9kaWcgMgogICAgYi0KCmdldFlfdGVybmFyeV9tZXJnZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6Mzc0CiAgICAvLyBjb25zdCBhNEJ5RE1pbnVzWEFiczogYmlndWludCA9IGE0ICogZE1pbnVzWEFiczsKICAgIGZyYW1lX2RpZyA0CiAgICBiKgogICAgZnJhbWVfYnVyeSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozNzkKICAgIC8vIGlmIChkTWludXNYSXNQb3NpdGl2ZSkgewogICAgZnJhbWVfZGlnIDYKICAgIGJ6IGdldFlfZWxzZV9ib2R5QDgKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM4MAogICAgLy8gaWYgKGE0QnlETWludXNYQWJzID49IGRfKSB7CiAgICBmcmFtZV9kaWcgMAogICAgZnJhbWVfZGlnIDMKICAgIGI+PQogICAgYnogZ2V0WV9lbHNlX2JvZHlANgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzgxCiAgICAvLyBwYXJ0MUFicyA9IGE0QnlETWludXNYQWJzIC0gZF87CiAgICBmcmFtZV9kaWcgMAogICAgZnJhbWVfZGlnIDMKICAgIGItCiAgICBmcmFtZV9idXJ5IDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM4MgogICAgLy8gcGFydDFJc1Bvc2l0aXZlID0gdHJ1ZTsKICAgIGludGNfMSAvLyAxCgpnZXRZX2FmdGVyX2lmX2Vsc2VAOToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM5MwogICAgLy8gY29uc3QgcGFydDI6IGJpZ3VpbnQgPSBCaWdVaW50KHgpICogKGE0ICogZF8gKiBkXyAqIGRfICsgeF8gKiAocGFydDFBYnMgKiBwYXJ0MUFicykpOwogICAgZnJhbWVfZGlnIDQKICAgIGZyYW1lX2RpZyAzCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGIqCiAgICBkaWcgMQogICAgYioKICAgIGIqCiAgICBmcmFtZV9kaWcgMQogICAgZHVwCiAgICBiKgogICAgZnJhbWVfZGlnIDIKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBiKgogICAgdW5jb3ZlciAyCiAgICBiKwogICAgYioKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM5NAogICAgLy8gbGV0IG51bWVyYXRvcjogYmlndWludCA9IHRoaXMuc3FydChwYXJ0Mik7CiAgICBjYWxsc3ViIHNxcnQKICAgIHN3YXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM5NwogICAgLy8gaWYgKHBhcnQxSXNQb3NpdGl2ZSkgewogICAgYnogZ2V0WV9lbHNlX2JvZHlAMTEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM5OAogICAgLy8gbnVtZXJhdG9yICs9IHhfICogcGFydDFBYnM7CiAgICBmcmFtZV9kaWcgMgogICAgZnJhbWVfZGlnIDEKICAgIGIqCiAgICBiKwoKZ2V0WV9hZnRlcl9pZl9lbHNlQDEyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDA0CiAgICAvLyByZXR1cm4gYmlndWludFRvVWludDY0TW9kdWxvKG51bWVyYXRvciAvIChhOCAqIHhfKSArIDFuKTsgLy8gKzEgdG8gb2Zmc2V0IHJvdW5kaW5nIGVycm9ycwogICAgZnJhbWVfZGlnIDUKICAgIGZyYW1lX2RpZyAyCiAgICBiKgogICAgYi8KICAgIGJ5dGVjIDEwIC8vIDB4MDEKICAgIGIrCiAgICBjYWxsc3ViIGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbwogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCmdldFlfZWxzZV9ib2R5QDExOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDAwCiAgICAvLyBudW1lcmF0b3IgLT0geF8gKiBwYXJ0MUFiczsKICAgIGZyYW1lX2RpZyAyCiAgICBmcmFtZV9kaWcgMQogICAgYioKICAgIGItCiAgICBiIGdldFlfYWZ0ZXJfaWZfZWxzZUAxMgoKZ2V0WV9lbHNlX2JvZHlANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM4NAogICAgLy8gcGFydDFBYnMgPSBkXyAtIGE0QnlETWludXNYQWJzOwogICAgZnJhbWVfZGlnIDMKICAgIGZyYW1lX2RpZyAwCiAgICBiLQogICAgZnJhbWVfYnVyeSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozODUKICAgIC8vIHBhcnQxSXNQb3NpdGl2ZSA9IGZhbHNlOwogICAgaW50Y18wIC8vIDAKICAgIGIgZ2V0WV9hZnRlcl9pZl9lbHNlQDkKCmdldFlfZWxzZV9ib2R5QDg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozODgKICAgIC8vIHBhcnQxQWJzID0gYTRCeURNaW51c1hBYnMgKyBkXzsKICAgIGZyYW1lX2RpZyAwCiAgICBmcmFtZV9kaWcgMwogICAgYisKICAgIGZyYW1lX2J1cnkgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6Mzg5CiAgICAvLyBwYXJ0MUlzUG9zaXRpdmUgPSBmYWxzZTsKICAgIGludGNfMCAvLyAwCiAgICBiIGdldFlfYWZ0ZXJfaWZfZWxzZUA5CgpnZXRZX3Rlcm5hcnlfZmFsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM3MgogICAgLy8gY29uc3QgZE1pbnVzWEFiczogYmlndWludCA9IGRNaW51c1hJc1Bvc2l0aXZlID8gKGRfIC0geF8pIDogKHhfIC0gZF8pOwogICAgZnJhbWVfZGlnIDIKICAgIGZyYW1lX2RpZyAzCiAgICBiLQogICAgYiBnZXRZX3Rlcm5hcnlfbWVyZ2VAMwoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLnVwZGF0ZUQoKSAtPiB2b2lkOgp1cGRhdGVEOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDA3CiAgICAvLyBwcml2YXRlIHVwZGF0ZUQoKTogdm9pZCB7CiAgICBwcm90byAwIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQxCiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gInRva2VuQmFsYW5jZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MDgKICAgIC8vIGNvbnN0IHggPSBCaWdVaW50KHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlKTsKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQyCiAgICAvLyB2VXNkQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDA5CiAgICAvLyBjb25zdCB5ID0gQmlnVWludCh0aGlzLnZVc2RCYWxhbmNlLnZhbHVlKTsKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQxNAogICAgLy8gY29uc3QgeHk6IGJpZ3VpbnQgPSB4ICogeTsKICAgIGR1cDIKICAgIGIqCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NQogICAgLy8gYSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAyMCAvLyAiYSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MTUKICAgIC8vIGNvbnN0IGFfID0gQmlnVWludCh0aGlzLmEudmFsdWUpOwogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDE3CiAgICAvLyBjb25zdCBwMTogYmlndWludCA9IGFfICogeHkgKiAoeCArIHkpOwogICAgZHVwCiAgICBkaWcgMgogICAgYioKICAgIHVuY292ZXIgNAogICAgdW5jb3ZlciA0CiAgICBiKwogICAgYioKICAgIGR1cAogICAgY292ZXIgMgogICAgY292ZXIgMwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDE5CiAgICAvLyBjb25zdCBwMjogYmlndWludCA9ICh4eSAqICgoYV8gKiA0bikgLSAxbikpIC8gM247CiAgICBwdXNoYnl0ZXMgMHgwNAogICAgYioKICAgIGJ5dGVjIDEwIC8vIDB4MDEKICAgIGItCiAgICB1bmNvdmVyIDIKICAgIGIqCiAgICBieXRlYyAyNiAvLyAweDAzCiAgICBiLwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDIxCiAgICAvLyBjb25zdCBwMzogYmlndWludCA9IHRoaXMuc3FydCgocDEgKiBwMSkgKyAocDIgKiBwMiAqIHAyKSk7CiAgICBkaWcgMQogICAgZGlnIDIKICAgIGIqCiAgICBkaWcgMQogICAgZGlnIDIKICAgIGIqCiAgICB1bmNvdmVyIDIKICAgIGIqCiAgICBiKwogICAgY2FsbHN1YiBzcXJ0CiAgICBkdXAKICAgIGNvdmVyIDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQyMgogICAgLy8gbGV0IGRfID0gdGhpcy5jYnJ0KHAxICsgcDMpOwogICAgZHVwMgogICAgYisKICAgIGNhbGxzdWIgY2JydAogICAgY292ZXIgMwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDIzCiAgICAvLyBpZiAocDMgPiBwMSkgewogICAgYjwKICAgIGJ6IHVwZGF0ZURfZWxzZV9ib2R5QDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQyNAogICAgLy8gZF8gLT0gdGhpcy5jYnJ0KHAzIC0gcDEpOwogICAgZnJhbWVfZGlnIDAKICAgIGItCiAgICBjYWxsc3ViIGNicnQKICAgIGZyYW1lX2RpZyAxCiAgICBzd2FwCiAgICAtCiAgICBmcmFtZV9idXJ5IDEKCnVwZGF0ZURfYWZ0ZXJfaWZfZWxzZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDI4CiAgICAvLyB0aGlzLmQudmFsdWUgPSAoZF8gPDwgMSk7CiAgICBmcmFtZV9kaWcgMQogICAgaW50Y18xIC8vIDEKICAgIHNobAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDYKICAgIC8vIGQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgNiAvLyAiZCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQyOAogICAgLy8gdGhpcy5kLnZhbHVlID0gKGRfIDw8IDEpOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKdXBkYXRlRF9lbHNlX2JvZHlAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQyNgogICAgLy8gZF8gKz0gdGhpcy5jYnJ0KHAxIC0gcDMpOwogICAgZnJhbWVfZGlnIDAKICAgIHN3YXAKICAgIGItCiAgICBjYWxsc3ViIGNicnQKICAgIGZyYW1lX2RpZyAxCiAgICArCiAgICBmcmFtZV9idXJ5IDEKICAgIGIgdXBkYXRlRF9hZnRlcl9pZl9lbHNlQDMKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC50b1N5c3RlbVByZWNpc2lvbihhbW91bnQ6IHVpbnQ2NCkgLT4gdWludDY0Ogp0b1N5c3RlbVByZWNpc2lvbjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQzMQogICAgLy8gcHJpdmF0ZSB0b1N5c3RlbVByZWNpc2lvbihhbW91bnQ6IHVpbnQ2NCk6IHVpbnQ2NCB7CiAgICBwcm90byAxIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ4CiAgICAvLyBwcml2YXRlIHRva2VuQW1vdW50UmVkdWNlID0gR2xvYmFsU3RhdGU8dWludDY0PigpOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDIzIC8vICJ0b2tlbkFtb3VudFJlZHVjZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBzd2FwCiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDkKICAgIC8vIHByaXZhdGUgdG9rZW5BbW91bnRJbmNyZWFzZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAyNCAvLyAidG9rZW5BbW91bnRJbmNyZWFzZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBzd2FwCiAgICBjb3ZlciAyCiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MzUKICAgIC8vIGlmICh0b2tlbkFtb3VudFJlZHVjZSA+IDApIHsKICAgIGJ6IHRvU3lzdGVtUHJlY2lzaW9uX2Vsc2VfYm9keUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MzYKICAgIC8vIHJldHVybiBhbW91bnQgLyB0b2tlbkFtb3VudFJlZHVjZTsKICAgIGZyYW1lX2RpZyAtMQogICAgZnJhbWVfZGlnIDAKICAgIC8KICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgp0b1N5c3RlbVByZWNpc2lvbl9lbHNlX2JvZHlAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQzNwogICAgLy8gfSBlbHNlIGlmICh0b2tlbkFtb3VudEluY3JlYXNlID4gMCkgewogICAgZnJhbWVfZGlnIDEKICAgIGJ6IHRvU3lzdGVtUHJlY2lzaW9uX2FmdGVyX2lmX2Vsc2VANAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDM4CiAgICAvLyByZXR1cm4gYW1vdW50ICogdG9rZW5BbW91bnRJbmNyZWFzZTsKICAgIGZyYW1lX2RpZyAtMQogICAgZnJhbWVfZGlnIDEKICAgICoKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgp0b1N5c3RlbVByZWNpc2lvbl9hZnRlcl9pZl9lbHNlQDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NDAKICAgIC8vIHJldHVybiBhbW91bnQ7CiAgICBmcmFtZV9kaWcgLTEKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuZnJvbVN5c3RlbVByZWNpc2lvbihhbW91bnQ6IHVpbnQ2NCkgLT4gdWludDY0Ogpmcm9tU3lzdGVtUHJlY2lzaW9uOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDQzCiAgICAvLyBwcml2YXRlIGZyb21TeXN0ZW1QcmVjaXNpb24oYW1vdW50OiB1aW50NjQpOiB1aW50NjQgewogICAgcHJvdG8gMSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0OAogICAgLy8gcHJpdmF0ZSB0b2tlbkFtb3VudFJlZHVjZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAyMyAvLyAidG9rZW5BbW91bnRSZWR1Y2UiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgc3dhcAogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ5CiAgICAvLyBwcml2YXRlIHRva2VuQW1vdW50SW5jcmVhc2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMjQgLy8gInRva2VuQW1vdW50SW5jcmVhc2UiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgc3dhcAogICAgY292ZXIgMgogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDQ3CiAgICAvLyBpZiAodG9rZW5BbW91bnRSZWR1Y2UgPiAwKSB7CiAgICBieiBmcm9tU3lzdGVtUHJlY2lzaW9uX2Vsc2VfYm9keUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NDgKICAgIC8vIHJldHVybiBhbW91bnQgKiB0b2tlbkFtb3VudFJlZHVjZTsKICAgIGZyYW1lX2RpZyAtMQogICAgZnJhbWVfZGlnIDAKICAgICoKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgpmcm9tU3lzdGVtUHJlY2lzaW9uX2Vsc2VfYm9keUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDQ5CiAgICAvLyB9IGVsc2UgaWYgKHRva2VuQW1vdW50SW5jcmVhc2UgPiAwKSB7CiAgICBmcmFtZV9kaWcgMQogICAgYnogZnJvbVN5c3RlbVByZWNpc2lvbl9hZnRlcl9pZl9lbHNlQDQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ1MAogICAgLy8gcmV0dXJuIGFtb3VudCAvIHRva2VuQW1vdW50SW5jcmVhc2U7CiAgICBmcmFtZV9kaWcgLTEKICAgIGZyYW1lX2RpZyAxCiAgICAvCiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1YgoKZnJvbVN5c3RlbVByZWNpc2lvbl9hZnRlcl9pZl9lbHNlQDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NTIKICAgIC8vIHJldHVybiBhbW91bnQ7CiAgICBmcmFtZV9kaWcgLTEKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuc3FydChuOiBieXRlcykgLT4gYnl0ZXM6CnNxcnQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NTUKICAgIC8vIHByaXZhdGUgc3FydChuOiBiaWd1aW50KTogYmlndWludCB7CiAgICBwcm90byAxIDEKICAgIGludGNfMCAvLyAwCiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ1NgogICAgLy8gYXNzZXJ0KG4gPiAwbiwgJ24gbXVzdCBiZSBub24tbmVnYXRpdmUnKTsKICAgIGZyYW1lX2RpZyAtMQogICAgcHVzaGJ5dGVzIDB4CiAgICBiPgogICAgYXNzZXJ0IC8vIG4gbXVzdCBiZSBub24tbmVnYXRpdmUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ1NwogICAgLy8gaWYgKG4gPT09IDBuKSByZXR1cm4gMG47CiAgICBmcmFtZV9kaWcgLTEKICAgIHB1c2hieXRlcyAweAogICAgYj09CiAgICBieiBzcXJ0X2FmdGVyX2lmX2Vsc2VAMgogICAgcHVzaGJ5dGVzIDB4CiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1YgoKc3FydF9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NTgKICAgIC8vIGlmIChuIDw9IDNuKSByZXR1cm4gMW47CiAgICBmcmFtZV9kaWcgLTEKICAgIGJ5dGVjIDI2IC8vIDB4MDMKICAgIGI8PQogICAgYnogc3FydF9hZnRlcl9pZl9lbHNlQDQKICAgIGJ5dGVjIDEwIC8vIDB4MDEKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgpzcXJ0X2FmdGVyX2lmX2Vsc2VANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2MQogICAgLy8gY29uc3QgYmwgPSBiaXRMZW5ndGgoQnl0ZXMobikpOwogICAgZnJhbWVfZGlnIC0xCiAgICBiaXRsZW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2MgogICAgLy8gbGV0IHdpZGUgPSBleHB3KDIsIChibCArIDEpIC8gMik7CiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgcHVzaGludCAyIC8vIDIKICAgIC8KICAgIHB1c2hpbnQgMiAvLyAyCiAgICBzd2FwCiAgICBleHB3CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NjMKICAgIC8vIGNvbnN0IGhpID0gQmlnVWludCh3aWRlWzBdKTsKICAgIHN3YXAKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2NAogICAgLy8gY29uc3QgbG8gPSBCaWdVaW50KHdpZGVbMV0pOwogICAgc3dhcAogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDY1CiAgICAvLyBsZXQgeDogYmlndWludCA9IGhpICogU0hJRlQ2NCArIGxvOwogICAgc3dhcAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjIKICAgIC8vIGNvbnN0IFNISUZUNjQ6IGJpZ3VpbnQgPSAxODQ0Njc0NDA3MzcwOTU1MTYxNm47IC8vIDJeNjQKICAgIGJ5dGVjIDI3IC8vIDB4MDEwMDAwMDAwMDAwMDAwMDAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NjUKICAgIC8vIGxldCB4OiBiaWd1aW50ID0gaGkgKiBTSElGVDY0ICsgbG87CiAgICBiKgogICAgYisKICAgIGR1cAogICAgZnJhbWVfYnVyeSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NjgKICAgIC8vIGxldCB5OiBiaWd1aW50ID0gKHggKyBuIC8geCkgLyAybjsKICAgIGZyYW1lX2RpZyAtMQogICAgZGlnIDEKICAgIGIvCiAgICBiKwogICAgYnl0ZWMgMTcgLy8gMHgwMgogICAgYi8KICAgIGZyYW1lX2J1cnkgMQoKc3FydF93aGlsZV90b3BANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2OQogICAgLy8gd2hpbGUgKHkgPCB4KSB7CiAgICBmcmFtZV9kaWcgMQogICAgZnJhbWVfZGlnIDAKICAgIGI8CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NjktNDcyCiAgICAvLyB3aGlsZSAoeSA8IHgpIHsKICAgIC8vICAgeCA9IHk7CiAgICAvLyAgIHkgPSAoeCArIG4gLyB4KSAvIDJuOwogICAgLy8gfQogICAgYnogc3FydF9hZnRlcl93aGlsZUA3CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NzEKICAgIC8vIHkgPSAoeCArIG4gLyB4KSAvIDJuOwogICAgZnJhbWVfZGlnIC0xCiAgICBmcmFtZV9kaWcgMQogICAgZHVwCiAgICBjb3ZlciAyCiAgICBiLwogICAgZGlnIDEKICAgIGIrCiAgICBieXRlYyAxNyAvLyAweDAyCiAgICBiLwogICAgZnJhbWVfYnVyeSAxCiAgICBmcmFtZV9idXJ5IDAKICAgIGIgc3FydF93aGlsZV90b3BANQoKc3FydF9hZnRlcl93aGlsZUA3OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDczCiAgICAvLyByZXR1cm4geDsKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLmNicnQobjogYnl0ZXMpIC0+IHVpbnQ2NDoKY2JydDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ3NgogICAgLy8gcHJpdmF0ZSBjYnJ0KG46IGJpZ3VpbnQpOiB1aW50NjQgewogICAgcHJvdG8gMSAxCiAgICBpbnRjXzAgLy8gMAogICAgZHVwbiAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NzcKICAgIC8vIGlmIChuID09PSAwbikgcmV0dXJuIDA7CiAgICBmcmFtZV9kaWcgLTEKICAgIHB1c2hieXRlcyAweAogICAgYj09CiAgICBieiBjYnJ0X2FmdGVyX2lmX2Vsc2VAMgogICAgaW50Y18wIC8vIDAKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgpjYnJ0X2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ3OAogICAgLy8gaWYgKG4gPCA4bikgcmV0dXJuIDE7CiAgICBmcmFtZV9kaWcgLTEKICAgIHB1c2hieXRlcyAweDA4CiAgICBiPAogICAgYnogY2JydF9hZnRlcl9pZl9lbHNlQDQKICAgIGludGNfMSAvLyAxCiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1YgoKY2JydF9hZnRlcl9pZl9lbHNlQDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0ODEKICAgIC8vIGNvbnN0IGJsID0gYml0TGVuZ3RoKEJ5dGVzKG4pKTsKICAgIGZyYW1lX2RpZyAtMQogICAgYml0bGVuCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0ODIKICAgIC8vIGxldCB3aWRlID0gZXhwdygyLCAoYmwgKyAyKSAvIDMpOwogICAgcHVzaGludCAyIC8vIDIKICAgICsKICAgIHB1c2hpbnQgMyAvLyAzCiAgICAvCiAgICBwdXNoaW50IDIgLy8gMgogICAgc3dhcAogICAgZXhwdwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDgzCiAgICAvLyBjb25zdCBoaSA9IEJpZ1VpbnQod2lkZVswXSk7CiAgICBzd2FwCiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0ODQKICAgIC8vIGNvbnN0IGxvID0gQmlnVWludCh3aWRlWzFdKTsKICAgIHN3YXAKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ4NQogICAgLy8gbGV0IHg6IGJpZ3VpbnQgPSBoaSAqIFNISUZUNjQgKyBsbzsKICAgIHN3YXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIyCiAgICAvLyBjb25zdCBTSElGVDY0OiBiaWd1aW50ID0gMTg0NDY3NDQwNzM3MDk1NTE2MTZuOyAvLyAyXjY0CiAgICBieXRlYyAyNyAvLyAweDAxMDAwMDAwMDAwMDAwMDAwMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDg1CiAgICAvLyBsZXQgeDogYmlndWludCA9IGhpICogU0hJRlQ2NCArIGxvOwogICAgYioKICAgIGIrCiAgICBmcmFtZV9idXJ5IDEKCmNicnRfd2hpbGVfdG9wQDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0ODkKICAgIC8vIGNvbnN0IHgyOiBiaWd1aW50ID0geCAqIHg7CiAgICBmcmFtZV9kaWcgMQogICAgZHVwCiAgICBiKgogICAgZHVwCiAgICBmcmFtZV9idXJ5IDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ5MAogICAgLy8gaWYgKHgyID09PSAwbikgYnJlYWs7IC8vIHNob3VsZCBub3QgaGFwcGVuIGZvciB4PjAKICAgIHB1c2hieXRlcyAweAogICAgYj09CiAgICBibnogY2JydF93aGlsZV90b3BAMTQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ5MQogICAgLy8gY29uc3QgbmV4dDogYmlndWludCA9ICgybiAqIHggKyBuIC8geDIpIC8gM247CiAgICBieXRlYyAxNyAvLyAweDAyCiAgICBmcmFtZV9kaWcgMQogICAgZHVwCiAgICBjb3ZlciAyCiAgICBiKgogICAgZnJhbWVfZGlnIC0xCiAgICBmcmFtZV9kaWcgMwogICAgYi8KICAgIGIrCiAgICBieXRlYyAyNiAvLyAweDAzCiAgICBiLwogICAgZHVwCiAgICBmcmFtZV9idXJ5IDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ5MgogICAgLy8gaWYgKG5leHQgPT09IHggfHwgbmV4dCA9PT0geCAtIDFuKSB7CiAgICBiPT0KICAgIGJueiBjYnJ0X2lmX2JvZHlAMTAKICAgIGZyYW1lX2RpZyAxCiAgICBieXRlYyAxMCAvLyAweDAxCiAgICBiLQogICAgZnJhbWVfZGlnIDAKICAgIGI9PQogICAgYnogY2JydF9hZnRlcl9pZl9lbHNlQDExCgpjYnJ0X2lmX2JvZHlAMTA6CiAgICBmcmFtZV9kaWcgMAogICAgZnJhbWVfYnVyeSAxCgpjYnJ0X3doaWxlX3RvcEAxNDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUwMAogICAgLy8gd2hpbGUgKCh4ICsgMW4pICogKHggKyAxbikgKiAoeCArIDFuKSA8PSBuKSB4ICs9IDFuOwogICAgZnJhbWVfZGlnIDEKICAgIGJ5dGVjIDEwIC8vIDB4MDEKICAgIGIrCiAgICBkdXAKICAgIGZyYW1lX2J1cnkgMgogICAgZHVwCiAgICBkaWcgMQogICAgYioKICAgIGIqCiAgICBmcmFtZV9kaWcgLTEKICAgIGI8PQogICAgYnogY2JydF93aGlsZV90b3BAMTcKICAgIGZyYW1lX2RpZyAyCiAgICBmcmFtZV9idXJ5IDEKICAgIGIgY2JydF93aGlsZV90b3BAMTQKCmNicnRfd2hpbGVfdG9wQDE3OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTAxCiAgICAvLyB3aGlsZSAoeCAqIHggKiB4ID4gbikgeCAtPSAxbjsKICAgIGZyYW1lX2RpZyAxCiAgICBkdXAKICAgIGRpZyAxCiAgICBiKgogICAgYioKICAgIGZyYW1lX2RpZyAtMQogICAgYj4KICAgIGJ6IGNicnRfYWZ0ZXJfd2hpbGVAMTkKICAgIGZyYW1lX2RpZyAxCiAgICBieXRlYyAxMCAvLyAweDAxCiAgICBiLQogICAgZnJhbWVfYnVyeSAxCiAgICBiIGNicnRfd2hpbGVfdG9wQDE3CgpjYnJ0X2FmdGVyX3doaWxlQDE5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTAyCiAgICAvLyByZXR1cm4gYmlndWludFRvVWludDY0TW9kdWxvKHgpOwogICAgZnJhbWVfZGlnIDEKICAgIGNhbGxzdWIgYmlndWludFRvVWludDY0TW9kdWxvCiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1YgoKY2JydF9hZnRlcl9pZl9lbHNlQDExOgogICAgZnJhbWVfZGlnIDAKICAgIGZyYW1lX2J1cnkgMQogICAgYiBjYnJ0X3doaWxlX3RvcEA1CgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjpSZXdhcmRNYW5hZ2VyLmNsYWltUmV3YXJkcygpIC0+IHZvaWQ6CmNsYWltUmV3YXJkczoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo1MC01MQogICAgLy8gQGFiaW1ldGhvZCgpCiAgICAvLyBjbGFpbVJld2FyZHMoKTogdm9pZCB7CiAgICBwcm90byAwIDAKICAgIHB1c2hieXRlcyAiIgogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NTIKICAgIC8vIGNvbnN0IHVzZXIgPSBUeG4uc2VuZGVyOwogICAgdHhuIFNlbmRlcgogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NTMKICAgIC8vIGNvbnN0IHVzZXJMcEFtb3VudCA9IHRoaXMuYmFsYW5jZSh1c2VyKS52YWx1ZTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzMKICAgIC8vIGJhbGFuY2UgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDQgLy8gImJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NTMKICAgIC8vIGNvbnN0IHVzZXJMcEFtb3VudCA9IHRoaXMuYmFsYW5jZSh1c2VyKS52YWx1ZTsKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIHN3YXAKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo1NAogICAgLy8gaWYgKHVzZXJMcEFtb3VudCA+IDApIHsKICAgIGJ6IGNsYWltUmV3YXJkc19hZnRlcl9pZl9lbHNlQDUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo1NQogICAgLy8gY29uc3QgcmV3YXJkcyA9IGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbyhCaWdVaW50KHVzZXJMcEFtb3VudCkgKiB0aGlzLmFjY1Jld2FyZFBlclNoYXJlUC52YWx1ZSAvIFBfU0NBTEUpOwogICAgZnJhbWVfZGlnIDMKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMAogICAgLy8gYWNjUmV3YXJkUGVyU2hhcmVQID0gR2xvYmFsU3RhdGU8YmlndWludD4oeyBpbml0aWFsVmFsdWU6IDBuIH0pOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDggLy8gImFjY1Jld2FyZFBlclNoYXJlUCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NTUKICAgIC8vIGNvbnN0IHJld2FyZHMgPSBiaWd1aW50VG9VaW50NjRNb2R1bG8oQmlnVWludCh1c2VyTHBBbW91bnQpICogdGhpcy5hY2NSZXdhcmRQZXJTaGFyZVAudmFsdWUgLyBQX1NDQUxFKTsKICAgIGIqCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjAKICAgIC8vIGNvbnN0IFBfU0NBTEU6IGJpZ3VpbnQgPSBCaWdVaW50KDEgPDwgUCk7CiAgICBieXRlYyA5IC8vIDB4MDEwMDAwMDAwMDAwMDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo1NQogICAgLy8gY29uc3QgcmV3YXJkcyA9IGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbyhCaWdVaW50KHVzZXJMcEFtb3VudCkgKiB0aGlzLmFjY1Jld2FyZFBlclNoYXJlUC52YWx1ZSAvIFBfU0NBTEUpOwogICAgYi8KICAgIGNhbGxzdWIgYmlndWludFRvVWludDY0TW9kdWxvCiAgICBkdXAKICAgIGZyYW1lX2J1cnkgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjU2CiAgICAvLyBjb25zdCBwZW5kaW5nOiB1aW50NjQgPSByZXdhcmRzIC0gdGhpcy51c2VyUmV3YXJkRGVidCh1c2VyKS52YWx1ZTsKICAgIGZyYW1lX2RpZyAyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjM0CiAgICAvLyB1c2VyUmV3YXJkRGVidCA9IExvY2FsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgNSAvLyAidXNlclJld2FyZERlYnQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NTYKICAgIC8vIGNvbnN0IHBlbmRpbmc6IHVpbnQ2NCA9IHJld2FyZHMgLSB0aGlzLnVzZXJSZXdhcmREZWJ0KHVzZXIpLnZhbHVlOwogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICAtCiAgICBkdXAKICAgIGZyYW1lX2J1cnkgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjU3CiAgICAvLyBpZiAocGVuZGluZyA+IDApIHsKICAgIGJ6IGNsYWltUmV3YXJkc19hZnRlcl9pZl9lbHNlQDUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo1OAogICAgLy8gdGhpcy51c2VyUmV3YXJkRGVidCh1c2VyKS52YWx1ZSA9IHJld2FyZHM7CiAgICBmcmFtZV9kaWcgMgogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzQKICAgIC8vIHVzZXJSZXdhcmREZWJ0ID0gTG9jYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlYyA1IC8vICJ1c2VyUmV3YXJkRGVidCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo1OAogICAgLy8gdGhpcy51c2VyUmV3YXJkRGVidCh1c2VyKS52YWx1ZSA9IHJld2FyZHM7CiAgICBmcmFtZV9kaWcgMQogICAgYXBwX2xvY2FsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjU5CiAgICAvLyBhc3NldFRyYW5zZmVyKHsgeGZlckFzc2V0OiB0aGlzLmFzc2V0LnZhbHVlLCBhc3NldEFtb3VudDogcGVuZGluZywgYXNzZXRSZWNlaXZlcjogdXNlciB9KS5zdWJtaXQoKTsKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyNwogICAgLy8gYXNzZXQgPSBHbG9iYWxTdGF0ZTxBc3NldD4oKTsKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18yIC8vICJhc3NldCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBkaWcgMQogICAgaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCiAgICBmcmFtZV9kaWcgMAogICAgZHVwCiAgICBjb3ZlciAyCiAgICBpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjU5CiAgICAvLyBhc3NldFRyYW5zZmVyKHsgeGZlckFzc2V0OiB0aGlzLmFzc2V0LnZhbHVlLCBhc3NldEFtb3VudDogcGVuZGluZywgYXNzZXRSZWNlaXZlcjogdXNlciB9KS5zdWJtaXQoKTsKICAgIGludGNfMyAvLyA0CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NjAKICAgIC8vIGVtaXQ8UmV3YXJkc0NsYWltZWQ+KHsgdXNlcjogbmV3IEFkZHJlc3ModXNlciksIHBlbmRpbmcgfSk7CiAgICBpdG9iCiAgICBjb25jYXQKICAgIGJ5dGVjIDI1IC8vIG1ldGhvZCAiUmV3YXJkc0NsYWltZWQoYWRkcmVzcyx1aW50NjQpIgogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKCmNsYWltUmV3YXJkc19hZnRlcl9pZl9lbHNlQDU6CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6OlJld2FyZE1hbmFnZXIuc2V0QWRtaW5GZWVTaGFyZShhZG1pbkZlZVNoYXJlQlA6IHVpbnQ2NCkgLT4gdm9pZDoKc2V0QWRtaW5GZWVTaGFyZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo2NS02NgogICAgLy8gQGFiaW1ldGhvZCgpCiAgICAvLyBzZXRBZG1pbkZlZVNoYXJlKGFkbWluRmVlU2hhcmVCUDogdWludDY0KTogdm9pZCB7CiAgICBwcm90byAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo2NwogICAgLy8gdGhpcy5vbmx5T3duZXIoKTsKICAgIGNhbGxzdWIgb25seU93bmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NjgKICAgIC8vIGFzc2VydChhZG1pbkZlZVNoYXJlQlAgPD0gQlAsICdSZXdhcmRNYW5hZ2VyOiB0b28gaGlnaCcpOwogICAgZnJhbWVfZGlnIC0xCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTkKICAgIC8vIGV4cG9ydCBjb25zdCBCUDogdWludDY0ID0gMTBfMDAwOwogICAgaW50YyA0IC8vIDEwMDAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NjgKICAgIC8vIGFzc2VydChhZG1pbkZlZVNoYXJlQlAgPD0gQlAsICdSZXdhcmRNYW5hZ2VyOiB0b28gaGlnaCcpOwogICAgPD0KICAgIGFzc2VydCAvLyBSZXdhcmRNYW5hZ2VyOiB0b28gaGlnaAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjI4CiAgICAvLyBhZG1pbkZlZVNoYXJlQlAgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiBCUCAvIDUgfSk7IC8vIERlZmF1bHQgYWRtaW4gZmVlIGlzIDIwJQogICAgYnl0ZWMgMTggLy8gImFkbWluRmVlU2hhcmVCUCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo2OQogICAgLy8gdGhpcy5hZG1pbkZlZVNoYXJlQlAudmFsdWUgPSBhZG1pbkZlZVNoYXJlQlA7CiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6OlJld2FyZE1hbmFnZXIuY2xhaW1BZG1pbkZlZSgpIC0+IHZvaWQ6CmNsYWltQWRtaW5GZWU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NzItNzMKICAgIC8vIEBhYmltZXRob2QoKQogICAgLy8gY2xhaW1BZG1pbkZlZSgpOiB2b2lkIHsKICAgIHByb3RvIDAgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjc0CiAgICAvLyB0aGlzLm9ubHlPd25lcigpOwogICAgY2FsbHN1YiBvbmx5T3duZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMQogICAgLy8gYWRtaW5GZWVBbW91bnQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDExIC8vICJhZG1pbkZlZUFtb3VudCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBzd2FwCiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjc2CiAgICAvLyBpZiAoYWRtaW5GZWVBbW91bnQgPiAwKSB7CiAgICBieiBjbGFpbUFkbWluRmVlX2FmdGVyX2lmX2Vsc2VAMwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjc3LTgxCiAgICAvLyBhc3NldFRyYW5zZmVyKHsKICAgIC8vICAgeGZlckFzc2V0OiB0aGlzLmFzc2V0LnZhbHVlLAogICAgLy8gICBhc3NldEFtb3VudDogYWRtaW5GZWVBbW91bnQsCiAgICAvLyAgIGFzc2V0UmVjZWl2ZXI6IHRoaXMub3duZXIudmFsdWUuYnl0ZXMsCiAgICAvLyB9KS5zdWJtaXQoKTsKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyNwogICAgLy8gYXNzZXQgPSBHbG9iYWxTdGF0ZTxBc3NldD4oKTsKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18yIC8vICJhc3NldCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czo2CiAgICAvLyBwcm90ZWN0ZWQgb3duZXIgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPigpOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDE0IC8vICJvd25lciIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIGZyYW1lX2RpZyAwCiAgICBpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjc3LTgxCiAgICAvLyBhc3NldFRyYW5zZmVyKHsKICAgIC8vICAgeGZlckFzc2V0OiB0aGlzLmFzc2V0LnZhbHVlLAogICAgLy8gICBhc3NldEFtb3VudDogYWRtaW5GZWVBbW91bnQsCiAgICAvLyAgIGFzc2V0UmVjZWl2ZXI6IHRoaXMub3duZXIudmFsdWUuYnl0ZXMsCiAgICAvLyB9KS5zdWJtaXQoKTsKICAgIGludGNfMyAvLyA0CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzEKICAgIC8vIGFkbWluRmVlQW1vdW50ID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjIDExIC8vICJhZG1pbkZlZUFtb3VudCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo4MgogICAgLy8gdGhpcy5hZG1pbkZlZUFtb3VudC52YWx1ZSA9IDA7CiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKCmNsYWltQWRtaW5GZWVfYWZ0ZXJfaWZfZWxzZUAzOgogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjpSZXdhcmRNYW5hZ2VyLnBlbmRpbmdSZXdhcmQodXNlcjogYnl0ZXMpIC0+IHVpbnQ2NDoKcGVuZGluZ1Jld2FyZDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo4Ni04NwogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICAvLyBwZW5kaW5nUmV3YXJkKHVzZXI6IEFjY291bnQpOiB1aW50NjQgewogICAgcHJvdG8gMSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6ODgKICAgIC8vIHJldHVybiBiaWd1aW50VG9VaW50NjRNb2R1bG8oKEJpZ1VpbnQodGhpcy5iYWxhbmNlKHVzZXIpLnZhbHVlKSAqIHRoaXMuYWNjUmV3YXJkUGVyU2hhcmVQLnZhbHVlKSAvIFBfU0NBTEUpIC0gdGhpcy51c2VyUmV3YXJkRGVidCh1c2VyKS52YWx1ZTsKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMwogICAgLy8gYmFsYW5jZSA9IExvY2FsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgNCAvLyAiYmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo4OAogICAgLy8gcmV0dXJuIGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbygoQmlnVWludCh0aGlzLmJhbGFuY2UodXNlcikudmFsdWUpICogdGhpcy5hY2NSZXdhcmRQZXJTaGFyZVAudmFsdWUpIC8gUF9TQ0FMRSkgLSB0aGlzLnVzZXJSZXdhcmREZWJ0KHVzZXIpLnZhbHVlOwogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzAKICAgIC8vIGFjY1Jld2FyZFBlclNoYXJlUCA9IEdsb2JhbFN0YXRlPGJpZ3VpbnQ+KHsgaW5pdGlhbFZhbHVlOiAwbiB9KTsKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA4IC8vICJhY2NSZXdhcmRQZXJTaGFyZVAiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjg4CiAgICAvLyByZXR1cm4gYmlndWludFRvVWludDY0TW9kdWxvKChCaWdVaW50KHRoaXMuYmFsYW5jZSh1c2VyKS52YWx1ZSkgKiB0aGlzLmFjY1Jld2FyZFBlclNoYXJlUC52YWx1ZSkgLyBQX1NDQUxFKSAtIHRoaXMudXNlclJld2FyZERlYnQodXNlcikudmFsdWU7CiAgICBiKgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjIwCiAgICAvLyBjb25zdCBQX1NDQUxFOiBiaWd1aW50ID0gQmlnVWludCgxIDw8IFApOwogICAgYnl0ZWMgOSAvLyAweDAxMDAwMDAwMDAwMDAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6ODgKICAgIC8vIHJldHVybiBiaWd1aW50VG9VaW50NjRNb2R1bG8oKEJpZ1VpbnQodGhpcy5iYWxhbmNlKHVzZXIpLnZhbHVlKSAqIHRoaXMuYWNjUmV3YXJkUGVyU2hhcmVQLnZhbHVlKSAvIFBfU0NBTEUpIC0gdGhpcy51c2VyUmV3YXJkRGVidCh1c2VyKS52YWx1ZTsKICAgIGIvCiAgICBjYWxsc3ViIGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbwogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjM0CiAgICAvLyB1c2VyUmV3YXJkRGVidCA9IExvY2FsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgNSAvLyAidXNlclJld2FyZERlYnQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6ODgKICAgIC8vIHJldHVybiBiaWd1aW50VG9VaW50NjRNb2R1bG8oKEJpZ1VpbnQodGhpcy5iYWxhbmNlKHVzZXIpLnZhbHVlKSAqIHRoaXMuYWNjUmV3YXJkUGVyU2hhcmVQLnZhbHVlKSAvIFBfU0NBTEUpIC0gdGhpcy51c2VyUmV3YXJkRGVidCh1c2VyKS52YWx1ZTsKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBMb2NhbFN0YXRlIGV4aXN0cwogICAgLQogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjpSZXdhcmRNYW5hZ2VyLmFkZFJld2FyZHMocmV3YXJkQW1vdW50OiB1aW50NjQpIC0+IHZvaWQ6CmFkZFJld2FyZHM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6OTYKICAgIC8vIHByb3RlY3RlZCBhZGRSZXdhcmRzKHJld2FyZEFtb3VudDogdWludDY0KTogdm9pZCB7CiAgICBwcm90byAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyOQogICAgLy8gdG90YWxTdXBwbHkgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDcgLy8gInRvdGFsU3VwcGx5IgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHN3YXAKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6OTgKICAgIC8vIGlmICh0b3RhbFN1cHBseSA+IDApIHsKICAgIGJ6IGFkZFJld2FyZHNfYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjgKICAgIC8vIGFkbWluRmVlU2hhcmVCUCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IEJQIC8gNSB9KTsgLy8gRGVmYXVsdCBhZG1pbiBmZWUgaXMgMjAlCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMTggLy8gImFkbWluRmVlU2hhcmVCUCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6OTkKICAgIC8vIGNvbnN0IGFkbWluRmVlUmV3YXJkczogdWludDY0ID0gKHJld2FyZEFtb3VudCAqIHRoaXMuYWRtaW5GZWVTaGFyZUJQLnZhbHVlKSAvIEJQOwogICAgZnJhbWVfZGlnIC0xCiAgICAqCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTkKICAgIC8vIGV4cG9ydCBjb25zdCBCUDogdWludDY0ID0gMTBfMDAwOwogICAgaW50YyA0IC8vIDEwMDAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6OTkKICAgIC8vIGNvbnN0IGFkbWluRmVlUmV3YXJkczogdWludDY0ID0gKHJld2FyZEFtb3VudCAqIHRoaXMuYWRtaW5GZWVTaGFyZUJQLnZhbHVlKSAvIEJQOwogICAgLwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEwMAogICAgLy8gcmV3YXJkQW1vdW50IC09IGFkbWluRmVlUmV3YXJkczsKICAgIGZyYW1lX2RpZyAtMQogICAgZGlnIDEKICAgIC0KICAgIGZyYW1lX2J1cnkgLTEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMAogICAgLy8gYWNjUmV3YXJkUGVyU2hhcmVQID0gR2xvYmFsU3RhdGU8YmlndWludD4oeyBpbml0aWFsVmFsdWU6IDBuIH0pOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDggLy8gImFjY1Jld2FyZFBlclNoYXJlUCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTAxCiAgICAvLyB0aGlzLmFjY1Jld2FyZFBlclNoYXJlUC52YWx1ZSArPSBCaWdVaW50KHJld2FyZEFtb3VudCkgKiBQX1NDQUxFIC8gQmlnVWludCh0b3RhbFN1cHBseSk7CiAgICBmcmFtZV9kaWcgLTEKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyMAogICAgLy8gY29uc3QgUF9TQ0FMRTogYmlndWludCA9IEJpZ1VpbnQoMSA8PCBQKTsKICAgIGJ5dGVjIDkgLy8gMHgwMTAwMDAwMDAwMDAwMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEwMQogICAgLy8gdGhpcy5hY2NSZXdhcmRQZXJTaGFyZVAudmFsdWUgKz0gQmlnVWludChyZXdhcmRBbW91bnQpICogUF9TQ0FMRSAvIEJpZ1VpbnQodG90YWxTdXBwbHkpOwogICAgYioKICAgIGZyYW1lX2RpZyAwCiAgICBpdG9iCiAgICBiLwogICAgYisKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMAogICAgLy8gYWNjUmV3YXJkUGVyU2hhcmVQID0gR2xvYmFsU3RhdGU8YmlndWludD4oeyBpbml0aWFsVmFsdWU6IDBuIH0pOwogICAgYnl0ZWMgOCAvLyAiYWNjUmV3YXJkUGVyU2hhcmVQIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEwMQogICAgLy8gdGhpcy5hY2NSZXdhcmRQZXJTaGFyZVAudmFsdWUgKz0gQmlnVWludChyZXdhcmRBbW91bnQpICogUF9TQ0FMRSAvIEJpZ1VpbnQodG90YWxTdXBwbHkpOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMQogICAgLy8gYWRtaW5GZWVBbW91bnQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDExIC8vICJhZG1pbkZlZUFtb3VudCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTAyCiAgICAvLyB0aGlzLmFkbWluRmVlQW1vdW50LnZhbHVlICs9IGFkbWluRmVlUmV3YXJkczsKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMQogICAgLy8gYWRtaW5GZWVBbW91bnQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgMTEgLy8gImFkbWluRmVlQW1vdW50IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEwMgogICAgLy8gdGhpcy5hZG1pbkZlZUFtb3VudC52YWx1ZSArPSBhZG1pbkZlZVJld2FyZHM7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAoKYWRkUmV3YXJkc19hZnRlcl9pZl9lbHNlQDI6CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6OlJld2FyZE1hbmFnZXIuZGVwb3NpdExwKHRvOiBieXRlcywgbHBBbW91bnQ6IHVpbnQ2NCkgLT4gdm9pZDoKZGVwb3NpdExwOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEwNgogICAgLy8gcHJvdGVjdGVkIGRlcG9zaXRMcCh0bzogQWNjb3VudCwgbHBBbW91bnQ6IHVpbnQ2NCk6IHZvaWQgewogICAgcHJvdG8gMiAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzAKICAgIC8vIGFjY1Jld2FyZFBlclNoYXJlUCA9IEdsb2JhbFN0YXRlPGJpZ3VpbnQ+KHsgaW5pdGlhbFZhbHVlOiAwbiB9KTsKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA4IC8vICJhY2NSZXdhcmRQZXJTaGFyZVAiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEwOAogICAgLy8gbGV0IHBlbmRpbmc6IHVpbnQ2NCA9IDA7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEwOQogICAgLy8gbGV0IHVzZXJMcEFtb3VudCA9IHRoaXMuYmFsYW5jZSh0bykudmFsdWU7CiAgICBmcmFtZV9kaWcgLTIKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzMKICAgIC8vIGJhbGFuY2UgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDQgLy8gImJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTA5CiAgICAvLyBsZXQgdXNlckxwQW1vdW50ID0gdGhpcy5iYWxhbmNlKHRvKS52YWx1ZTsKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIHN3YXAKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMTAKICAgIC8vIGlmICh1c2VyTHBBbW91bnQgPiAwKSB7CiAgICBieiBkZXBvc2l0THBfYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTExCiAgICAvLyBwZW5kaW5nID0gYmlndWludFRvVWludDY0TW9kdWxvKEJpZ1VpbnQodXNlckxwQW1vdW50KSAqIGFjY1Jld2FyZFBlclNoYXJlUCAvIFBfU0NBTEUpIC0gdGhpcy51c2VyUmV3YXJkRGVidCh0bykudmFsdWU7CiAgICBmcmFtZV9kaWcgMgogICAgaXRvYgogICAgZnJhbWVfZGlnIDAKICAgIGIqCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjAKICAgIC8vIGNvbnN0IFBfU0NBTEU6IGJpZ3VpbnQgPSBCaWdVaW50KDEgPDwgUCk7CiAgICBieXRlYyA5IC8vIDB4MDEwMDAwMDAwMDAwMDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMTEKICAgIC8vIHBlbmRpbmcgPSBiaWd1aW50VG9VaW50NjRNb2R1bG8oQmlnVWludCh1c2VyTHBBbW91bnQpICogYWNjUmV3YXJkUGVyU2hhcmVQIC8gUF9TQ0FMRSkgLSB0aGlzLnVzZXJSZXdhcmREZWJ0KHRvKS52YWx1ZTsKICAgIGIvCiAgICBjYWxsc3ViIGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbwogICAgZnJhbWVfZGlnIC0yCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjM0CiAgICAvLyB1c2VyUmV3YXJkRGVidCA9IExvY2FsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgNSAvLyAidXNlclJld2FyZERlYnQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTExCiAgICAvLyBwZW5kaW5nID0gYmlndWludFRvVWludDY0TW9kdWxvKEJpZ1VpbnQodXNlckxwQW1vdW50KSAqIGFjY1Jld2FyZFBlclNoYXJlUCAvIFBfU0NBTEUpIC0gdGhpcy51c2VyUmV3YXJkRGVidCh0bykudmFsdWU7CiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIC0KICAgIGZyYW1lX2J1cnkgMQoKZGVwb3NpdExwX2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMTMKICAgIC8vIHVzZXJMcEFtb3VudCArPSBscEFtb3VudDsKICAgIGZyYW1lX2RpZyAyCiAgICBmcmFtZV9kaWcgLTEKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMTQKICAgIC8vIHRoaXMuYmFsYW5jZSh0bykudmFsdWUgKz0gbHBBbW91bnQ7CiAgICBmcmFtZV9kaWcgLTIKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzMKICAgIC8vIGJhbGFuY2UgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDQgLy8gImJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTE0CiAgICAvLyB0aGlzLmJhbGFuY2UodG8pLnZhbHVlICs9IGxwQW1vdW50OwogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTEKICAgICsKICAgIGZyYW1lX2RpZyAtMgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMzCiAgICAvLyBiYWxhbmNlID0gTG9jYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlYyA0IC8vICJiYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjExNAogICAgLy8gdGhpcy5iYWxhbmNlKHRvKS52YWx1ZSArPSBscEFtb3VudDsKICAgIHVuY292ZXIgMgogICAgYXBwX2xvY2FsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjI5CiAgICAvLyB0b3RhbFN1cHBseSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNyAvLyAidG90YWxTdXBwbHkiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjExNQogICAgLy8gdGhpcy50b3RhbFN1cHBseS52YWx1ZSArPSBscEFtb3VudDsKICAgIGZyYW1lX2RpZyAtMQogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjI5CiAgICAvLyB0b3RhbFN1cHBseSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyA3IC8vICJ0b3RhbFN1cHBseSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMTUKICAgIC8vIHRoaXMudG90YWxTdXBwbHkudmFsdWUgKz0gbHBBbW91bnQ7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjExNwogICAgLy8gdGhpcy51c2VyUmV3YXJkRGVidCh0bykudmFsdWUgPSBiaWd1aW50VG9VaW50NjRNb2R1bG8oKEJpZ1VpbnQodXNlckxwQW1vdW50KSAqIGFjY1Jld2FyZFBlclNoYXJlUCkgLyBQX1NDQUxFKTsKICAgIGl0b2IKICAgIGZyYW1lX2RpZyAwCiAgICBiKgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjIwCiAgICAvLyBjb25zdCBQX1NDQUxFOiBiaWd1aW50ID0gQmlnVWludCgxIDw8IFApOwogICAgYnl0ZWMgOSAvLyAweDAxMDAwMDAwMDAwMDAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTE3CiAgICAvLyB0aGlzLnVzZXJSZXdhcmREZWJ0KHRvKS52YWx1ZSA9IGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbygoQmlnVWludCh1c2VyTHBBbW91bnQpICogYWNjUmV3YXJkUGVyU2hhcmVQKSAvIFBfU0NBTEUpOwogICAgYi8KICAgIGNhbGxzdWIgYmlndWludFRvVWludDY0TW9kdWxvCiAgICBmcmFtZV9kaWcgLTIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozNAogICAgLy8gdXNlclJld2FyZERlYnQgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDUgLy8gInVzZXJSZXdhcmREZWJ0IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjExNwogICAgLy8gdGhpcy51c2VyUmV3YXJkRGVidCh0bykudmFsdWUgPSBiaWd1aW50VG9VaW50NjRNb2R1bG8oKEJpZ1VpbnQodXNlckxwQW1vdW50KSAqIGFjY1Jld2FyZFBlclNoYXJlUCkgLyBQX1NDQUxFKTsKICAgIHVuY292ZXIgMgogICAgYXBwX2xvY2FsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjExOAogICAgLy8gaWYgKHBlbmRpbmcgPiAwKSB7CiAgICBmcmFtZV9kaWcgMQogICAgYnogZGVwb3NpdExwX2FmdGVyX2lmX2Vsc2VANQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjExOQogICAgLy8gYXNzZXRUcmFuc2Zlcih7IHhmZXJBc3NldDogdGhpcy5hc3NldC52YWx1ZSwgYXNzZXRBbW91bnQ6IHBlbmRpbmcsIGFzc2V0UmVjZWl2ZXI6IHRvIH0pLnN1Ym1pdCgpOwogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjI3CiAgICAvLyBhc3NldCA9IEdsb2JhbFN0YXRlPEFzc2V0PigpOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzIgLy8gImFzc2V0IgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGZyYW1lX2RpZyAtMgogICAgaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCiAgICBmcmFtZV9kaWcgMQogICAgZHVwCiAgICBjb3ZlciAyCiAgICBpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjExOQogICAgLy8gYXNzZXRUcmFuc2Zlcih7IHhmZXJBc3NldDogdGhpcy5hc3NldC52YWx1ZSwgYXNzZXRBbW91bnQ6IHBlbmRpbmcsIGFzc2V0UmVjZWl2ZXI6IHRvIH0pLnN1Ym1pdCgpOwogICAgaW50Y18zIC8vIDQKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMjAKICAgIC8vIGVtaXQ8UmV3YXJkc0NsYWltZWQ+KHsgdXNlcjogbmV3IEFkZHJlc3ModG8pLCBwZW5kaW5nIH0pOwogICAgaXRvYgogICAgZnJhbWVfZGlnIC0yCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjIDI1IC8vIG1ldGhvZCAiUmV3YXJkc0NsYWltZWQoYWRkcmVzcyx1aW50NjQpIgogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKCmRlcG9zaXRMcF9hZnRlcl9pZl9lbHNlQDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTIyCiAgICAvLyBlbWl0PERlcG9zaXQ+KHsgdG86IG5ldyBBZGRyZXNzKHRvKSwgbHBBbW91bnQgfSk7CiAgICBmcmFtZV9kaWcgLTEKICAgIGl0b2IKICAgIGZyYW1lX2RpZyAtMgogICAgc3dhcAogICAgY29uY2F0CiAgICBwdXNoYnl0ZXMgMHhjZmFiODcyMyAvLyBtZXRob2QgIkRlcG9zaXQoYWRkcmVzcyx1aW50NjQpIgogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjpPd25hYmxlLm9ubHlPd25lcigpIC0+IHZvaWQ6Cm9ubHlPd25lcjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjEzCiAgICAvLyBhc3NlcnQob3AuVHhuLnNlbmRlci5ieXRlcyA9PT0gdGhpcy5vd25lci52YWx1ZS5ieXRlcywgJ09ubHkgb3duZXInKTsKICAgIHR4biBTZW5kZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjYKICAgIC8vIHByb3RlY3RlZCBvd25lciA9IEdsb2JhbFN0YXRlPEFkZHJlc3M+KCk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMTQgLy8gIm93bmVyIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjEzCiAgICAvLyBhc3NlcnQob3AuVHhuLnNlbmRlci5ieXRlcyA9PT0gdGhpcy5vd25lci52YWx1ZS5ieXRlcywgJ09ubHkgb3duZXInKTsKICAgID09CiAgICBhc3NlcnQgLy8gT25seSBvd25lcgogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6Ok93bmFibGUudHJhbnNmZXJPd25lcnNoaXAobmV3T3duZXI6IGJ5dGVzKSAtPiB2b2lkOgp0cmFuc2Zlck93bmVyc2hpcDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjE2LTE3CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB0cmFuc2Zlck93bmVyc2hpcChuZXdPd25lcjogQWRkcmVzcyk6IHZvaWQgewogICAgcHJvdG8gMSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czoxOAogICAgLy8gdGhpcy5vbmx5T3duZXIoKTsKICAgIGNhbGxzdWIgb25seU93bmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czo2CiAgICAvLyBwcm90ZWN0ZWQgb3duZXIgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPigpOwogICAgYnl0ZWMgMTQgLy8gIm93bmVyIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6MTkKICAgIC8vIHRoaXMub3duZXIudmFsdWUgPSBuZXdPd25lcjsKICAgIGZyYW1lX2RpZyAtMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1Ygo=",clear:"I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg=="},byteCode:{approval:"CiAFAAEIBJBOJhwMdG9rZW5CYWxhbmNlC3ZVc2RCYWxhbmNlBWFzc2V0CHJlc2VydmVzB2JhbGFuY2UOdXNlclJld2FyZERlYnQBZAt0b3RhbFN1cHBseRJhY2NSZXdhcmRQZXJTaGFyZVAHAQAAAAAAAAEBDmFkbWluRmVlQW1vdW50CmNhbkRlcG9zaXQLY2FuV2l0aGRyYXcFb3duZXIKZmVlU2hhcmVCUBFiYWxhbmNlUmF0aW9NaW5CUAECD2FkbWluRmVlU2hhcmVCUAQVH3x1AWEGcm91dGVyDXN0b3BBdXRob3JpdHkRdG9rZW5BbW91bnRSZWR1Y2UTdG9rZW5BbW91bnRJbmNyZWFzZQS6gYB2AQMJAQAAAAAAAAAAMRhAACgnEoHQD2cnByJnJwiAAGcnCyJnKCJnKSJnKyJnJwYiZycMI2cnDSNnMRtBAKiCFwRRbTR7BAGjo/8EdhCkYAToOoerBJLgOxwEIfHd/wTZeK0UBA0bTAYEdb+aKAT0k9ftBI1ctt8E/gSlzgQCjghZBEH8lm4Eq/IAFAQEsWHxBGZZHM8Epa5r0QSgTFvEBDYbYVkEMruwEQS4d57nBOF7r7Q2GgCOFwFhAVQBSAE/ATMBIwEFAOMA0wDHALcAqwCfAJMAhwB4AGkAXQBNAEEAKQARAAIiQzEZFEQxGEQ2GgGICuAjQzEZFEQxGESADBUffHUAAAAAAAAAA7AjQzEZFEQxGEQ2GgEXwByICbMWJxNMULAjQzEZFEQxGESICXEjQzEZFEQxGEQ2GgEXiAlPI0MxGRREMRhEiAjlI0MxGRREMRhENhoBiAY/I0MxGRREMRhENhoBiAYkI0MxGRREMRhEiAYQI0MxGRREMRhEiAX8I0MxGRREMRhEiAXoI0MxGRREMRhEiAXUI0MxGRREMRhENhoBF4gFsiNDMRkURDEYRIgFfSNDMRkURDEYRDYaAReIBVsjQzEZFEQxGEQ2GgE2GgIXNhoDFzYaBCJTiAR7FicTTFCwI0MxGRREMRhENhoBNhoCFzYaAyJTiAO+FicTTFCwI0MxGRREMRhENhoBF4gCcCNDMRkURDEYRIgBfiNDMRkURDEYRCNDMRkURDEYRIgA4iNDMRkjEkQxGESIAK4jQzEZFEQxGBRENhoBNhoCNhoDFzYaBBc2GgUXNhoGF4gAKiNDigEBi/8VSSQNQQAYiwAkCUmLAElOAw9LAkxNi/9MTwJSF0yJIkL/6IoGACcOi/pnKov9ZycUi/xnJxWL+2cnFov6ZycPi/5nJxCL/2ciKmVEcQFMSU8CRIEDDUEAJ4sAgQMJgQpMlCcXTGeLAIEDDEEADoEDiwAJgQpMlCcYTGeJIkL/9yJC/96KAAAxAEkiJwRjRQFAAAaLACcEImaLACInBWNFAUAABosAJwUiZomICK6xIiplRDIKshQishKyESWyECKyAbOAFlBvb2w6IG9wdC1pbiBjb21wbGV0ZWSwiTEAIicVZUQSRIkxACInFmVEEkSJigAAIihlTElPAkQiKWVMSU4CTgNEDUEAEIsBIQQLiwAKIicQZUQPRImLAIsBDEH/94sAIQQLiwEKIicQZUQPRImKAAAiJwxlREQiJwZlTElPAkQiKmVEMRZEMRYjCUk4ECUSREk4FDIKEkRJOBFPAhJESTggMgMSREk4FTIDEkQ4EogE2klOAklEIitlRAgrTGciKGVMSU4CTgNEIillTElOAk4ERAhMQQAFiwRAADSLASORIihlREsBCChMZyIpZUQIKUxniAQiMQAiJwZlRIsACYgG/CIoZUSBgICAgIAgDESJIihlRIsBFosCFksBo4sEFkxLAaJJFSQORCSvTEsBqxdPBAgoTGciKWVEiwMWTwSjTwOiSRUkDkRPAqsXCClMZ0L/n4oBACInDWVERCInBmVEMQBJIicEY0xJTwJESYv/D0QiJwhlTE4CRCJMQQAWiwIWiwOjJwmiiP2riwEiJwVjRAmMBIsCi/8JiwFJIicEY0SL/wlLAScETwJmIicHZUSL/wknB0xnTBaLA6MnCaKI/XMnBUxmiwRBACOxIiplRIsBSU4CshSLBElOArISshElshAisgGzFlAnGUxQsIv/FosBSwFQgATTr6TxTFCwIihlRCIpZURKCCIoZURPAxZLBKNLAhZMSwGiSRUkDkQkr0xLAasXTwNMCShMZyIpZURPBBZPBaNPA6JJFSQORE8CqxcJKUxnIihlRCIpZUQIDUQiK2VEi/8PRCIrZUSL/wkrTGeIAq8iJwZlRIsADESxIiplRIv/iANBMQCyFLISshElshAisgGziYoDAYAAiP2FIkcDi/5BAGGL/0AADSInD2VEi/4LIQQKjAKL/osCCYgC1kmIAwOL/kwJjAIiKGVESwEIKExnIitlRAgrTGciKGVEiAGbSYwAIillRAxBAAkiKWVEiwAJjAEpiwBniwJJiATIjAOLAYwEiwOLBCIqZUQWi/4WSwIWTwQWi/1PBFBPA1BPAlBMUIAEK7vso0xQsIj9BYwAiYoEAYAASYj85SJHBIv9QQCFIillRIv9CClMZyIpZUSIASdJjAAiKGVMSU4CjAFEDEEADYsBiwAJSYwCiAJUjAMiK2VEiwJJTwIORCIrZURMCStMZ4v/QAANIicPZUSLAwshBAqMBIsDiwRJTgIJKIsAZ0mL/g9EsSIqZUSL/LIUSwGyErIRJbIQIrIBs0sBiAQCjAaMBYsFiwYiKmVEFov9FksCFk8EFov8TwRQTwNQTwJQTFCABNPx1UJMULCI/EGMAImKAQCIBKOL/yEEDkQnD4v/Z4mKAACIBJEiJwZlTElPAkQiJwdlTElOAk4DRA1BAAoxAIsAiwEJiAPWiYoBAIgEaIv/IQQORCcQi/9niYj75CcMImeJiARRJwwjZ4mI+9QnDSJniYgEQScNI2eJigEAiAQ2JxaL/2eJigEAiAQqJxWL/2eJigEBIkmL/xZJIicGZUQWSU4CIicUZUSBApAWSU4DJxGjTgKmSUEAdIsDiwKhiwSjjACLBkEAWosAiwOnQQBHiwCLA6GMASOLBIsDSU4Co0sBo6OLAUmjiwJJTwKjTwKgo4gBFkxBABWLAosBo6CLBYsCo6InCqCI+kmMAImLAosBo6FC/+iLA4sAoYwBIkL/tosAiwOgjAEiQv+riwKLA6FC/4mKAAAiKGVEFiIpZUQWSqMiJxRlRBZJSwKjTwRPBKCjSU4CTgOAAQSjJwqhTwKjJxqiSwFLAqNLAUsCo08Co6CIAJRJTgJKoIgA8k4DpEEAFYsAoYgA5osBTAmMAYsBI5AnBkxniYsATKGIANCLAQiMAUL/6IoBASInF2VMSU8CRCInGGVMTgJEQQAIi/+LAAqMAImLAUEACIv/iwELjACJi/+MAImKAQEiJxdlTElPAkQiJxhlTE4CREEACIv/iwALjACJiwFBAAiL/4sBCowAiYv/jACJigEBIkmL/4AApUSL/4AAqEEABYAAjACJi/8nGqZBAAUnCowAiYv/kyMIgQIKgQJMlUwWTBZMJxujoEmMAIv/SwGioCcRoowBiwGLAKRBABWL/4sBSU4CoksBoCcRoowBjABC/+OJigEBIkcDi/+AAKhBAAQijACJi/+AAQikQQAEI4wAiYv/k4ECCIEDCoECTJVMFkwWTCcbo6CMAYsBSaNJjAOAAKhAACcnEYsBSU4Co4v/iwOioCcaokmMAKhAAAuLAScKoYsAqEEAPYsAjAGLAScKoEmMAklLAaOji/+mQQAHiwKMAUL/5osBSUsBo6OL/6VBAAqLAScKoYwBQv/piwGI+EKMAImLAIwBQv+MigAAgABJMQBJIicEY0xJTwJEQQBIiwMWIicIZUSjJwmiiPgUSYwBiwIiJwVjRAlJjABBACiLAkknBYsBZrEiKmVESwGyFIsASU4CshKyESWyECKyAbMWUCcZTFCwiYoBAIgBNYv/IQQORCcSi/9niYoAAIgBIyInC2VMSU8CREEAHbEiKmVEIicOZUSyFIsAshKyESWyECKyAbMnCyJniYoBAYv/IicEY0QWIicIZUSjJwmiiPeBi/8iJwVjRAmJigEAIicHZUxJTwJEQQAwIicSZUSL/wshBAqL/0sBCYz/IicIZUSL/xYnCaOLABaioCcITGciJwtlRAgnC0xniYoCACInCGVEIov+IicEY0xJTwJEQQAWiwIWiwCjJwmiiPcVi/4iJwVjRAmMAYsCi/8Ii/4iJwRjRIv/CIv+JwRPAmYiJwdlRIv/CCcHTGcWiwCjJwmiiPbfi/4nBU8CZosBQQAjsSIqZUSL/rIUiwFJTgKyErIRJbIQIrIBsxaL/kxQJxlMULCL/xaL/kxQgATPq4cjTFCwiTEAIicOZUQSRImKAQCI//AnDov/Z4k=",clear:"CoEBQw=="},events:[{name:"RewardsClaimed",args:[{type:"address",name:"user"},{type:"uint64",name:"pending"}]},{name:"Deposit",args:[{type:"address",name:"to"},{type:"uint64",name:"lpAmount"}]},{name:"Withdraw",args:[{type:"address",name:"from"},{type:"uint64",name:"lpAmount"}]},{name:"SwappedToVUsd",args:[{type:"address",name:"user"},{type:"uint64",name:"asset"},{type:"uint64",name:"amount"},{type:"uint64",name:"result"},{type:"uint64",name:"fee"}]},{name:"SwappedFromVUsd",args:[{type:"address",name:"user"},{type:"uint64",name:"asset"},{type:"uint64",name:"amount"},{type:"uint64",name:"result"},{type:"uint64",name:"fee"}]}],templateVariables:{}},ka=class{constructor(n){this.value=n}asByteArray(){return this.value}asString(){return this.value!==void 0?Buffer.from(this.value).toString("utf-8"):void 0}},F=class a{static get create(){return{_resolveByMethod(n){switch(n.method){case"createApplication":case"createApplication(address,address,uint64,uint64,uint64,uint64)void":return a.create.createApplication(n)}throw new Error("Unknown ' + verb + ' method")},createApplication(n){return{...n,method:"createApplication(address,address,uint64,uint64,uint64,uint64)void",args:Array.isArray(n.args)?n.args:[n.args.owner,n.args.router,n.args.a,n.args.assetId,n.args.feeShareBp,n.args.balanceRatioMinBp]}}}}static get optIn(){return{optInToApplication(n){return{...n,method:"optInToApplication()void",args:Array.isArray(n.args)?n.args:[]}}}}static optInAsset(n){return{...n,method:"optInAsset()void",args:Array.isArray(n.args)?n.args:[]}}static noop(n){return{...n,method:"noop()void",args:Array.isArray(n.args)?n.args:[]}}static deposit(n){return{...n,method:"deposit()void",args:Array.isArray(n.args)?n.args:[]}}static withdraw(n){return{...n,method:"withdraw(uint64)void",args:Array.isArray(n.args)?n.args:[n.args.amountLp]}}static swapToVUsd(n){return{...n,method:"swapToVUsd(address,uint64,bool)uint64",args:Array.isArray(n.args)?n.args:[n.args.user,n.args.amount,n.args.zeroFee]}}static swapFromVUsd(n){return{...n,method:"swapFromVUsd(address,uint64,uint64,bool)uint64",args:Array.isArray(n.args)?n.args:[n.args.user,n.args.amount,n.args.receiveAmountMin,n.args.zeroFee]}}static setFeeShare(n){return{...n,method:"setFeeShare(uint64)void",args:Array.isArray(n.args)?n.args:[n.args.feeShareBp]}}static adjustTotalLpAmount(n){return{...n,method:"adjustTotalLpAmount()void",args:Array.isArray(n.args)?n.args:[]}}static setBalanceRatioMinBp(n){return{...n,method:"setBalanceRatioMinBP(uint64)void",args:Array.isArray(n.args)?n.args:[n.args.balanceRatioMinBp]}}static stopDeposit(n){return{...n,method:"stopDeposit()void",args:Array.isArray(n.args)?n.args:[]}}static startDeposit(n){return{...n,method:"startDeposit()void",args:Array.isArray(n.args)?n.args:[]}}static stopWithdraw(n){return{...n,method:"stopWithdraw()void",args:Array.isArray(n.args)?n.args:[]}}static startWithdraw(n){return{...n,method:"startWithdraw()void",args:Array.isArray(n.args)?n.args:[]}}static setStopAuthority(n){return{...n,method:"setStopAuthority(address)void",args:Array.isArray(n.args)?n.args:[n.args.stopAuthority]}}static setRouter(n){return{...n,method:"setRouter(address)void",args:Array.isArray(n.args)?n.args:[n.args.router]}}static claimRewards(n){return{...n,method:"claimRewards()void",args:Array.isArray(n.args)?n.args:[]}}static setAdminFeeShare(n){return{...n,method:"setAdminFeeShare(uint64)void",args:Array.isArray(n.args)?n.args:[n.args.adminFeeShareBp]}}static claimAdminFee(n){return{...n,method:"claimAdminFee()void",args:Array.isArray(n.args)?n.args:[]}}static pendingReward(n){return{...n,method:"pendingReward(account)uint64",args:Array.isArray(n.args)?n.args:[n.args.user]}}static decimals(n){return{...n,method:"decimals()uint64",args:Array.isArray(n.args)?n.args:[]}}static transferOwnership(n){return{...n,method:"transferOwnership(address)void",args:Array.isArray(n.args)?n.args:[n.args.newOwner]}}};var za=class a{appClient;constructor(n){this.appClient=n instanceof Pi.AppClient?n:new Pi.AppClient({...n,appSpec:Ja})}decodeReturnValue(n,i){return i!==void 0?(0,$d.getArc56ReturnValue)(i,this.appClient.getABIMethod(n),Ja.structs):void 0}static async fromCreatorAndName(n){return new a(await Pi.AppClient.fromCreatorAndName({...n,appSpec:Ja}))}static async fromNetwork(n){return new a(await Pi.AppClient.fromNetwork({...n,appSpec:Ja}))}get appId(){return this.appClient.appId}get appAddress(){return this.appClient.appAddress}get appName(){return this.appClient.appName}get appSpec(){return this.appClient.appSpec}get algorand(){return this.appClient.algorand}params={optIn:{optInToApplication:(n={args:[]})=>this.appClient.params.optIn(F.optIn.optInToApplication(n))},clearState:n=>this.appClient.params.bare.clearState(n),optInAsset:(n={args:[]})=>this.appClient.params.call(F.optInAsset(n)),noop:(n={args:[]})=>this.appClient.params.call(F.noop(n)),deposit:(n={args:[]})=>this.appClient.params.call(F.deposit(n)),withdraw:n=>this.appClient.params.call(F.withdraw(n)),swapToVUsd:n=>this.appClient.params.call(F.swapToVUsd(n)),swapFromVUsd:n=>this.appClient.params.call(F.swapFromVUsd(n)),setFeeShare:n=>this.appClient.params.call(F.setFeeShare(n)),adjustTotalLpAmount:(n={args:[]})=>this.appClient.params.call(F.adjustTotalLpAmount(n)),setBalanceRatioMinBp:n=>this.appClient.params.call(F.setBalanceRatioMinBp(n)),stopDeposit:(n={args:[]})=>this.appClient.params.call(F.stopDeposit(n)),startDeposit:(n={args:[]})=>this.appClient.params.call(F.startDeposit(n)),stopWithdraw:(n={args:[]})=>this.appClient.params.call(F.stopWithdraw(n)),startWithdraw:(n={args:[]})=>this.appClient.params.call(F.startWithdraw(n)),setStopAuthority:n=>this.appClient.params.call(F.setStopAuthority(n)),setRouter:n=>this.appClient.params.call(F.setRouter(n)),claimRewards:(n={args:[]})=>this.appClient.params.call(F.claimRewards(n)),setAdminFeeShare:n=>this.appClient.params.call(F.setAdminFeeShare(n)),claimAdminFee:(n={args:[]})=>this.appClient.params.call(F.claimAdminFee(n)),pendingReward:n=>this.appClient.params.call(F.pendingReward(n)),decimals:(n={args:[]})=>this.appClient.params.call(F.decimals(n)),transferOwnership:n=>this.appClient.params.call(F.transferOwnership(n))};createTransaction={optIn:{optInToApplication:(n={args:[]})=>this.appClient.createTransaction.optIn(F.optIn.optInToApplication(n))},clearState:n=>this.appClient.createTransaction.bare.clearState(n),optInAsset:(n={args:[]})=>this.appClient.createTransaction.call(F.optInAsset(n)),noop:(n={args:[]})=>this.appClient.createTransaction.call(F.noop(n)),deposit:(n={args:[]})=>this.appClient.createTransaction.call(F.deposit(n)),withdraw:n=>this.appClient.createTransaction.call(F.withdraw(n)),swapToVUsd:n=>this.appClient.createTransaction.call(F.swapToVUsd(n)),swapFromVUsd:n=>this.appClient.createTransaction.call(F.swapFromVUsd(n)),setFeeShare:n=>this.appClient.createTransaction.call(F.setFeeShare(n)),adjustTotalLpAmount:(n={args:[]})=>this.appClient.createTransaction.call(F.adjustTotalLpAmount(n)),setBalanceRatioMinBp:n=>this.appClient.createTransaction.call(F.setBalanceRatioMinBp(n)),stopDeposit:(n={args:[]})=>this.appClient.createTransaction.call(F.stopDeposit(n)),startDeposit:(n={args:[]})=>this.appClient.createTransaction.call(F.startDeposit(n)),stopWithdraw:(n={args:[]})=>this.appClient.createTransaction.call(F.stopWithdraw(n)),startWithdraw:(n={args:[]})=>this.appClient.createTransaction.call(F.startWithdraw(n)),setStopAuthority:n=>this.appClient.createTransaction.call(F.setStopAuthority(n)),setRouter:n=>this.appClient.createTransaction.call(F.setRouter(n)),claimRewards:(n={args:[]})=>this.appClient.createTransaction.call(F.claimRewards(n)),setAdminFeeShare:n=>this.appClient.createTransaction.call(F.setAdminFeeShare(n)),claimAdminFee:(n={args:[]})=>this.appClient.createTransaction.call(F.claimAdminFee(n)),pendingReward:n=>this.appClient.createTransaction.call(F.pendingReward(n)),decimals:(n={args:[]})=>this.appClient.createTransaction.call(F.decimals(n)),transferOwnership:n=>this.appClient.createTransaction.call(F.transferOwnership(n))};send={optIn:{optInToApplication:async(n={args:[]})=>{let i=await this.appClient.send.optIn(F.optIn.optInToApplication(n));return{...i,return:i.return}}},clearState:n=>this.appClient.send.bare.clearState(n),optInAsset:async(n={args:[]})=>{let i=await this.appClient.send.call(F.optInAsset(n));return{...i,return:i.return}},noop:async(n={args:[]})=>{let i=await this.appClient.send.call(F.noop(n));return{...i,return:i.return}},deposit:async(n={args:[]})=>{let i=await this.appClient.send.call(F.deposit(n));return{...i,return:i.return}},withdraw:async n=>{let i=await this.appClient.send.call(F.withdraw(n));return{...i,return:i.return}},swapToVUsd:async n=>{let i=await this.appClient.send.call(F.swapToVUsd(n));return{...i,return:i.return}},swapFromVUsd:async n=>{let i=await this.appClient.send.call(F.swapFromVUsd(n));return{...i,return:i.return}},setFeeShare:async n=>{let i=await this.appClient.send.call(F.setFeeShare(n));return{...i,return:i.return}},adjustTotalLpAmount:async(n={args:[]})=>{let i=await this.appClient.send.call(F.adjustTotalLpAmount(n));return{...i,return:i.return}},setBalanceRatioMinBp:async n=>{let i=await this.appClient.send.call(F.setBalanceRatioMinBp(n));return{...i,return:i.return}},stopDeposit:async(n={args:[]})=>{let i=await this.appClient.send.call(F.stopDeposit(n));return{...i,return:i.return}},startDeposit:async(n={args:[]})=>{let i=await this.appClient.send.call(F.startDeposit(n));return{...i,return:i.return}},stopWithdraw:async(n={args:[]})=>{let i=await this.appClient.send.call(F.stopWithdraw(n));return{...i,return:i.return}},startWithdraw:async(n={args:[]})=>{let i=await this.appClient.send.call(F.startWithdraw(n));return{...i,return:i.return}},setStopAuthority:async n=>{let i=await this.appClient.send.call(F.setStopAuthority(n));return{...i,return:i.return}},setRouter:async n=>{let i=await this.appClient.send.call(F.setRouter(n));return{...i,return:i.return}},claimRewards:async(n={args:[]})=>{let i=await this.appClient.send.call(F.claimRewards(n));return{...i,return:i.return}},setAdminFeeShare:async n=>{let i=await this.appClient.send.call(F.setAdminFeeShare(n));return{...i,return:i.return}},claimAdminFee:async(n={args:[]})=>{let i=await this.appClient.send.call(F.claimAdminFee(n));return{...i,return:i.return}},pendingReward:async n=>{let i=await this.appClient.send.call(F.pendingReward(n));return{...i,return:i.return}},decimals:async(n={args:[]})=>{let i=await this.appClient.send.call(F.decimals(n));return{...i,return:i.return}},transferOwnership:async n=>{let i=await this.appClient.send.call(F.transferOwnership(n));return{...i,return:i.return}}};clone(n){return new a(this.appClient.clone(n))}async pendingReward(n){return(await this.appClient.send.call(F.pendingReward(n))).return}async decimals(n={args:[]}){return(await this.appClient.send.call(F.decimals(n))).return}state={global:{getAll:async()=>{let n=await this.appClient.state.global.getAll();return{feeShareBp:n.feeShareBP,router:n.router,tokenBalance:n.tokenBalance,vUsdBalance:n.vUsdBalance,balanceRatioMinBp:n.balanceRatioMinBP,reserves:n.reserves,a:n.a,d:n.d,tokenAmountReduce:n.tokenAmountReduce,tokenAmountIncrease:n.tokenAmountIncrease,stopAuthority:n.stopAuthority,canDeposit:n.canDeposit,canWithdraw:n.canWithdraw,asset:n.asset,adminFeeShareBp:n.adminFeeShareBP,totalSupply:n.totalSupply,accRewardPerShareP:new ka(n.accRewardPerShareP),adminFeeAmount:n.adminFeeAmount,owner:n.owner}},feeShareBp:async()=>await this.appClient.state.global.getValue("feeShareBP"),router:async()=>await this.appClient.state.global.getValue("router"),tokenBalance:async()=>await this.appClient.state.global.getValue("tokenBalance"),vUsdBalance:async()=>await this.appClient.state.global.getValue("vUsdBalance"),balanceRatioMinBp:async()=>await this.appClient.state.global.getValue("balanceRatioMinBP"),reserves:async()=>await this.appClient.state.global.getValue("reserves"),a:async()=>await this.appClient.state.global.getValue("a"),d:async()=>await this.appClient.state.global.getValue("d"),tokenAmountReduce:async()=>await this.appClient.state.global.getValue("tokenAmountReduce"),tokenAmountIncrease:async()=>await this.appClient.state.global.getValue("tokenAmountIncrease"),stopAuthority:async()=>await this.appClient.state.global.getValue("stopAuthority"),canDeposit:async()=>await this.appClient.state.global.getValue("canDeposit"),canWithdraw:async()=>await this.appClient.state.global.getValue("canWithdraw"),asset:async()=>await this.appClient.state.global.getValue("asset"),adminFeeShareBp:async()=>await this.appClient.state.global.getValue("adminFeeShareBP"),totalSupply:async()=>await this.appClient.state.global.getValue("totalSupply"),accRewardPerShareP:async()=>new ka(await this.appClient.state.global.getValue("accRewardPerShareP")),adminFeeAmount:async()=>await this.appClient.state.global.getValue("adminFeeAmount"),owner:async()=>await this.appClient.state.global.getValue("owner")},local:n=>{let i=typeof n=="string"?n:(0,qd.encodeAddress)(n.publicKey);return{getAll:async()=>{let o=await this.appClient.state.local(i).getAll();return{balance:o.balance,userRewardDebt:o.userRewardDebt}},balance:async()=>await this.appClient.state.local(i).getValue("balance"),userRewardDebt:async()=>await this.appClient.state.local(i).getValue("userRewardDebt")}}};newGroup(){let n=this,i=this.algorand.newGroup(),o=Promise.resolve(),r=[];return{optInAsset(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.optInAsset(s))),r.push(void 0),this},noop(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.noop(s))),r.push(void 0),this},deposit(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.deposit(s))),r.push(void 0),this},withdraw(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.withdraw(s))),r.push(void 0),this},swapToVUsd(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.swapToVUsd(s))),r.push(d=>n.decodeReturnValue("swapToVUsd(address,uint64,bool)uint64",d)),this},swapFromVUsd(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.swapFromVUsd(s))),r.push(d=>n.decodeReturnValue("swapFromVUsd(address,uint64,uint64,bool)uint64",d)),this},setFeeShare(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.setFeeShare(s))),r.push(void 0),this},adjustTotalLpAmount(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.adjustTotalLpAmount(s))),r.push(void 0),this},setBalanceRatioMinBp(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.setBalanceRatioMinBp(s))),r.push(void 0),this},stopDeposit(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.stopDeposit(s))),r.push(void 0),this},startDeposit(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.startDeposit(s))),r.push(void 0),this},stopWithdraw(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.stopWithdraw(s))),r.push(void 0),this},startWithdraw(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.startWithdraw(s))),r.push(void 0),this},setStopAuthority(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.setStopAuthority(s))),r.push(void 0),this},setRouter(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.setRouter(s))),r.push(void 0),this},claimRewards(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.claimRewards(s))),r.push(void 0),this},setAdminFeeShare(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.setAdminFeeShare(s))),r.push(void 0),this},claimAdminFee(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.claimAdminFee(s))),r.push(void 0),this},pendingReward(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.pendingReward(s))),r.push(d=>n.decodeReturnValue("pendingReward(account)uint64",d)),this},decimals(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.decimals(s))),r.push(d=>n.decodeReturnValue("decimals()uint64",d)),this},transferOwnership(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.transferOwnership(s))),r.push(void 0),this},get optIn(){return{optInToApplication:s=>(o=o.then(async()=>i.addAppCallMethodCall(await n.params.optIn.optInToApplication(s))),r.push(void 0),this)}},clearState(s){return o=o.then(()=>i.addAppCall(n.params.clearState(s))),this},addTransaction(s,d){return o=o.then(()=>i.addTransaction(s,d)),this},async composer(){return await o,i},async simulate(s){await o;let d=await(s?i.simulate(s):i.simulate());return{...d,returns:d.returns?.map((c,A)=>r[A]!==void 0?r[A](c):c.returnValue)}},async send(s){await o;let d=await i.send(s);return{...d,returns:d.returns?.map((c,A)=>r[A]!==void 0?r[A](c):c.returnValue)}}}}};var pe=class{lpAmount;rewardDebt;constructor(n){this.lpAmount=n.lpAmount,this.rewardDebt=n.rewardDebt}get userLiquidity(){return S(this.lpAmount,3).toFixed()}earned(n,i){let o=ss(this.lpAmount,this.rewardDebt,n.accRewardPerShareP,n.p);return i?S(o,i).toFixed():o}};var Ne=class{};var Li=class extends Ne{constructor(i,o){super();this.algorand=i;this.api=o}chainType="ALG";P=48;async buildRawTransactionClaimRewards(i){let o=i.accountAddress,r=BigInt(i.token.tokenAddress),s=BigInt(i.token.poolAddress),d=this.getPool(s),c=this.algorand.newGroup();c.addAppCallMethodCall(await d.params.claimRewards({args:[],sender:o,extraFee:an(1),assetReferences:[r]}));let{transactions:A}=await c.buildTransactions();return Rt(...A)}async buildRawTransactionDeposit(i){let o=i.accountAddress,r=BigInt(i.amount),s=BigInt(i.token.tokenAddress),d=BigInt(i.token.poolAddress),c=this.getPool(d),A=this.algorand.newGroup();A.addAssetTransfer({assetId:s,amount:r,sender:o,receiver:c.appAddress}),A.addAppCallMethodCall(await c.params.deposit({args:[],sender:o,extraFee:an(1)})),fn({composer:A,appId:d,sender:o,count:4});let{transactions:g}=await A.buildTransactions();return Rt(...g)}async buildRawTransactionWithdraw(i){let o=i.accountAddress,r=BigInt(i.amount),s=BigInt(i.token.tokenAddress),d=BigInt(i.token.poolAddress),c=this.getPool(d),A=this.algorand.newGroup();A.addAppCallMethodCall(await c.params.withdraw({args:{amountLp:r},sender:o,extraFee:an(1),assetReferences:[s]})),fn({composer:A,appId:d,sender:o,count:4});let{transactions:g}=await A.buildTransactions();return Rt(...g)}async getPoolInfoFromChain(i){let r=await this.getPool(BigInt(i.poolAddress)).state.global.getAll(),s=r.a?.toString(),d=r.d?.toString(),c=r.tokenBalance?.toString(),A=r.vUsdBalance?.toString(),g=r.totalSupply?.toString(),l=(0,ec.bytesToBigInt)(r.accRewardPerShareP?.asByteArray()??Uint8Array.from([])).toString();if(s&&d&&c&&A&&g&&l){let m=be({tokenBalance:c,vUsdBalance:A});return{aValue:s,dValue:d,tokenBalance:c,vUsdBalance:A,totalLpAmount:g,accRewardPerShareP:l,p:this.P,imbalance:m}}throw new B("Unable to pool info from chain")}async getUserBalanceInfo(i,o){let r=BigInt(o.poolAddress),s=this.getPool(r);try{let{balance:d,userRewardDebt:c}=await s.state.local(i).getAll();if(d!==void 0&&c!==void 0)return new pe({lpAmount:d.toString(),rewardDebt:c.toString()})}catch{let A=(await this.algorand.account.getInformation(i)).appsLocalState;if(A&&!A.find(({id:l})=>l===r))return new pe({lpAmount:"0",rewardDebt:"0"})}throw new B("Unable to get user balance")}getPool(i){return this.algorand.client.getTypedAppClientById(za,{appId:i})}};var xt=require("web3");var Pg={abi:[{inputs:[{internalType:"address",name:"_router",type:"address"},{internalType:"uint256",name:"_a",type:"uint256"},{internalType:"contract ERC20",name:"_token",type:"address"},{internalType:"uint16",name:"_feeShareBP",type:"uint16"},{internalType:"uint256",name:"_balanceRatioMinBP",type:"uint256"},{internalType:"string",name:"lpName",type:"string"},{internalType:"string",name:"lpSymbol",type:"string"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"Deposit",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"RewardsClaimed",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"address",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"vUsdAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"fee",type:"uint256"}],name:"SwappedFromVUsd",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"address",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"vUsdAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"fee",type:"uint256"}],name:"SwappedToVUsd",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"Withdraw",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[],name:"a",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"accRewardPerShareP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"adjustTotalLpAmount",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"adminFeeAmount",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"adminFeeShareBP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"balanceRatioMinBP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"canDeposit",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"canWithdraw",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"claimAdminFee",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"claimRewards",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"d",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"pure",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"subtractedValue",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"deposit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"feeShareBP",outputs:[{internalType:"uint16",name:"",type:"uint16"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPrice",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"x",type:"uint256"}],name:"getY",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"}],name:"pendingReward",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"reserves",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"router",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"_adminFeeShareBP",type:"uint256"}],name:"setAdminFeeShare",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"_balanceRatioMinBP",type:"uint256"}],name:"setBalanceRatioMinBP",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint16",name:"_feeShareBP",type:"uint16"}],name:"setFeeShare",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_router",type:"address"}],name:"setRouter",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_stopAuthority",type:"address"}],name:"setStopAuthority",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"startDeposit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"startWithdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"stopDeposit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"stopWithdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"receiveAmountMin",type:"uint256"},{internalType:"bool",name:"zeroFee",type:"bool"}],name:"swapFromVUsd",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bool",name:"zeroFee",type:"bool"}],name:"swapToVUsd",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"token",outputs:[{internalType:"contract ERC20",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"tokenBalance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"}],name:"userRewardDebt",outputs:[{internalType:"uint256",name:"amount",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"vUsdBalance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amountLp",type:"uint256"}],name:"withdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}]},Hi=Pg;var Ji=class extends Ne{constructor(i,o){super();this.web3=i;this.api=o}chainType="EVM";P=52;async getUserBalanceInfo(i,o){let r;try{r=await ta(this.getUserBalanceInfoByBatch(i,o),`Cannot get UserBalanceInfo for ${o.name} on ${o.chainSymbol}`,5e3)}catch{r=await vo(()=>this.getUserBalanceInfoPerProperty(i,o),`Cannot get UserBalanceInfo for ${o.name} on ${o.chainSymbol}`,5,2e3)}return r}async getPoolInfoFromChain(i){let o;try{o=await ta(this.getPoolInfoByBatch(i),`Cannot get PoolInfo for ${i.name} on ${i.chainSymbol}`,5e3)}catch{o=await vo(()=>this.getPoolInfoPerProperty(i),`Cannot get PoolInfo for ${i.name} on ${i.chainSymbol}`,5,2e3)}return o}async getUserBalanceInfoByBatch(i,o){let r=new this.web3.eth.BatchRequest,s=this.getPoolContract(o.poolAddress),d=s.methods.userRewardDebt(i).encodeABI(),c=s.methods.balanceOf(i).encodeABI();r.add({method:"eth_call",params:[{to:o.poolAddress,data:d},"latest"]}),r.add({method:"eth_call",params:[{to:o.poolAddress,data:c},"latest"]});let[A,g]=await r.execute();if(A&&g&&!A.error&&!g.error)return new pe({lpAmount:xt.Web3.utils.toBigInt(g.result).toString(),rewardDebt:xt.Web3.utils.toBigInt(A.result).toString()});throw new Error("Batched failed")}async getUserBalanceInfoPerProperty(i,o){let r=(await this.getPoolContract(o.poolAddress).methods.userRewardDebt(i).call()).toString(),s=(await this.getPoolContract(o.poolAddress).methods.balanceOf(i).call()).toString();return new pe({lpAmount:s,rewardDebt:r})}async getPoolInfoByBatch(i){let o=new this.web3.eth.BatchRequest,r=this.getPoolContract(i.poolAddress),s=r.methods.a().encodeABI(),d=r.methods.d().encodeABI(),c=r.methods.tokenBalance().encodeABI(),A=r.methods.vUsdBalance().encodeABI(),g=r.methods.totalSupply().encodeABI(),l=r.methods.accRewardPerShareP().encodeABI();o.add({method:"eth_call",params:[{to:i.poolAddress,data:s},"latest"]}),o.add({method:"eth_call",params:[{to:i.poolAddress,data:d},"latest"]}),o.add({method:"eth_call",params:[{to:i.poolAddress,data:c},"latest"]}),o.add({method:"eth_call",params:[{to:i.poolAddress,data:A},"latest"]}),o.add({method:"eth_call",params:[{to:i.poolAddress,data:g},"latest"]}),o.add({method:"eth_call",params:[{to:i.poolAddress,data:l},"latest"]});let[m,I,h,W,Y,f]=await o.execute();if(m&&I&&h&&W&&Y&&f&&!m.error&&!I.error&&!h.error&&!W.error&&!Y.error&&!f.error){let T=xt.Web3.utils.toBigInt(h.result).toString(),G=xt.Web3.utils.toBigInt(W.result).toString(),Z=be({tokenBalance:T,vUsdBalance:G});return{aValue:xt.Web3.utils.toBigInt(m.result).toString(),dValue:xt.Web3.utils.toBigInt(I.result).toString(),tokenBalance:T,vUsdBalance:G,totalLpAmount:xt.Web3.utils.toBigInt(Y.result).toString(),accRewardPerShareP:xt.Web3.utils.toBigInt(f.result).toString(),p:this.P,imbalance:Z}}throw new Error("Batched failed")}async getPoolInfoPerProperty(i){let o=this.getPoolContract(i.poolAddress),r=(await o.methods.a().call()).toString(),s=(await o.methods.d().call()).toString(),d=(await o.methods.tokenBalance().call()).toString(),c=(await o.methods.vUsdBalance().call()).toString(),A=(await o.methods.totalSupply().call()).toString(),g=(await o.methods.accRewardPerShareP().call()).toString(),l=be({tokenBalance:d,vUsdBalance:c});return{aValue:r,dValue:s,tokenBalance:d,vUsdBalance:c,totalLpAmount:A,accRewardPerShareP:g,p:this.P,imbalance:l}}async buildRawTransactionDeposit(i){return Promise.resolve({...this.buildTxParams(i),data:this.getPoolContract(i.token.poolAddress).methods.deposit(i.amount).encodeABI()})}async buildRawTransactionWithdraw(i){return Promise.resolve({...this.buildTxParams(i),data:this.getPoolContract(i.token.poolAddress).methods.withdraw(i.amount).encodeABI()})}async buildRawTransactionClaimRewards(i){return Promise.resolve({...this.buildTxParams(i),data:this.getPoolContract(i.token.poolAddress).methods.claimRewards().encodeABI()})}buildTxParams(i){return{from:i.accountAddress,to:i.token.poolAddress,value:"0"}}getPoolContract(i){return new this.web3.eth.Contract(Hi.abi,i)}};var xa=class{constructor(n,i,o,r){this.api=n;this.nodeRpcUrlsConfig=i;this.params=o;this.tokenService=r}async approve(n,i){if(i){let o=n,r=i;return this.tokenService.buildRawTransactionApprove({...r,spender:r.token.poolAddress},o)}else{let o=n;return this.tokenService.buildRawTransactionApprove({...o,spender:o.token.poolAddress})}}async deposit(n,i){return H(n.amount),z("amount",n.amount,n.token.decimals),n.amount=V(n.amount,n.token.decimals).toFixed(),zn(n.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,i).buildRawTransactionDeposit(n)}async withdraw(n,i){return H(n.amount),z("amount",n.amount,n.token.decimals),n.amount=V(n.amount,3).toFixed(),zn(n.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,i).buildRawTransactionWithdraw(n)}async claimRewards(n,i){return zn(n.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,i).buildRawTransactionClaimRewards(n)}};var pt=require("@project-serum/anchor"),mt=require("@solana/web3.js");var Oa=class extends Ne{constructor(i,o){super();this.solanaRpcUrl=i;this.api=o}chainType="SOLANA";P=48;async getUserBalanceInfo(i,o){let r=this.buildAnchorProvider(i),s=this.getBridge(o.bridgeAddress,r),d=new mt.PublicKey(o.poolAddress),c=await s.account.pool.fetch(d);try{let A=await No(new mt.PublicKey(i),c.mint,s.programId),{lpAmount:g,rewardDebt:l}=await s.account.userDeposit.fetch(A);return new pe({lpAmount:g.toString(),rewardDebt:l.toString()})}catch{return new pe({lpAmount:"0",rewardDebt:"0"})}}async getPoolInfoFromChain(i){let o=this.buildAnchorProvider(i.bridgeAddress),r=await this.getBridge(i.bridgeAddress,o).account.pool.fetch(i.poolAddress),s=r.vUsdBalance.toString(),d=r.tokenBalance.toString(),c=be({tokenBalance:d,vUsdBalance:s});return{dValue:r.d.toString(),aValue:r.a.toString(),totalLpAmount:r.totalLpAmount.toString(),vUsdBalance:s,tokenBalance:d,accRewardPerShareP:r.accRewardPerShareP.toString(),p:this.P,imbalance:c}}async buildRawTransactionDeposit(i){let{bridge:o,accounts:r,preInstructions:s}=await this.prepareDataForTransaction(i),d=await o.methods.deposit(new pt.BN(i.amount)).accounts(r).preInstructions(s).transaction();return d.recentBlockhash=(await this.buildAnchorProvider(i.accountAddress).connection.getLatestBlockhash()).blockhash,d.feePayer=new mt.PublicKey(i.accountAddress),await wn(d,i.txFeeParams,this.solanaRpcUrl),d}async buildRawTransactionWithdraw(i){let{bridge:o,accounts:r,preInstructions:s}=await this.prepareDataForTransaction(i),d=await o.methods.withdraw(new pt.BN(i.amount)).accounts(r).preInstructions(s).transaction();return d.recentBlockhash=(await this.buildAnchorProvider(i.accountAddress).connection.getLatestBlockhash()).blockhash,d.feePayer=new mt.PublicKey(i.accountAddress),await wn(d,i.txFeeParams,this.solanaRpcUrl),d}async buildRawTransactionClaimRewards(i){let{bridge:o,accounts:r,preInstructions:s}=await this.prepareDataForTransaction(i),d=await o.methods.claimRewards().accounts(r).preInstructions(s).transaction();return d.recentBlockhash=(await this.buildAnchorProvider(i.accountAddress).connection.getLatestBlockhash()).blockhash,d.feePayer=new mt.PublicKey(i.accountAddress),await wn(d,i.txFeeParams,this.solanaRpcUrl),d}async prepareDataForTransaction(i){let o=this.buildAnchorProvider(i.accountAddress),r=this.getBridge(i.token.bridgeAddress,o),{accounts:s,preInstructions:d}=await this._getLPTransactionData(r,i.token.poolAddress,i.accountAddress,o);return{bridge:r,accounts:s,preInstructions:d}}getBridge(i,o){return new pt.Program(hi,i,o)}buildAnchorProvider(i){let o=new mt.Connection(this.solanaRpcUrl,"confirmed"),r=new mt.PublicKey(i);return new pt.AnchorProvider(o,{publicKey:r},{preflightCommitment:"confirmed",commitment:"confirmed"})}async _getLPTransactionData(i,o,r,s){let d=new mt.PublicKey(r),c=await Qt(i.programId),A=await Nn(i.programId),g=new mt.PublicKey(o),m=(await i.account.pool.fetch(g)).mint,I=await at(d,m),h=await Tn(m,i.programId),W=await No(d,m,i.programId),Y=[pt.web3.ComputeBudgetProgram.setComputeUnitLimit({units:1e6})];try{await Zn(I,s)}catch{let Z=await pt.Spl.associatedToken(s).methods.create().accounts({mint:m,owner:d,associatedAccount:I}).instruction();Y.push(Z)}try{await i.account.userDeposit.fetch(W)}catch{let G=await i.methods.initDepositAccount().accounts({mint:m,user:d,userDeposit:W}).instruction();Y.push(G)}return{accounts:{mint:m,user:d,config:c,pool:g,bridgeAuthority:A,userDeposit:W,userToken:I,bridgeToken:h},preInstructions:Y}}};var Xh=require("@stellar/stellar-sdk");var e=require("@stellar/stellar-sdk"),Lg=e.contract.Spec,Hg=e.contract.Client;var Qa=class extends Hg{constructor(i){super(new Lg(["AAAAAAAAAAAAAAAKaW5pdGlhbGl6ZQAAAAAABwAAAAAAAAAFYWRtaW4AAAAAAAATAAAAAAAAAAZicmlkZ2UAAAAAABMAAAAAAAAAAWEAAAAAAAAKAAAAAAAAAAV0b2tlbgAAAAAAABMAAAAAAAAADGZlZV9zaGFyZV9icAAAAAoAAAAAAAAAFGJhbGFuY2VfcmF0aW9fbWluX2JwAAAACgAAAAAAAAASYWRtaW5fZmVlX3NoYXJlX2JwAAAAAAAKAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAHZGVwb3NpdAAAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAABmFtb3VudAAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAId2l0aGRyYXcAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAACWFtb3VudF9scAAAAAAAAAoAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAANc3dhcF90b192X3VzZAAAAAAAAAMAAAAAAAAABHVzZXIAAAATAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAACHplcm9fZmVlAAAAAQAAAAEAAAPpAAAACgAAAAM=","AAAAAAAAAAAAAAAPc3dhcF9mcm9tX3ZfdXNkAAAAAAQAAAAAAAAABHVzZXIAAAATAAAAAAAAAAt2dXNkX2Ftb3VudAAAAAAKAAAAAAAAABJyZWNlaXZlX2Ftb3VudF9taW4AAAAAAAoAAAAAAAAACHplcm9fZmVlAAAAAQAAAAEAAAPpAAAACgAAAAM=","AAAAAAAAAAAAAAANY2xhaW1fcmV3YXJkcwAAAAAAAAEAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAdgYWRtaW5gAAAAAA1zZXRfZmVlX3NoYXJlAAAAAAAAAQAAAAAAAAAMZmVlX3NoYXJlX2JwAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAWYWRqdXN0X3RvdGFsX2xwX2Ftb3VudAAAAAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAYc2V0X2JhbGFuY2VfcmF0aW9fbWluX2JwAAAAAQAAAAAAAAAUYmFsYW5jZV9yYXRpb19taW5fYnAAAAAKAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAMc3RvcF9kZXBvc2l0AAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAANc3RhcnRfZGVwb3NpdAAAAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAANc3RvcF93aXRoZHJhdwAAAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAAOc3RhcnRfd2l0aGRyYXcAAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAASc2V0X3N0b3BfYXV0aG9yaXR5AAAAAAABAAAAAAAAAA5zdG9wX2F1dGhvcml0eQAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAKc2V0X2JyaWRnZQAAAAAAAQAAAAAAAAAGYnJpZGdlAAAAAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAJc2V0X2FkbWluAAAAAAAAAQAAAAAAAAAJbmV3X2FkbWluAAAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAATc2V0X2FkbWluX2ZlZV9zaGFyZQAAAAABAAAAAAAAABJhZG1pbl9mZWVfc2hhcmVfYnAAAAAAAAoAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAAPY2xhaW1fYWRtaW5fZmVlAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAZgdmlld2AAAAAAAA5wZW5kaW5nX3Jld2FyZAAAAAAAAQAAAAAAAAAEdXNlcgAAABMAAAABAAAD6QAAAAoAAAAD","AAAAAAAAAAAAAAAIZ2V0X3Bvb2wAAAAAAAAAAQAAA+kAAAfQAAAABFBvb2wAAAAD","AAAAAAAAAAAAAAAJZ2V0X2FkbWluAAAAAAAAAAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAASZ2V0X3N0b3BfYXV0aG9yaXR5AAAAAAAAAAAAAQAAA+kAAAATAAAAAw==","AAAAAAAAAAAAAAAKZ2V0X2JyaWRnZQAAAAAAAAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAAQZ2V0X3VzZXJfZGVwb3NpdAAAAAEAAAAAAAAABHVzZXIAAAATAAAAAQAAA+kAAAfQAAAAC1VzZXJEZXBvc2l0AAAAAAM=","AAAAAAAAAAAAAAAHdXBncmFkZQAAAAABAAAAAAAAAA1uZXdfd2FzbV9oYXNoAAAAAAAD7gAAACAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAQAAAAAAAAAAAAAAD1N3YXBwZWRGcm9tVlVzZAAAAAAFAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAAA2ZlZQAAAAAKAAAAAAAAAAlyZWNpcGllbnQAAAAAAAATAAAAAAAAAAV0b2tlbgAAAAAAABMAAAAAAAAAC3Z1c2RfYW1vdW50AAAAAAo=","AAAAAQAAAAAAAAAAAAAADVN3YXBwZWRUb1ZVc2QAAAAAAAAFAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAAA2ZlZQAAAAAKAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAABXRva2VuAAAAAAAAEwAAAAAAAAALdnVzZF9hbW91bnQAAAAACg==","AAAAAQAAAAAAAAAAAAAAB0RlcG9zaXQAAAAAAgAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAR1c2VyAAAAEw==","AAAAAQAAAAAAAAAAAAAACFdpdGhkcmF3AAAAAgAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAR1c2VyAAAAEw==","AAAAAQAAAAAAAAAAAAAADlJld2FyZHNDbGFpbWVkAAAAAAACAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAABHVzZXIAAAAT","AAAAAQAAAAAAAAAAAAAABkJyaWRnZQAAAAAAAQAAAAAAAAABMAAAAAAAABM=","AAAAAgAAAAAAAAAAAAAAB0RhdGFLZXkAAAAAAQAAAAEAAAAAAAAAC1VzZXJEZXBvc2l0AAAAAAEAAAAT","AAAAAQAAAAAAAAAAAAAABFBvb2wAAAAPAAAAAAAAAAFhAAAAAAAACgAAAAAAAAAWYWNjX3Jld2FyZF9wZXJfc2hhcmVfcAAAAAAACgAAAAAAAAAQYWRtaW5fZmVlX2Ftb3VudAAAAAoAAAAAAAAAEmFkbWluX2ZlZV9zaGFyZV9icAAAAAAACgAAAAAAAAAUYmFsYW5jZV9yYXRpb19taW5fYnAAAAAKAAAAAAAAAAtjYW5fZGVwb3NpdAAAAAABAAAAAAAAAAxjYW5fd2l0aGRyYXcAAAABAAAAAAAAAAFkAAAAAAAACgAAAAAAAAAIZGVjaW1hbHMAAAAEAAAAAAAAAAxmZWVfc2hhcmVfYnAAAAAKAAAAAAAAAAhyZXNlcnZlcwAAAAoAAAAAAAAABXRva2VuAAAAAAAAEwAAAAAAAAANdG9rZW5fYmFsYW5jZQAAAAAAAAoAAAAAAAAAD3RvdGFsX2xwX2Ftb3VudAAAAAAKAAAAAAAAAA12X3VzZF9iYWxhbmNlAAAAAAAACg==","AAAAAQAAAAAAAAAAAAAAC1VzZXJEZXBvc2l0AAAAAAIAAAAAAAAACWxwX2Ftb3VudAAAAAAAAAoAAAAAAAAAC3Jld2FyZF9kZWJ0AAAAAAo=","AAAAAQAAAAAAAAAAAAAABUFkbWluAAAAAAAAAQAAAAAAAAABMAAAAAAAABM=","AAAAAQAAAAAAAAAAAAAAEEdhc09yYWNsZUFkZHJlc3MAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAAAQAAAAAAAAAAAAAACEdhc1VzYWdlAAAAAQAAAAAAAAABMAAAAAAAA+wAAAAEAAAACg==","AAAAAQAAAAAAAAAAAAAAC05hdGl2ZVRva2VuAAAAAAEAAAAAAAAAATAAAAAAAAAT","AAAAAQAAAAAAAAAAAAAADVN0b3BBdXRob3JpdHkAAAAAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAABAAAAAAAAAAAAAAABUVycm9yAAAAAAAAKAAAAAAAAAANVW5pbXBsZW1lbnRlZAAAAAAAAAAAAAAAAAAAC0luaXRpYWxpemVkAAAAAAEAAAAAAAAADVVuaW5pdGlhbGl6ZWQAAAAAAAACAAAAAAAAAAxVbmF1dGhvcml6ZWQAAAADAAAAAAAAAApJbnZhbGlkQXJnAAAAAAAEAAAAAAAAAA5JbnZhbGlkQ2hhaW5JZAAAAAAABQAAAAAAAAATSW52YWxpZE90aGVyQ2hhaW5JZAAAAAAGAAAAAAAAAA5HYXNVc2FnZU5vdFNldAAAAAAABwAAAAAAAAANQnJva2VuQWRkcmVzcwAAAAAAAAgAAAAAAAAACE5vdEZvdW5kAAAACQAAAAAAAAAYVG9rZW5JbnN1ZmZpY2llbnRCYWxhbmNlAAAACgAAAAAAAAAKQ2FzdEZhaWxlZAAAAAAACwAAAAAAAAAMVTI1Nk92ZXJmbG93AAAADAAAAAAAAAAKWmVyb0Ftb3VudAAAAAAAZwAAAAAAAAAMUG9vbE92ZXJmbG93AAAAaAAAAAAAAAALWmVyb0NoYW5nZXMAAAAAaQAAAAAAAAARUmVzZXJ2ZXNFeGhhdXN0ZWQAAAAAAABqAAAAAAAAABpJbnN1ZmZpY2llbnRSZWNlaXZlZEFtb3VudAAAAAAAawAAAAAAAAAUQmFsYW5jZVJhdGlvRXhjZWVkZWQAAABsAAAAAAAAAAlGb3JiaWRkZW4AAAAAAABtAAAAAAAAABlVbmF1dGhvcml6ZWRTdG9wQXV0aG9yaXR5AAAAAAAAywAAAAAAAAAOU3dhcFByb2hpYml0ZWQAAAAAAMwAAAAAAAAAEkFtb3VudFRvb0xvd0ZvckZlZQAAAAAAzQAAAAAAAAAWQnJpZGdlVG9UaGVaZXJvQWRkcmVzcwAAAAAAzgAAAAAAAAAORW1wdHlSZWNpcGllbnQAAAAAAM8AAAAAAAAAE1NvdXJjZU5vdFJlZ2lzdGVyZWQAAAAA0AAAAAAAAAAVV3JvbmdEZXN0aW5hdGlvbkNoYWluAAAAAAAA0QAAAAAAAAATVW5rbm93bkFub3RoZXJDaGFpbgAAAADSAAAAAAAAABFUb2tlbnNBbHJlYWR5U2VudAAAAAAAANMAAAAAAAAAEE1lc3NhZ2VQcm9jZXNzZWQAAADUAAAAAAAAAAxOb3RFbm91Z2hGZWUAAADWAAAAAAAAAAlOb01lc3NhZ2UAAAAAAADXAAAAAAAAAA1Ob1JlY2VpdmVQb29sAAAAAAAA2AAAAAAAAAAGTm9Qb29sAAAAAADZAAAAAAAAABNVbmtub3duQW5vdGhlclRva2VuAAAAANoAAAAAAAAAD1dyb25nQnl0ZUxlbmd0aAAAAAEsAAAAAAAAAApIYXNNZXNzYWdlAAAAAAEtAAAAAAAAABdJbnZhbGlkUHJpbWFyeVNpZ25hdHVyZQAAAAEuAAAAAAAAABlJbnZhbGlkU2Vjb25kYXJ5U2lnbmF0dXJlAAAAAAABLwAAAAAAAAARTm9HYXNEYXRhRm9yQ2hhaW4AAAAAAAGQ"]),i);this.options=i}fromJSON={initialize:this.txFromJSON,deposit:this.txFromJSON,withdraw:this.txFromJSON,swap_to_v_usd:this.txFromJSON,swap_from_v_usd:this.txFromJSON,claim_rewards:this.txFromJSON,set_fee_share:this.txFromJSON,adjust_total_lp_amount:this.txFromJSON,set_balance_ratio_min_bp:this.txFromJSON,stop_deposit:this.txFromJSON,start_deposit:this.txFromJSON,stop_withdraw:this.txFromJSON,start_withdraw:this.txFromJSON,set_stop_authority:this.txFromJSON,set_bridge:this.txFromJSON,set_admin:this.txFromJSON,set_admin_fee_share:this.txFromJSON,claim_admin_fee:this.txFromJSON,pending_reward:this.txFromJSON,get_pool:this.txFromJSON,get_admin:this.txFromJSON,get_stop_authority:this.txFromJSON,get_bridge:this.txFromJSON,get_user_deposit:this.txFromJSON,upgrade:this.txFromJSON}};var Jr=require("@stellar/stellar-sdk"),tc=Jr.rpc.Api;function xn(a){let{simulation:n,options:i}=a;if(!n)throw new Error("Soroban assembled transaction does not have simulation");if(tc.isSimulationSuccess(n))return n.result==null?void 0:i.parseResultXdr(n.result.retval);throw new Error(n.error)}function On(a){let{simulation:n}=a;if(!n)throw new Error("Soroban assembled transaction does not have simulation");return tc.isSimulationError(n)}var Ka=class extends Ne{constructor(i,o,r){super();this.nodeRpcUrlsConfig=i;this.params=o;this.api=r}chainType="SRB";P=48;async getUserBalanceInfo(i,o){let s=await this.getContract(o.poolAddress).get_user_deposit({user:i});if(On(s))throw new B;let d=xn(s);if(!d)throw new B;let c=d.unwrap();return new pe({lpAmount:c.lp_amount.toString(),rewardDebt:c.reward_debt.toString()})}async getPoolInfoFromChain(i){let r=await this.getContract(i.poolAddress).get_pool();if(On(r))throw new B;let s=xn(r);if(!s)throw new B;let d=s.unwrap();return{aValue:d.a.toString(),accRewardPerShareP:d.acc_reward_per_share_p.toString(),dValue:d.d.toString(),tokenBalance:d.token_balance.toString(),p:this.P,totalLpAmount:d.total_lp_amount.toString(),vUsdBalance:d.v_usd_balance.toString(),imbalance:be({tokenBalance:d.token_balance.toString(),vUsdBalance:d.v_usd_balance.toString()})}}async buildRawTransactionDeposit(i){return(await this.getContract(i.token.poolAddress,i.accountAddress).deposit({sender:i.accountAddress,amount:BigInt(i.amount)})).toXDR()}async buildRawTransactionWithdraw(i){return(await this.getContract(i.token.poolAddress,i.accountAddress).withdraw({sender:i.accountAddress,amount_lp:BigInt(i.amount)})).toXDR()}async buildRawTransactionClaimRewards(i){return(await this.getContract(i.token.poolAddress,i.accountAddress).claim_rewards({sender:i.accountAddress})).toXDR()}getContract(i,o){let r={publicKey:o,contractId:i,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new Qa(r)}};var Qn=ge(qt());ye();ye();Ie();function Ua(a){return a=w(a),a.startsWith(`${en}::balance::Balance<`)}var fe=class a{__StructClass=!0;static get $typeName(){return`${en}::balance::Balance`}static $numTypeParams=1;static $isPhantom=[!0];$typeName=a.$typeName;$fullTypeName;$typeArgs;$isPhantom=a.$isPhantom;value;constructor(n,i){this.$fullTypeName=D(a.$typeName,...n),this.$typeArgs=n,this.value=i.value}static reified(n){return{typeName:a.$typeName,fullTypeName:D(a.$typeName,M(n)),typeArgs:[M(n)],isPhantom:a.$isPhantom,reifiedTypeArgs:[n],fromFields:i=>a.fromFields(n,i),fromFieldsWithTypes:i=>a.fromFieldsWithTypes(n,i),fromBcs:i=>a.fromBcs(n,i),bcs:a.bcs,fromJSONField:i=>a.fromJSONField(n,i),fromJSON:i=>a.fromJSON(n,i),fromSuiParsedData:i=>a.fromSuiParsedData(n,i),fromSuiObjectData:i=>a.fromSuiObjectData(n,i),fetch:async(i,o)=>a.fetch(i,n,o),new:i=>new a([M(n)],i),kind:"StructClassReified"}}static get r(){return a.reified}static phantom(n){return ce(a.reified(n))}static get p(){return a.phantom}static get bcs(){return y.struct("Balance",{value:y.u64()})}static fromFields(n,i){return a.reified(n).new({value:O("u64",i.value)})}static fromFieldsWithTypes(n,i){if(!Ua(i.type))throw new Error("not a Balance type");return Ft(i,[n]),a.reified(n).new({value:J("u64",i.fields.value)})}static fromBcs(n,i){return a.fromFields(n,a.bcs.parse(i))}toJSONField(){return{value:this.value.toString()}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(n,i){return a.reified(n).new({value:k("u64",i.value)})}static fromJSON(n,i){if(i.$typeName!==a.$typeName)throw new Error("not a WithTwoGenerics json object");return lt(D(a.$typeName,M(n)),i.$typeArgs,[n]),a.fromJSONField(n,i)}static fromSuiParsedData(n,i){if(i.dataType!=="moveObject")throw new Error("not an object");if(!Ua(i.type))throw new Error(`object at ${i.fields.id} is not a Balance object`);return a.fromFieldsWithTypes(n,i)}static fromSuiObjectData(n,i){if(i.bcs){if(i.bcs.dataType!=="moveObject"||!Ua(i.bcs.type))throw new Error("object at is not a Balance object");let o=We(i.bcs.type).typeArgs;if(o.length!==1)throw new Error(`type argument mismatch: expected 1 type argument but got '${o.length}'`);let r=w(o[0]),s=w(M(n));if(r!==w(M(n)))throw new Error(`type argument mismatch: expected '${s}' but got '${r}'`);return a.fromBcs(n,(0,K.fromB64)(i.bcs.bcsBytes))}if(i.content)return a.fromSuiParsedData(n,i.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(n,i,o){let r=await n.getObject({id:o,options:{showBcs:!0}});if(r.error)throw new Error(`error fetching Balance object at id ${o}: ${r.error.code}`);if(r.data?.bcs?.dataType!=="moveObject"||!Ua(r.data.bcs.type))throw new Error(`object at id ${o} is not a Balance object`);return a.fromSuiObjectData(i,r.data)}};var xr=ge(qt());ye();var kr=ge(qt());Ie();function Da(a){return a=w(a),a.startsWith(`${kr.PKG_V1}::pool_rewards::PoolRewards<`)}var In=class a{__StructClass=!0;static get $typeName(){return`${kr.PKG_V1}::pool_rewards::PoolRewards`}static $numTypeParams=1;static $isPhantom=[!0];$typeName=a.$typeName;$fullTypeName;$typeArgs;$isPhantom=a.$isPhantom;accRewardPerShareP;adminFeeShareBp;adminFee;rewards;lpSupply;constructor(n,i){this.$fullTypeName=D(a.$typeName,...n),this.$typeArgs=n,this.accRewardPerShareP=i.accRewardPerShareP,this.adminFeeShareBp=i.adminFeeShareBp,this.adminFee=i.adminFee,this.rewards=i.rewards,this.lpSupply=i.lpSupply}static reified(n){return{typeName:a.$typeName,fullTypeName:D(a.$typeName,M(n)),typeArgs:[M(n)],isPhantom:a.$isPhantom,reifiedTypeArgs:[n],fromFields:i=>a.fromFields(n,i),fromFieldsWithTypes:i=>a.fromFieldsWithTypes(n,i),fromBcs:i=>a.fromBcs(n,i),bcs:a.bcs,fromJSONField:i=>a.fromJSONField(n,i),fromJSON:i=>a.fromJSON(n,i),fromSuiParsedData:i=>a.fromSuiParsedData(n,i),fromSuiObjectData:i=>a.fromSuiObjectData(n,i),fetch:async(i,o)=>a.fetch(i,n,o),new:i=>new a([M(n)],i),kind:"StructClassReified"}}static get r(){return a.reified}static phantom(n){return ce(a.reified(n))}static get p(){return a.phantom}static get bcs(){return y.struct("PoolRewards",{acc_reward_per_share_p:y.u128(),admin_fee_share_bp:y.u64(),admin_fee:fe.bcs,rewards:fe.bcs,lp_supply:y.u64()})}static fromFields(n,i){return a.reified(n).new({accRewardPerShareP:O("u128",i.acc_reward_per_share_p),adminFeeShareBp:O("u64",i.admin_fee_share_bp),adminFee:O(fe.reified(n),i.admin_fee),rewards:O(fe.reified(n),i.rewards),lpSupply:O("u64",i.lp_supply)})}static fromFieldsWithTypes(n,i){if(!Da(i.type))throw new Error("not a PoolRewards type");return Ft(i,[n]),a.reified(n).new({accRewardPerShareP:J("u128",i.fields.acc_reward_per_share_p),adminFeeShareBp:J("u64",i.fields.admin_fee_share_bp),adminFee:J(fe.reified(n),i.fields.admin_fee),rewards:J(fe.reified(n),i.fields.rewards),lpSupply:J("u64",i.fields.lp_supply)})}static fromBcs(n,i){return a.fromFields(n,a.bcs.parse(i))}toJSONField(){return{accRewardPerShareP:this.accRewardPerShareP.toString(),adminFeeShareBp:this.adminFeeShareBp.toString(),adminFee:this.adminFee.toJSONField(),rewards:this.rewards.toJSONField(),lpSupply:this.lpSupply.toString()}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(n,i){return a.reified(n).new({accRewardPerShareP:k("u128",i.accRewardPerShareP),adminFeeShareBp:k("u64",i.adminFeeShareBp),adminFee:k(fe.reified(n),i.adminFee),rewards:k(fe.reified(n),i.rewards),lpSupply:k("u64",i.lpSupply)})}static fromJSON(n,i){if(i.$typeName!==a.$typeName)throw new Error("not a WithTwoGenerics json object");return lt(D(a.$typeName,M(n)),i.$typeArgs,[n]),a.fromJSONField(n,i)}static fromSuiParsedData(n,i){if(i.dataType!=="moveObject")throw new Error("not an object");if(!Da(i.type))throw new Error(`object at ${i.fields.id} is not a PoolRewards object`);return a.fromFieldsWithTypes(n,i)}static fromSuiObjectData(n,i){if(i.bcs){if(i.bcs.dataType!=="moveObject"||!Da(i.bcs.type))throw new Error("object at is not a PoolRewards object");let o=We(i.bcs.type).typeArgs;if(o.length!==1)throw new Error(`type argument mismatch: expected 1 type argument but got '${o.length}'`);let r=w(o[0]),s=w(M(n));if(r!==w(M(n)))throw new Error(`type argument mismatch: expected '${s}' but got '${r}'`);return a.fromBcs(n,(0,K.fromB64)(i.bcs.bcsBytes))}if(i.content)return a.fromSuiParsedData(n,i.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(n,i,o){let r=await n.getObject({id:o,options:{showBcs:!0}});if(r.error)throw new Error(`error fetching PoolRewards object at id ${o}: ${r.error.code}`);if(r.data?.bcs?.dataType!=="moveObject"||!Da(r.data.bcs.type))throw new Error(`object at id ${o} is not a PoolRewards object`);return a.fromSuiObjectData(i,r.data)}};ye();var zr=ge(qt());Ie();function Ea(a){return a=w(a),a.startsWith(`${zr.PKG_V1}::pool_state::PoolState<`)}var yn=class a{__StructClass=!0;static get $typeName(){return`${zr.PKG_V1}::pool_state::PoolState`}static $numTypeParams=1;static $isPhantom=[!0];$typeName=a.$typeName;$fullTypeName;$typeArgs;$isPhantom=a.$isPhantom;tokenBalance;vusdBalance;d;a;balanceRatioMinBp;constructor(n,i){this.$fullTypeName=D(a.$typeName,...n),this.$typeArgs=n,this.tokenBalance=i.tokenBalance,this.vusdBalance=i.vusdBalance,this.d=i.d,this.a=i.a,this.balanceRatioMinBp=i.balanceRatioMinBp}static reified(n){return{typeName:a.$typeName,fullTypeName:D(a.$typeName,M(n)),typeArgs:[M(n)],isPhantom:a.$isPhantom,reifiedTypeArgs:[n],fromFields:i=>a.fromFields(n,i),fromFieldsWithTypes:i=>a.fromFieldsWithTypes(n,i),fromBcs:i=>a.fromBcs(n,i),bcs:a.bcs,fromJSONField:i=>a.fromJSONField(n,i),fromJSON:i=>a.fromJSON(n,i),fromSuiParsedData:i=>a.fromSuiParsedData(n,i),fromSuiObjectData:i=>a.fromSuiObjectData(n,i),fetch:async(i,o)=>a.fetch(i,n,o),new:i=>new a([M(n)],i),kind:"StructClassReified"}}static get r(){return a.reified}static phantom(n){return ce(a.reified(n))}static get p(){return a.phantom}static get bcs(){return y.struct("PoolState",{token_balance:y.u64(),vusd_balance:y.u64(),d:y.u64(),a:y.u64(),balance_ratio_min_bp:y.u64()})}static fromFields(n,i){return a.reified(n).new({tokenBalance:O("u64",i.token_balance),vusdBalance:O("u64",i.vusd_balance),d:O("u64",i.d),a:O("u64",i.a),balanceRatioMinBp:O("u64",i.balance_ratio_min_bp)})}static fromFieldsWithTypes(n,i){if(!Ea(i.type))throw new Error("not a PoolState type");return Ft(i,[n]),a.reified(n).new({tokenBalance:J("u64",i.fields.token_balance),vusdBalance:J("u64",i.fields.vusd_balance),d:J("u64",i.fields.d),a:J("u64",i.fields.a),balanceRatioMinBp:J("u64",i.fields.balance_ratio_min_bp)})}static fromBcs(n,i){return a.fromFields(n,a.bcs.parse(i))}toJSONField(){return{tokenBalance:this.tokenBalance.toString(),vusdBalance:this.vusdBalance.toString(),d:this.d.toString(),a:this.a.toString(),balanceRatioMinBp:this.balanceRatioMinBp.toString()}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(n,i){return a.reified(n).new({tokenBalance:k("u64",i.tokenBalance),vusdBalance:k("u64",i.vusdBalance),d:k("u64",i.d),a:k("u64",i.a),balanceRatioMinBp:k("u64",i.balanceRatioMinBp)})}static fromJSON(n,i){if(i.$typeName!==a.$typeName)throw new Error("not a WithTwoGenerics json object");return lt(D(a.$typeName,M(n)),i.$typeArgs,[n]),a.fromJSONField(n,i)}static fromSuiParsedData(n,i){if(i.dataType!=="moveObject")throw new Error("not an object");if(!Ea(i.type))throw new Error(`object at ${i.fields.id} is not a PoolState object`);return a.fromFieldsWithTypes(n,i)}static fromSuiObjectData(n,i){if(i.bcs){if(i.bcs.dataType!=="moveObject"||!Ea(i.bcs.type))throw new Error("object at is not a PoolState object");let o=We(i.bcs.type).typeArgs;if(o.length!==1)throw new Error(`type argument mismatch: expected 1 type argument but got '${o.length}'`);let r=w(o[0]),s=w(M(n));if(r!==w(M(n)))throw new Error(`type argument mismatch: expected '${s}' but got '${r}'`);return a.fromBcs(n,(0,K.fromB64)(i.bcs.bcsBytes))}if(i.content)return a.fromSuiParsedData(n,i.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(n,i,o){let r=await n.getObject({id:o,options:{showBcs:!0}});if(r.error)throw new Error(`error fetching PoolState object at id ${o}: ${r.error.code}`);if(r.data?.bcs?.dataType!=="moveObject"||!Ea(r.data.bcs.type))throw new Error(`object at id ${o} is not a PoolState object`);return a.fromSuiObjectData(i,r.data)}};Ie();function _a(a){return a=w(a),a.startsWith(`${xr.PKG_V1}::pool::Pool<`)}var $a=class a{__StructClass=!0;static get $typeName(){return`${xr.PKG_V1}::pool::Pool`}static $numTypeParams=1;static $isPhantom=[!0];$typeName=a.$typeName;$fullTypeName;$typeArgs;$isPhantom=a.$isPhantom;id;state;rewards;feeShareBp;canDeposit;canWithdraw;decimals;balance;constructor(n,i){this.$fullTypeName=D(a.$typeName,...n),this.$typeArgs=n,this.id=i.id,this.state=i.state,this.rewards=i.rewards,this.feeShareBp=i.feeShareBp,this.canDeposit=i.canDeposit,this.canWithdraw=i.canWithdraw,this.decimals=i.decimals,this.balance=i.balance}static reified(n){return{typeName:a.$typeName,fullTypeName:D(a.$typeName,M(n)),typeArgs:[M(n)],isPhantom:a.$isPhantom,reifiedTypeArgs:[n],fromFields:i=>a.fromFields(n,i),fromFieldsWithTypes:i=>a.fromFieldsWithTypes(n,i),fromBcs:i=>a.fromBcs(n,i),bcs:a.bcs,fromJSONField:i=>a.fromJSONField(n,i),fromJSON:i=>a.fromJSON(n,i),fromSuiParsedData:i=>a.fromSuiParsedData(n,i),fromSuiObjectData:i=>a.fromSuiObjectData(n,i),fetch:async(i,o)=>a.fetch(i,n,o),new:i=>new a([M(n)],i),kind:"StructClassReified"}}static get r(){return a.reified}static phantom(n){return ce(a.reified(n))}static get p(){return a.phantom}static get bcs(){return y.struct("Pool",{id:qe.bcs,state:yn.bcs,rewards:In.bcs,fee_share_bp:y.u64(),can_deposit:y.bool(),can_withdraw:y.bool(),decimals:y.u8(),balance:fe.bcs})}static fromFields(n,i){return a.reified(n).new({id:O(qe.reified(),i.id),state:O(yn.reified(n),i.state),rewards:O(In.reified(n),i.rewards),feeShareBp:O("u64",i.fee_share_bp),canDeposit:O("bool",i.can_deposit),canWithdraw:O("bool",i.can_withdraw),decimals:O("u8",i.decimals),balance:O(fe.reified(n),i.balance)})}static fromFieldsWithTypes(n,i){if(!_a(i.type))throw new Error("not a Pool type");return Ft(i,[n]),a.reified(n).new({id:J(qe.reified(),i.fields.id),state:J(yn.reified(n),i.fields.state),rewards:J(In.reified(n),i.fields.rewards),feeShareBp:J("u64",i.fields.fee_share_bp),canDeposit:J("bool",i.fields.can_deposit),canWithdraw:J("bool",i.fields.can_withdraw),decimals:J("u8",i.fields.decimals),balance:J(fe.reified(n),i.fields.balance)})}static fromBcs(n,i){return a.fromFields(n,a.bcs.parse(i))}toJSONField(){return{id:this.id,state:this.state.toJSONField(),rewards:this.rewards.toJSONField(),feeShareBp:this.feeShareBp.toString(),canDeposit:this.canDeposit,canWithdraw:this.canWithdraw,decimals:this.decimals,balance:this.balance.toJSONField()}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(n,i){return a.reified(n).new({id:k(qe.reified(),i.id),state:k(yn.reified(n),i.state),rewards:k(In.reified(n),i.rewards),feeShareBp:k("u64",i.feeShareBp),canDeposit:k("bool",i.canDeposit),canWithdraw:k("bool",i.canWithdraw),decimals:k("u8",i.decimals),balance:k(fe.reified(n),i.balance)})}static fromJSON(n,i){if(i.$typeName!==a.$typeName)throw new Error("not a WithTwoGenerics json object");return lt(D(a.$typeName,M(n)),i.$typeArgs,[n]),a.fromJSONField(n,i)}static fromSuiParsedData(n,i){if(i.dataType!=="moveObject")throw new Error("not an object");if(!_a(i.type))throw new Error(`object at ${i.fields.id} is not a Pool object`);return a.fromFieldsWithTypes(n,i)}static fromSuiObjectData(n,i){if(i.bcs){if(i.bcs.dataType!=="moveObject"||!_a(i.bcs.type))throw new Error("object at is not a Pool object");let o=We(i.bcs.type).typeArgs;if(o.length!==1)throw new Error(`type argument mismatch: expected 1 type argument but got '${o.length}'`);let r=w(o[0]),s=w(M(n));if(r!==w(M(n)))throw new Error(`type argument mismatch: expected '${s}' but got '${r}'`);return a.fromBcs(n,(0,K.fromB64)(i.bcs.bcsBytes))}if(i.content)return a.fromSuiParsedData(n,i.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(n,i,o){let r=await n.getObject({id:o,options:{showBcs:!0}});if(r.error)throw new Error(`error fetching Pool object at id ${o}: ${r.error.code}`);if(r.data?.bcs?.dataType!=="moveObject"||!_a(r.data.bcs.type))throw new Error(`object at id ${o} is not a Pool object`);return a.fromSuiObjectData(i,r.data)}};ye();var Or=ge(qt());Ie();function qa(a){return a=w(a),a.startsWith(`${Or.PKG_V1}::user_deposit::UserDeposit<`)}var eo=class a{__StructClass=!0;static get $typeName(){return`${Or.PKG_V1}::user_deposit::UserDeposit`}static $numTypeParams=1;static $isPhantom=[!0];$typeName=a.$typeName;$fullTypeName;$typeArgs;$isPhantom=a.$isPhantom;id;lpAmount;rewardDebt;constructor(n,i){this.$fullTypeName=D(a.$typeName,...n),this.$typeArgs=n,this.id=i.id,this.lpAmount=i.lpAmount,this.rewardDebt=i.rewardDebt}static reified(n){return{typeName:a.$typeName,fullTypeName:D(a.$typeName,M(n)),typeArgs:[M(n)],isPhantom:a.$isPhantom,reifiedTypeArgs:[n],fromFields:i=>a.fromFields(n,i),fromFieldsWithTypes:i=>a.fromFieldsWithTypes(n,i),fromBcs:i=>a.fromBcs(n,i),bcs:a.bcs,fromJSONField:i=>a.fromJSONField(n,i),fromJSON:i=>a.fromJSON(n,i),fromSuiParsedData:i=>a.fromSuiParsedData(n,i),fromSuiObjectData:i=>a.fromSuiObjectData(n,i),fetch:async(i,o)=>a.fetch(i,n,o),new:i=>new a([M(n)],i),kind:"StructClassReified"}}static get r(){return a.reified}static phantom(n){return ce(a.reified(n))}static get p(){return a.phantom}static get bcs(){return y.struct("UserDeposit",{id:qe.bcs,lp_amount:y.u64(),reward_debt:y.u64()})}static fromFields(n,i){return a.reified(n).new({id:O(qe.reified(),i.id),lpAmount:O("u64",i.lp_amount),rewardDebt:O("u64",i.reward_debt)})}static fromFieldsWithTypes(n,i){if(!qa(i.type))throw new Error("not a UserDeposit type");return Ft(i,[n]),a.reified(n).new({id:J(qe.reified(),i.fields.id),lpAmount:J("u64",i.fields.lp_amount),rewardDebt:J("u64",i.fields.reward_debt)})}static fromBcs(n,i){return a.fromFields(n,a.bcs.parse(i))}toJSONField(){return{id:this.id,lpAmount:this.lpAmount.toString(),rewardDebt:this.rewardDebt.toString()}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(n,i){return a.reified(n).new({id:k(qe.reified(),i.id),lpAmount:k("u64",i.lpAmount),rewardDebt:k("u64",i.rewardDebt)})}static fromJSON(n,i){if(i.$typeName!==a.$typeName)throw new Error("not a WithTwoGenerics json object");return lt(D(a.$typeName,M(n)),i.$typeArgs,[n]),a.fromJSONField(n,i)}static fromSuiParsedData(n,i){if(i.dataType!=="moveObject")throw new Error("not an object");if(!qa(i.type))throw new Error(`object at ${i.fields.id} is not a UserDeposit object`);return a.fromFieldsWithTypes(n,i)}static fromSuiObjectData(n,i){if(i.bcs){if(i.bcs.dataType!=="moveObject"||!qa(i.bcs.type))throw new Error("object at is not a UserDeposit object");let o=We(i.bcs.type).typeArgs;if(o.length!==1)throw new Error(`type argument mismatch: expected 1 type argument but got '${o.length}'`);let r=w(o[0]),s=w(M(n));if(r!==w(M(n)))throw new Error(`type argument mismatch: expected '${s}' but got '${r}'`);return a.fromBcs(n,(0,K.fromB64)(i.bcs.bcsBytes))}if(i.content)return a.fromSuiParsedData(n,i.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(n,i,o){let r=await n.getObject({id:o,options:{showBcs:!0}});if(r.error)throw new Error(`error fetching UserDeposit object at id ${o}: ${r.error.code}`);if(r.data?.bcs?.dataType!=="moveObject"||!qa(r.data.bcs.type))throw new Error(`object at id ${o} is not a UserDeposit object`);return a.fromSuiObjectData(i,r.data)}};function ic(a,n,i){if(n.length===0||!n[0])return[];let o=n[0],r=a.reduce((c,A)=>c+BigInt(A),BigInt(0)),s=BigInt(o.balance),d=[];for(let c of n.slice(1)){if(s>r)return nc(i,o,d,a);s+=BigInt(c.balance),d.push(c)}return s>=r?nc(i,o,d,a):[]}function nc(a,n,i,o){let r=o.map(s=>a.pure.u64(s));return i.length>0&&a.mergeCoins(n.coinObjectId,i.map(s=>s.coinObjectId)),a.splitCoins(n.coinObjectId,r)}var Jg="0x0000000000000000000000000000000000000000000000000000000000000000";async function ac(a,n,i){let o=await a.devInspectTransactionBlock({sender:Jg,transactionBlock:n});if(o.effects.status.status!=="success")throw new Error(`inspectionResult failed. ${JSON.stringify(o,null,2)}`);let r=o.results?.pop()?.returnValues?.pop();if(!r)throw new Error(`Something with inspectionResult went wrong. ${JSON.stringify(o,null,2)}`);let[s,d]=r;return typeof i=="object"?i.fromBcs(Uint8Array.from(s)).toJSONField():Mi(i).parse(Uint8Array.from(s))}var to=class extends Ne{constructor(i,o){super();this.suiRpcUrl=i;this.api=o;this.client=new Jt({url:i})}chainType="SUI";client;async getUserBalanceInfo(i,o){if(!o.originTokenAddress)throw new B("SUI token must contain 'originTokenAddress'");let r=o.suiAddresses;if(!r)throw new B("SUI token must contain 'suiAddresses'");(0,Qn.setAddress)(r.bridgeAddress,r.bridgeAddressOrigin);let d=(await this.fetchDeposits(i,o.originTokenAddress)).reduce((c,A)=>{if(A.data)return c.lpAmount+=BigInt(A.data.content.fields.lp_amount),c.rewardDebt+=BigInt(A.data.content.fields.reward_debt),c;throw new B("Deposits fetch failed")},{lpAmount:BigInt(0),rewardDebt:BigInt(0)});return new pe({lpAmount:d.lpAmount.toString(),rewardDebt:d.rewardDebt.toString()})}async fetchDeposits(i,o){return await Nt(r=>this.client.getOwnedObjects({owner:i,filter:{StructType:eo.phantom(ce(o)).phantomType},options:{showContent:!0},cursor:r}))}async getPoolInfoFromChain(i){let o=i.suiAddresses;if(!o)throw new B("SUI token must contain 'suiAddresses'");if((0,Qn.setAddress)(o.bridgeAddress,o.bridgeAddressOrigin),!i.originTokenAddress)throw new B("SUI token must contain 'originTokenAddress'");let r=48,s=new Gt;Xd(s,i.originTokenAddress,o.bridgeObjectAddress);let d=await ac(this.client,s,$a.reified(ce(i.originTokenAddress))),c=d.state.tokenBalance,A=d.state.vusdBalance,g=be({tokenBalance:c,vUsdBalance:A});return{dValue:d.state.d,aValue:d.state.a,totalLpAmount:d.rewards.lpSupply,vUsdBalance:A,tokenBalance:c,accRewardPerShareP:d.rewards.accRewardPerShareP,p:r,imbalance:g}}async buildRawTransactionDeposit(i){let o=i.token.suiAddresses;if(!o)throw new B("SUI token must contain 'suiAddresses'");if((0,Qn.setAddress)(o.bridgeAddress,o.bridgeAddressOrigin),!i.token.originTokenAddress)throw new B("SUI token must contain 'originTokenAddress'");let r=await Nt(m=>this.client.getCoins({owner:i.accountAddress,coinType:i.token.originTokenAddress,cursor:m}));if(r.length===0||!r[0])throw new ht("No coins to deposit");let s=r[0],d=new Gt;d.setSender(i.accountAddress);let{depositObj:c,isNewDeposit:A}=await this.getDepositObject(i.accountAddress,i.token.originTokenAddress,d),[g]=ic([i.amount],r,d);if(!g)throw new ht("No coins to deposit");if(!i.token.originTokenAddress)throw new B("SUI token must contain 'originTokenAddress'");let l=wd(d,i.token.originTokenAddress,{bridge:o.bridgeObjectAddress,userDeposit:c,coin:g});return d.mergeCoins(s.coinObjectId,[l]),A&&d.transferObjects([c],i.accountAddress),await d.toJSON({client:this.client})}async getDepositObject(i,o,r){let s=await this.fetchDeposits(i,o);if(s.length===0||!s[0]){let d=ce(o).phantomType;return{depositObj:Md(r,d),isNewDeposit:!0}}else{if(s[0].data?.objectId)return{depositObj:s[0].data.objectId,isNewDeposit:!1};throw new B("Something went wrong while deposit")}}async buildRawTransactionWithdraw(i){let o=i.token.suiAddresses;if(!o)throw new B("SUI token must contain 'suiAddresses'");if((0,Qn.setAddress)(o.bridgeAddress,o.bridgeAddressOrigin),!i.token.originTokenAddress)throw new B("SUI token must contain 'originTokenAddress'");let r=ce(i.token.originTokenAddress).phantomType,s=new Gt;s.setSender(i.accountAddress);let{depositObj:d,isNewDeposit:c}=await this.getDepositObject(i.accountAddress,i.token.originTokenAddress,s);if(c)throw new ht("No deposit found");let A=Sd(s,r,{bridge:o.bridgeObjectAddress,userDeposit:d,amountLp:BigInt(i.amount)}),g=await Nt(l=>this.client.getCoins({owner:i.accountAddress,coinType:i.token.originTokenAddress,cursor:l}));if(!A[0]||!A[1])throw new B("No rewards found");return g[0]?s.mergeCoins(g[0].coinObjectId,[A[0],A[1]]):(s.mergeCoins(A[0],[A[1]]),s.transferObjects([A[0]],i.accountAddress)),await s.toJSON({client:this.client})}async buildRawTransactionClaimRewards(i){let o=i.token.suiAddresses;if(!o)throw new B("SUI token must contain 'suiAddresses'");if((0,Qn.setAddress)(o.bridgeAddress,o.bridgeAddressOrigin),!i.token.originTokenAddress)throw new B("SUI token must contain 'originTokenAddress'");let r=ce(i.token.originTokenAddress).phantomType,s=new Gt;s.setSender(i.accountAddress);let{depositObj:d,isNewDeposit:c}=await this.getDepositObject(i.accountAddress,i.token.originTokenAddress,s);if(c)throw new ht("No deposit found");let A=Vd(s,r,{bridge:o.bridgeObjectAddress,userDeposit:d}),g=await Nt(l=>this.client.getCoins({owner:i.accountAddress,coinType:i.token.originTokenAddress,cursor:l}));return g[0]?s.mergeCoins(g[0].coinObjectId,[A]):s.transferObjects([A],i.accountAddress),await s.toJSON({client:this.client})}};var ki=require("web3"),oc=require("web3-eth-abi");var zi=class extends Ne{constructor(i,o,r){super();this.tronWeb=i;this.api=o;this.tronJsonRpc=r}chainType="TRX";P=52;async getUserBalanceInfo(i,o){let r;if(this.tronJsonRpc)try{r=await this.getUserBalanceInfoByBatch(this.tronJsonRpc,i,o)}catch{r=await this.getUserBalanceInfoPerProperty(i,o)}else r=await this.getUserBalanceInfoPerProperty(i,o);return r}async getUserBalanceInfoByBatch(i,o,r){let s=mi(r.poolAddress),d=mi(o),c=[{jsonrpc:"2.0",id:1,method:"eth_call",params:[{to:s,data:this.getFunctionAbi("userRewardDebt",d)},"latest"]},{jsonrpc:"2.0",id:2,method:"eth_call",params:[{to:s,data:this.getFunctionAbi("balanceOf",d)},"latest"]}],g=await(await fetch(i,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(c)})).json();if(Array.isArray(g)&&g.length===2){let l=m=>{let I=g.find(h=>h.id===m);if(!I||!I.result)throw new Error(`Missing or invalid result for id ${m}`);return ki.Web3.utils.toBigInt(I.result).toString()};return new pe({lpAmount:ki.Web3.utils.toBigInt(l(2)).toString(),rewardDebt:ki.Web3.utils.toBigInt(l(1)).toString()})}throw new Error("Batched HTTP call failed")}async getUserBalanceInfoPerProperty(i,o){this.tronWeb.defaultAddress.base58||this.tronWeb.setAddress(i);let r=this.getContract(o.poolAddress),s=(await r.methods.userRewardDebt(i).call()).toString(),d=(await r.methods.balanceOf(i).call()).toString();return new pe({lpAmount:d,rewardDebt:s})}async getPoolInfoFromChain(i){let o;if(this.tronJsonRpc)try{o=await this.getPoolInfoByBatch(this.tronJsonRpc,i)}catch{o=await this.getPoolInfoPerProperty(i)}else o=await this.getPoolInfoPerProperty(i);return o}async getPoolInfoByBatch(i,o){let r=mi(o.poolAddress),s=[{jsonrpc:"2.0",id:1,method:"eth_call",params:[{to:r,data:this.getFunctionAbi("a")},"latest"]},{jsonrpc:"2.0",id:2,method:"eth_call",params:[{to:r,data:this.getFunctionAbi("d")},"latest"]},{jsonrpc:"2.0",id:3,method:"eth_call",params:[{to:r,data:this.getFunctionAbi("tokenBalance")},"latest"]},{jsonrpc:"2.0",id:4,method:"eth_call",params:[{to:r,data:this.getFunctionAbi("vUsdBalance")},"latest"]},{jsonrpc:"2.0",id:5,method:"eth_call",params:[{to:r,data:this.getFunctionAbi("totalSupply")},"latest"]},{jsonrpc:"2.0",id:6,method:"eth_call",params:[{to:r,data:this.getFunctionAbi("accRewardPerShareP")},"latest"]}],c=await(await fetch(i,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(s)})).json();if(Array.isArray(c)&&c.length===6){let A=I=>{let h=c.find(W=>W.id===I);if(!h||!h.result)throw new Error(`Missing or invalid result for id ${I}`);return ki.Web3.utils.toBigInt(h.result).toString()},g=A(3),l=A(4),m=be({tokenBalance:g,vUsdBalance:l});return{aValue:A(1),dValue:A(2),tokenBalance:g,vUsdBalance:l,totalLpAmount:A(5),accRewardPerShareP:A(6),p:this.P,imbalance:m}}throw new Error("Batched pool info call failed")}async getPoolInfoPerProperty(i){this.tronWeb.defaultAddress.base58||this.tronWeb.setAddress(i.poolAddress);let o=this.getContract(i.poolAddress),[r,s,d,c,A,g]=await Promise.all([o.methods.a().call(),o.methods.d().call(),o.methods.tokenBalance().call(),o.methods.vUsdBalance().call(),o.methods.totalSupply().call(),o.methods.accRewardPerShareP().call()]),l=d.toString(),m=c.toString(),I=be({tokenBalance:l,vUsdBalance:m});return{aValue:r.toString(),dValue:s.toString(),tokenBalance:l,vUsdBalance:m,totalLpAmount:A.toString(),accRewardPerShareP:g.toString(),p:this.P,imbalance:I}}buildRawTransactionDeposit(i){let{amount:o,accountAddress:r}=i,s=[{type:"uint256",value:o}];return this.buildRawTransaction(i.token.poolAddress,"deposit(uint256)",s,"0",r)}buildRawTransactionWithdraw(i){let{amount:o,accountAddress:r}=i,s=[{type:"uint256",value:o}];return this.buildRawTransaction(i.token.poolAddress,"withdraw(uint256)",s,"0",r)}buildRawTransactionClaimRewards(i){let{accountAddress:o}=i,r=[];return this.buildRawTransaction(i.token.poolAddress,"claimRewards()",r,"0",o)}async buildRawTransaction(i,o,r,s,d){let c=await this.tronWeb.transactionBuilder.triggerSmartContract(i,o,{callValue:+s},r,d);if(!c?.result?.result)throw new B("Unknown error: "+JSON.stringify(c,null,2));return c.transaction}getContract(i){return this.tronWeb.contract(Hi.abi,i)}getFunctionAbi(i,...o){let r=Hi.abi.find(s=>s.type==="function"&&"name"in s&&s.name===i);if(!r)throw new Error(`${i} method not found in Pool ABI`);return(0,oc.encodeFunctionCall)(r,o)}};var no=class{constructor(n,i,o,r){this.api=n;this.nodeRpcUrlsConfig=i;this.params=o;this.tokenService=r;this.rawTxBuilder=new xa(n,i,this.params,r);let s=o.cachePoolInfoChainSec>0?o.cachePoolInfoChainSec*1e3:20*1e3;this.cache=new zt({defaultTtl:s})}rawTxBuilder;cache;async getAllowance(n,i){if(i){let o=n,r=i;return await this.tokenService.getAllowance({...r,spender:r.token.poolAddress},o)}else{let o=n;return await this.tokenService.getAllowance({...o,spender:o.token.poolAddress})}}async checkAllowance(n,i){if(i){let o=n,r=i;return this.tokenService.checkAllowance({...r,spender:r.token.poolAddress},o)}else{let o=n;return this.tokenService.checkAllowance({...o,spender:o.token.poolAddress})}}async approve(n,i){return this.tokenService.approve(n,{...i,spender:i.token.poolAddress})}async getAmountToBeDeposited(n,i,o){H(n),z("amount",n,i.decimals);let r=await this.getPoolInfoFromChain(i,o),{vUsdBalance:s,tokenBalance:d,aValue:c,dValue:A}=r,g=Ed(n,c,A,d,s);return S(g,3).toFixed()}async getAmountToBeWithdrawn(n,i,o,r){H(n),z("amount",n,o.decimals);let s=await this.getPoolInfoFromChain(o,r),d=_d(n),c=Je(d,o.decimals),g=(await this.getUserBalanceInfo(i,o,r)).earned(s)||"0",l=(0,rc.Big)(c).plus(g).toFixed();return S(l,o.decimals).toFixed()}async getUserBalanceInfo(n,i,o){return zn(i.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,o).getUserBalanceInfo(n,i)}async getPoolInfoFromChain(n,i){let o={chainSymbol:n.chainSymbol,poolAddress:n.poolAddress},r=this.cache.get(o);if(r)return r;{let s=await zn(n.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,i).getPoolInfoFromChain(n);return this.cache.put(o,s),this.api.cachePut({chainSymbol:n.chainSymbol,poolAddress:n.poolAddress},s),s}}};function zn(a,n,i,o,r){switch(L.getChainProperty(a).chainType){case"EVM":{if(r)return new Ji(r,n);{let s=i.getNodeRpcUrl(a),d=new Kn.Web3(s);return d.defaultReturnFormat={number:Kn.FMT_NUMBER.STR,bytes:Kn.FMT_BYTES.HEX},new Ji(d,n)}}case"TRX":{let s=i.getNodeRpcUrl(a),d=o.tronJsonRpc;if(r)return new zi(r,n,d);{let c=new sc.TronWeb({fullHost:s});return new zi(c,n,d)}}case"SOLANA":{let s=i.getNodeRpcUrl(a);return new Oa(s,n)}case"SRB":return new Ka(i,o,n);case"SUI":return new to(i.getNodeRpcUrl(a),n);case"ALG":if(r){let s=r,d=Qr.AlgorandClient.fromClients({algod:s});return new Li(d,n)}else{let s=i.getNodeRpcUrl(a),d=Qr.AlgorandClient.fromConfig({algodConfig:{server:s}});return new Li(d,n)}}}var cc=require("tronweb"),Dn=require("web3");var kg={abi:[{inputs:[{internalType:"string",name:"tokenName_",type:"string"},{internalType:"string",name:"tokenSymbol_",type:"string"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"address",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"lpAmount",type:"uint256"}],name:"Deposited",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"address",name:"token",type:"address"}],name:"DepositedRewards",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256[4]",name:"values",type:"uint256[4]"}],name:"MultiTransfer",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"address",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"Withdrawn",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[],name:"NUM_TOKENS",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"pure",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"subtractedValue",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"index",type:"uint256"},{internalType:"uint256",name:"minVirtualAmount",type:"uint256"}],name:"deposit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"depositRewards",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"index",type:"uint256"}],name:"getEstimatedAmountOnDeposit",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"index",type:"uint256"}],name:"getRewardsAmount",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"},{internalType:"uint256",name:"virtualAmount",type:"uint256"}],name:"getWithdrawProportionAmount",outputs:[{internalType:"uint256[4]",name:"",type:"uint256[4]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"",type:"uint256"}],name:"pools",outputs:[{internalType:"contract IPool",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"index",type:"uint256"},{internalType:"contract IPool",name:"pool",type:"address"}],name:"setPool",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"},{internalType:"uint256",name:"index",type:"uint256"}],name:"subBalanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"index",type:"uint256"}],name:"subDepositRewards",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"index",type:"uint256"}],name:"subTotalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"index",type:"uint256"}],name:"subTransfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"index",type:"uint256"}],name:"subTransferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"virtualAmount",type:"uint256"},{internalType:"uint256",name:"index",type:"uint256"}],name:"subWithdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"",type:"uint256"}],name:"tokens",outputs:[{internalType:"contract IERC20",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"virtualAmount",type:"uint256"}],name:"withdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}]},io=kg;var hn=class{};var xi=class extends hn{constructor(i,o){super();this.web3=i;this.api=o}chainType="EVM";async balanceOf(i){let o=(await this.getYieldContract(i.token.yieldAddress).methods.balanceOf(i.owner).call()).toString();return S(o,3).toFixed()}async getEstimatedAmountOnDeposit(i){let o=V(i.amount,i.token.decimals).toFixed(),r=(await this.getYieldContract(i.token.yieldAddress).methods.getEstimatedAmountOnDeposit(o,i.token.yieldId).call()).toString();return S(r,3).toFixed()}async getWithdrawProportionAmount(i){let o=V(i.amount,3).toFixed();return await this.getYieldContract(i.cydToken.yieldAddress).methods.getWithdrawProportionAmount(i.owner,o).call()}async buildRawTransactionDeposit(i){return Promise.resolve({...this.buildTxParams({owner:i.owner,yieldAddress:i.token.yieldAddress}),data:this.getYieldContract(i.token.yieldAddress).methods.deposit(i.amount,i.token.yieldId,i.minVirtualAmount).encodeABI()})}async buildRawTransactionWithdraw(i){return Promise.resolve({...this.buildTxParams({owner:i.owner,yieldAddress:i.token.yieldAddress}),data:this.getYieldContract(i.token.yieldAddress).methods.withdraw(i.amount).encodeABI()})}buildTxParams(i){return{from:i.owner,to:i.yieldAddress,value:"0"}}getYieldContract(i){return new this.web3.eth.Contract(io.abi,i)}};var ao=class{constructor(n,i,o,r){this.api=n;this.nodeRpcUrlsConfig=i;this.params=o;this.tokenService=r}async approve(n,i){return this.tokenService.buildRawTransactionApprove({...n,spender:n.token.yieldAddress},i)}async deposit(n,i){return H(n.amount),z("amount",n.amount,n.token.decimals),H(n.minVirtualAmount),z("minVirtualAmount",n.minVirtualAmount,3),n.amount=V(n.amount,n.token.decimals).toFixed(),n.minVirtualAmount=V(n.minVirtualAmount,3).toFixed(),Un(n.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,n.owner,i).buildRawTransactionDeposit(n)}async withdraw(n,i){return H(n.amount),z("amount",n.amount,3),n.amount=V(n.amount,3).toFixed(),Un(n.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,n.owner,i).buildRawTransactionWithdraw(n)}};var Oi=class extends hn{constructor(i,o){super();this.tronWeb=i;this.api=o}chainType="TRX";async balanceOf(i){let o=(await(await this.getContract(i.token.yieldAddress)).methods.balanceOf(i.owner).call()).toString();return S(o,3).toFixed()}async getEstimatedAmountOnDeposit(i){let o=V(i.amount,i.token.decimals).toFixed(),r=(await(await this.getContract(i.token.yieldAddress)).methods.getEstimatedAmountOnDeposit(o,i.token.yieldId).call()).toString();return S(r,3).toFixed()}async getWithdrawProportionAmount(i){let o=V(i.amount,3).toFixed();return(await(await this.getContract(i.cydToken.yieldAddress)).methods.getWithdrawProportionAmount(i.owner,o).call()).toString().split(",")}async buildRawTransactionDeposit(i){let{amount:o,owner:r,token:s,minVirtualAmount:d}=i,c=[{type:"uint256",value:o},{type:"uint256",value:s.yieldId},{type:"uint256",value:d}];return this.buildRawTransaction(i.token.yieldAddress,"deposit(uint256,uint256,uint256)",c,"0",r)}async buildRawTransactionWithdraw(i){let{amount:o,owner:r}=i,s=[{type:"uint256",value:o}];return this.buildRawTransaction(i.token.yieldAddress,"withdraw(uint256)",s,"0",r)}async buildRawTransaction(i,o,r,s,d){let c=await this.tronWeb.transactionBuilder.triggerSmartContract(i,o,{callValue:+s},r,d);if(!c?.result?.result)throw new B("Unknown error: "+JSON.stringify(c,null,2));return c.transaction}getContract(i){return this.tronWeb.contract(io.abi,i)}};function dc(a){if(!Qi(a))throw new ci("Token does not support Yield")}function Qi(a){return!!a.yieldAddress&&a.yieldId!==void 0}var oo=class{constructor(n,i,o,r){this.api=n;this.nodeRpcUrlsConfig=i;this.params=o;this.tokenService=r;this.rawTxBuilder=new ao(n,i,o,r)}rawTxBuilder;async getCYDTokens(){let n=[],i=await this.api.getChainDetailsMap("pool");return Object.values(i).forEach(o=>{if(o.yieldAddress){let r=o.tokens.find(d=>d.tokenAddress===o.yieldAddress),s=o.tokens.filter(Qi);if(s.length>0){let d=r??{allbridgeChainId:o.allbridgeChainId,apr:"",apr30d:"",apr7d:"",bridgeId:o.bridgeId,bridgeAddress:o.bridgeAddress,chainId:o.chainId,chainName:o.name,chainSymbol:o.chainSymbol,chainType:o.chainType,confirmations:o.confirmations,decimals:3,feeShare:"",lpRate:"",name:"Core Yield",poolAddress:"",symbol:"CYD",tokenAddress:o.yieldAddress,transferTime:{},txCostAmount:{maxAmount:"0",swap:"0",transfer:"0"},yieldAddress:o.yieldAddress};n.push({...d,yieldAddress:o.yieldAddress,tokens:s})}}}),n}async getAllowance(n,i){return await this.tokenService.getAllowance({...n,spender:n.token.yieldAddress},i)}async checkAllowance(n,i){return this.tokenService.checkAllowance({...n,spender:n.token.yieldAddress},i)}async balanceOf(n,i){return Un(n.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,n.owner,i).balanceOf(n)}async getEstimatedAmountOnDeposit(n,i){return H(n.amount),z("amount",n.amount,n.token.decimals),Un(n.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,n.token.yieldAddress,i).getEstimatedAmountOnDeposit(n)}async getWithdrawAmounts(n,i){H(n.amount),z("amount",n.amount,3);let o=await Un(n.cydToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,n.owner,i).getWithdrawProportionAmount(n);return n.cydToken.tokens.filter(r=>o[r.yieldId]!==void 0).map(r=>({amount:S(o[r.yieldId],r.decimals).toFixed(),token:r}))}};function Un(a,n,i,o,r){switch(L.getChainProperty(a).chainType){case"EVM":{if(r)return new xi(r,n);{let s=i.getNodeRpcUrl(a),d=new Dn.Web3(s);return d.defaultReturnFormat={number:Dn.FMT_NUMBER.STR,bytes:Dn.FMT_BYTES.HEX},new xi(d,n)}}case"TRX":{if(r)return new Oi(r,n);{let s=i.getNodeRpcUrl(a),d=new cc.TronWeb({fullHost:s});return d.setAddress(o),new Oi(d,n)}}case"SOLANA":throw new _;case"SRB":throw new _;case"SUI":throw new _;case"ALG":throw new _}}var Ae=require("big.js");function lc(a,n,i){let o=zg(a,{decimals:n.decimals,feeShare:n.feeShare},n.poolInfo),r=xg(o.amountIncludingCommissionInSystemPrecision,{decimals:i.decimals,feeShare:i.feeShare},i.poolInfo);return{swapToVUsdCalcResult:o,swapFromVUsdCalcResult:r}}function uc(a,n,i){let o=Og(a,{decimals:i.decimals,feeShare:i.feeShare},i.poolInfo),r=Qg(o.amountIncludingCommissionInSystemPrecision,{decimals:n.decimals,feeShare:n.feeShare},n.poolInfo);return{swapToVUsdCalcResult:o,swapFromVUsdCalcResult:r}}function zg(a,{feeShare:n,decimals:i},o){let r=(0,Ae.Big)(a),s=r.times(n),d=r.minus(s);return{bridgeFeeInTokenPrecision:s.round().toFixed(),amountIncludingCommissionInSystemPrecision:Ac(on(d,i),o),amountExcludingCommissionInSystemPrecision:Ac(on(r,i),o)}}function Ac(a,n){if(a.eq(0))return"0";let i=(0,Ae.Big)(n.tokenBalance).plus(a),o=Yt(i.toFixed(),n.aValue,n.dValue);return(0,Ae.Big)(n.vUsdBalance).minus(o).round().toFixed()}function xg(a,{feeShare:n,decimals:i},o){if((0,Ae.Big)(a).eq(0))return{bridgeFeeInTokenPrecision:"0",amountIncludingCommissionInTokenPrecision:"0",amountExcludingCommissionInTokenPrecision:"0"};let s=(0,Ae.Big)(a).plus(o.vUsdBalance),d=Yt(s,o.aValue,o.dValue),c=Je((0,Ae.Big)(o.tokenBalance).minus(d),i),A=(0,Ae.Big)(c).times(n),g=(0,Ae.Big)(c).minus(A).round();return{bridgeFeeInTokenPrecision:A.round().toFixed(),amountIncludingCommissionInTokenPrecision:g.toFixed(),amountExcludingCommissionInTokenPrecision:c.toFixed()}}function Og(a,{feeShare:n,decimals:i},o){let r=(0,Ae.Big)(n).div((0,Ae.Big)(1).minus(n)),s=(0,Ae.Big)(a).times(r),d=(0,Ae.Big)(a).plus(s);return{bridgeFeeInTokenPrecision:s.round().toFixed(),amountIncludingCommissionInSystemPrecision:gc(on(d,i),o),amountExcludingCommissionInSystemPrecision:gc(on(a,i),o)}}function gc(a,n){let i=(0,Ae.Big)(n.tokenBalance).minus(a),o=Yt(i.toFixed(),n.aValue,n.dValue);return(0,Ae.Big)(o).minus(n.vUsdBalance).round().toFixed()}function Qg(a,{feeShare:n,decimals:i},o){if((0,Ae.Big)(a).eq(0))return{bridgeFeeInTokenPrecision:"0",amountIncludingCommissionInTokenPrecision:"0",amountExcludingCommissionInTokenPrecision:"0"};let r=(0,Ae.Big)(o.vUsdBalance).minus(a),s=Yt(r.toFixed(),o.aValue,o.dValue),d=(0,Ae.Big)(s).minus(o.tokenBalance),c=Je(d.toFixed(),i),A=(0,Ae.Big)(n).div((0,Ae.Big)(1).minus(n)),g=(0,Ae.Big)(c).times(A),l=(0,Ae.Big)(c).plus(g);return{bridgeFeeInTokenPrecision:g.round().toFixed(),amountIncludingCommissionInTokenPrecision:l.round().toFixed(),amountExcludingCommissionInTokenPrecision:c.toFixed()}}var Ot=require("big.js");function mc(a,n,i,o,r){let s=Bt(a,n,i),d=Je(s,n.decimals),c=ui(s,o,r),A=(0,Ot.Big)(a).times(n.feeShare),g=(0,Ot.Big)(c).div((0,Ot.Big)(1).minus(o.feeShare)).minus(c);return{sourceLPSwap:{fee:S(A,n.decimals).neg().round(n.decimals,Ot.Big.roundUp).toFixed(),swap:S((0,Ot.Big)(a).minus(d).minus(A),n.decimals).neg().round(n.decimals,Ot.Big.roundUp).toFixed()},destLPSwap:{fee:S(g,o.decimals).neg().round(o.decimals,Ot.Big.roundUp).toFixed(),swap:S(Je(s,o.decimals).minus(c).minus(g),o.decimals).neg().round(o.decimals,Ot.Big.roundUp).toFixed()}}}var Kr=require("@algorandfoundation/algokit-utils"),so=require("algosdk");var ro=class{constructor(n){this.nodeRpcUrlsConfig=n}async checkAssetOptIn(n,i,o){let r=this.getAlgorand(o);typeof n=="string"&&(n=BigInt(n));let d=(await r.account.getInformation(i)).assets;return d?d.find(({assetId:A})=>A===n)!==void 0:!1}async checkAppOptIn(n,i,o){let r=this.getAlgorand(o);typeof n=="string"&&(n=BigInt(n));let d=(await r.account.getInformation(i)).appsLocalState;return d?d.find(({id:A})=>A===n)!==void 0:!1}async buildRawTransactionAssetOptIn(n,i,o){let r=this.getAlgorand(o);typeof n=="string"&&(n=BigInt(n));let s=await r.createTransaction.assetOptIn({assetId:n,sender:i});return Rt(s)}async buildRawTransactionAppOptIn(n,i,o){let r=this.getAlgorand(o);typeof n=="string"&&(n=BigInt(n));let s=r.newGroup(),d=r.account.random();s.addAppCallMethodCall({appId:n,method:new so.ABIMethod({name:"optInToApplication",desc:void 0,args:[],returns:{type:"void",desc:void 0},events:[],readonly:!1}),args:[],sender:i,signer:d,onComplete:so.OnApplicationComplete.OptInOC});let{transactions:c}=await s.buildTransactions();return Rt(...c)}getAlgorand(n){if(n)return Kr.AlgorandClient.fromClients({algod:n});{let i=this.nodeRpcUrlsConfig.getNodeRpcUrl("ALG");return Kr.AlgorandClient.fromConfig({algodConfig:{server:i}})}}};var hc=ge(require("axios"));var pc="3.26.0-alpha.3";function Cc(a){return Object.entries(a).reduce((n,i)=>{let o=i[0],r=i[1],s=_g(o,r);return s&&(n[o]=s),n},{})}function bc(a){let n={};for(let[i,o]of Object.entries(a)){let r=i;for(let s of o.tokens){let d=En({chainSymbol:r,poolAddress:s.poolAddress}),c=be(s.poolInfo);n[d]={...s.poolInfo,imbalance:c}}}return n}function Kg(a,n){let{name:i,...o}=a,{poolInfo:r,...s}=n;return{...s,...o,chainName:i}}function Ug(a){switch(a){case"allbridge":return 1;case"wormhole":return 2;case"cctp":return 3;case"cctpV2":return 4;case"oft":return 5}}function Dg(a){return Object.entries(a).reduce((n,[i,o])=>(n[i]=Eg(o),n),{})}function Eg(a){return Object.entries(a).reduce((n,[i,o])=>{let r=Ug(i);return r&&o!=null&&(n[r]=o),n},{})}function _g(a,n){let i=L.getChainsProperties()[a];if(!i)return null;let o={...i,allbridgeChainId:n.chainId,bridgeId:n.bridgeId,bridgeAddress:n.bridgeAddress,oftBridgeAddress:n.oftBridgeAddress,yieldAddress:n.yieldAddress,transferTime:Dg(n.transferTime),txCostAmount:n.txCostAmount,confirmations:n.confirmations,suiAddresses:n.suiAddresses};return{...o,tokens:n.tokens.map(r=>Kg(o,r))}}function En(a){return a.chainSymbol+"_"+a.poolAddress}function Ic(a){let n=[];for(let[i,o]of Object.entries(a)){let r=i;for(let s of o.tokens)n.push({chainSymbol:r,poolAddress:s.poolAddress})}return n}function yc(a){let n={};for(let[i,o]of Object.entries(a)){let r=i;for(let[s,d]of Object.entries(o))d.imbalance=be(d),n[En({chainSymbol:r,poolAddress:s})]=d}return n}var _n=class{api;constructor(n){this.api=hc.default.create({baseURL:n.coreApiUrl,headers:{Accept:"application/json",...n.coreApiHeaders,"x-Sdk-Agent":"AllbridgeCoreSDK/"+pc},params:n.coreApiQueryParams})}async getTokenInfo(){let{data:n}=await this.api.get("/token-info",{params:{filter:"all"}});return{chainDetailsMap:Cc(n),poolInfoMap:bc(n)}}async getPendingInfo(){let{data:n}=await this.api.get("/pending-info");return n}async getGasBalance(n,i){let{data:o}=await this.api.get(`/check/${n}/${i}`);return o}async getTransferStatus(n,i){let{data:o}=await this.api.get(`/chain/${n}/${i}`);return o}async getReceiveTransactionCost(n){if(n.messenger===5&&!n.sourceToken)throw new oi("For OFT sourceToken required");let{data:i}=await this.api.post("/receive-fee",n,{headers:{"Content-Type":"application/json"}});return{exchangeRate:i.exchangeRate,fee:i.fee,sourceNativeTokenPrice:i.sourceNativeTokenPrice,adminFeeShareWithExtras:i.adminFeeShareWithExtras}}async getPoolInfoMap(n){let i=n instanceof Array?n:[n],{data:o}=await this.api.post("/pool-info",{pools:i},{headers:{"Content-Type":"application/json"}});return yc(o)}};var Ur=20*1e3,$g=55*1e3,$n=class{constructor(n){this.apiClient=n;this.tokenInfoCache=new zt({defaultTtl:$g}),this.receivedTransactionCache=new zt({defaultTtl:Ur}),this.pendingInfoCache=new zt({defaultTtl:Ur}),this.gasBalanceCache=new zt({defaultTtl:Ur})}tokenInfoCache;pendingInfoCache;gasBalanceCache;receivedTransactionCache;getTokenInfo(){let n="TOKEN_INFO_CACHE_KEY",i=this.tokenInfoCache.get(n);if(i)return i;let o=this.apiClient.getTokenInfo();return this.tokenInfoCache.put(n,o),o}async getGasBalance(n,i){let o=`GAS_BALANCE_${n}_${i}`,r=this.gasBalanceCache.get(o);if(r)return r;let s=this.apiClient.getGasBalance(n,i);return this.gasBalanceCache.put(o,s),s}async getPendingInfo(){let n="PENDING_INFO_CACHE_KEY",i=this.pendingInfoCache.get(n);if(i)return i;let o=this.apiClient.getPendingInfo();return this.pendingInfoCache.put(n,o),o}async getReceiveTransactionCost(n){let i=`RECEIVE_TX_COST_${n.sourceChainId}_${n.destinationChainId}_${n.messenger}${n.sourceToken?"_"+n.sourceToken:""}`,o=this.receivedTransactionCache.get(i);if(o)return o;let r=await this.apiClient.getReceiveTransactionCost(n);return this.receivedTransactionCache.put(i,r),r}async getTransferStatus(n,i){return this.apiClient.getTransferStatus(n,i)}async getPoolInfoMap(n){return this.apiClient.getPoolInfoMap(n)}};var qn=class{constructor(n){this.apiClient=n}async getChainDetailsMap(){return(await this.apiClient.getTokenInfo()).chainDetailsMap}async tokens(){let n=await this.getChainDetailsMap();return Object.values(n).flatMap(i=>i.tokens)}async getPendingInfo(){return this.apiClient.getPendingInfo()}async getGasBalance(n,i){return this.apiClient.getGasBalance(n,i)}async getChainDetailsMapAndPoolInfoMap(){return await this.apiClient.getTokenInfo()}async getTransferStatus(n,i){return await this.apiClient.getTransferStatus(n,i)}async getReceiveTransactionCost(n){return await this.apiClient.getReceiveTransactionCost(n)}async getPoolInfoMap(n){return await this.apiClient.getPoolInfoMap(n)}};var ei=class{constructor(n,i){this.client=n;this.isStaging=i.coreApiQueryParams?.staging==="true"}isStaging;async getChainDetailsMap(n){let i=await this.client.getChainDetailsMap(),o={};for(let r in i){let s=i[r];s&&(o[r]={...s,tokens:vc(s.tokens,n,this.isStaging)})}return o}async tokens(n){return vc(await this.client.tokens(),n,this.isStaging)}async getPendingInfo(){return this.client.getPendingInfo()}async getGasBalance(n,i){return this.client.getGasBalance(n,i)}async getTransferStatus(n,i){return await this.client.getTransferStatus(n,i)}async getReceiveTransactionCost(n){return await this.client.getReceiveTransactionCost(n)}cachePut(n,i){return this.client.cachePut(n,i)}getPoolInfoByKey(n){return this.client.getPoolInfoByKey(n)}refreshPoolInfo(n){return this.client.refreshPoolInfo(n)}};function vc(a,n,i){return a.filter(o=>i?!0:o.flags[n]).map(qg)}function qg(a){let{flags:n,...i}=a;return i}var el=55*1e3,ti=class{constructor(n){this.client=n;this.poolInfoCache=new Dr}poolInfoCache;async getChainDetailsMap(){return(await this.client.getChainDetailsMapAndPoolInfoMap()).chainDetailsMap}async tokens(){return await this.client.tokens()}getTransferStatus(n,i){return this.client.getTransferStatus(n,i)}getReceiveTransactionCost(n){return this.client.getReceiveTransactionCost(n)}getPendingInfo(){return this.client.getPendingInfo()}getGasBalance(n,i){return this.client.getGasBalance(n,i)}async getPoolInfoByKey(n){this.poolInfoCache.putAllIfNotExists((await this.client.getChainDetailsMapAndPoolInfoMap()).poolInfoMap);let i=this.poolInfoCache.get(n);if(i)return i;{let o=await this.client.getPoolInfoMap(n);this.poolInfoCache.putAll(o);let r=o[En(n)];if(r)return r;throw new B("Cannot find pool info for "+n.poolAddress+" on chain "+n.chainSymbol)}}async refreshPoolInfo(n){let i;if(n)this.poolInfoCache.putAllIfNotExists((await this.client.getChainDetailsMapAndPoolInfoMap()).poolInfoMap),i=await this.client.getPoolInfoMap(n);else{let o=await this.client.getChainDetailsMapAndPoolInfoMap();i=await this.client.getPoolInfoMap(Ic(o.chainDetailsMap))}this.poolInfoCache.putAll(i)}cachePut(n,i){this.poolInfoCache.put(En(n),i)}},Dr=class{cache;constructor(){this.cache=new zt({defaultTtl:el})}putAll(n){for(let[i,o]of Object.entries(n))this.cache.put(i,o)}putAllIfNotExists(n){for(let[i,o]of Object.entries(n))this.cache.get(i)||this.cache.put(i,o)}put(n,i){this.cache.put(n,i)}get(n){let i=En(n);return this.cache.get(i)}};var $r=require("@algorandfoundation/algokit-utils"),Bc=require("big.js"),Yc=require("tronweb"),Wc=require("web3");var Er=require("big.js"),Te=class{async checkAllowance(n){let i=await this.getAllowance(n);return(0,Er.Big)(i).gte((0,Er.Big)(n.amount))}};var Ki=class extends Te{constructor(i,o){super();this.algorand=i;this.api=o}chainType="SUI";approve(i){throw new _}buildRawTransactionApprove(i){throw new _}getAllowance(i){throw new _}async getNativeTokenBalance(i){let{account:o}=i;return(await this.algorand.account.getInformation(o)).balance.microAlgo.toString()}async getTokenBalance(i){let{account:o,token:r}=i;try{return(await this.algorand.asset.getAccountInformation(o,BigInt(r.tokenAddress))).balance.toString()}catch(s){if(s instanceof Error)return s.message.includes("account asset info not found"),"0";throw s}}};var tl={abi:[{inputs:[{internalType:"string",name:"name_",type:"string"},{internalType:"string",name:"symbol_",type:"string"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"subtractedValue",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"}]},co=tl;var nl="0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",il="0xdac17f958d2ee523a2206206994597c13d831ec7",al=1e5,Ui=class extends Te{constructor(i,o){super();this.web3=i;this.api=o}chainType="EVM";getAllowance(i){let o=i.token.tokenAddress,r=i.owner,s=i.spender;return this.getAllowanceByTokenAddress(o,r,s)}getAllowanceByTokenAddress(i,o,r){return this.getERC20Contract(i).methods.allowance(o,r).call()}async getTokenBalance(i){return await this.getERC20Contract(i.token.tokenAddress).methods.balanceOf(i.account).call()}async getNativeTokenBalance(i){return(await this.web3.eth.getBalance(i.account)).toString()}async approve(i){if(this.isUsdt(i.tokenAddress)&&await this.getAllowanceByTokenAddress(i.tokenAddress,i.owner,i.spender)!=="0"){let s=await this.buildRawTransactionApprove({...i,amount:"0"});await this.sendRawTransaction(s,i.chainSymbol)}let o=await this.buildRawTransactionApprove(i);return await this.sendRawTransaction(o,i.chainSymbol)}isUsdt(i){return i.toLowerCase()===il}buildRawTransactionApprove(i){let{tokenAddress:o,spender:r,owner:s,amount:d}=i,A=this.getERC20Contract(o).methods.approve(r,d==null?nl:Pa(d));return Promise.resolve({from:s,to:o,value:"0",data:A.encodeABI()})}async sendRawTransaction(i,o){let r=i,s={maxPriorityFeePerGas:void 0,maxFeePerGas:void 0};o==="POL"?r.gas=al:r.gas=await this.web3.eth.estimateGas(i);let{transactionHash:d}=await this.web3.eth.sendTransaction({...r,...s});return{txId:d.toString()}}getERC20Contract(i){return new this.web3.eth.Contract(co.abi,i)}};var Rc=require("@project-serum/anchor"),vn=require("@solana/web3.js");var Ao=class extends Te{constructor(i,o){super();this.solanaRpcUrl=i;this.api=o}chainType="SOLANA";approve(i){throw new _}buildRawTransactionApprove(i){throw new _}buildAnchorProvider(i){let o=new vn.Connection(this.solanaRpcUrl,"confirmed"),r=new vn.PublicKey(i);return new Rc.AnchorProvider(o,{publicKey:r},{preflightCommitment:"confirmed",commitment:"confirmed"})}getAllowance(i){throw new _}async getTokenBalance(i){let{account:o,token:r}=i;try{let s=await at(new vn.PublicKey(o),new vn.PublicKey(r.tokenAddress));return(await Zn(s,this.buildAnchorProvider(o))).amount.toString()}catch(s){if(s instanceof Error)return s.message.startsWith("Account does not exist"),"0";throw s}}async getNativeTokenBalance(i){return(await this.buildAnchorProvider(i.account).connection.getBalance(new vn.PublicKey(i.account))).toString()}};var _r=require("@stellar/stellar-sdk");var go=class extends Te{constructor(i,o,r){super();this.nodeRpcUrlsConfig=i;this.params=o;this.api=r}chainType="SRB";getAllowance(){throw new _}async getTokenBalance(i){if(!i.token.originTokenAddress)throw new B("OriginTokenAddress missing");let[o,r]=i.token.originTokenAddress.split(":"),s=new _r.Horizon.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")),d;try{d=await s.loadAccount(i.account)}catch(g){if(g instanceof _r.NotFoundError)return"0";throw g}let A=d.balances.find(g=>(g.asset_type==="credit_alphanum4"||g.asset_type==="credit_alphanum12")&&g.asset_code==o&&g.asset_issuer==r);return A?.balance?V(A.balance,L.getChainDecimalsByType(L.getChainProperty(i.token.chainSymbol).chainType)).toFixed():"0"}async getNativeTokenBalance(i){let d=(await new _r.Horizon.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")).loadAccount(i.account)).balances.find(c=>c.asset_type==="native");return d?.balance?V(d.balance,L.getChainDecimalsByType(L.getChainProperty(i.chainSymbol).chainType)).toFixed():"0"}approve(){throw new _}buildRawTransactionApprove(){throw new _}};var lo=class extends Te{constructor(i,o){super();this.suiRpcUrl=i;this.api=o;this.suiClient=new Jt({url:this.suiRpcUrl})}chainType="SUI";suiClient;approve(i){throw new _}buildRawTransactionApprove(i){throw new _}getAllowance(i){throw new _}async getTokenBalance(i){if(!i.token.originTokenAddress)throw new B("SUI token must contain 'originTokenAddress'");return(await this.suiClient.getBalance({owner:i.account,coinType:i.token.originTokenAddress})).totalBalance}async getNativeTokenBalance(i){let o=await Nt(r=>this.suiClient.getCoins({owner:i.account,cursor:r}));return o.length===0?"0":o.reduce((r,s)=>r+BigInt(s.balance),BigInt(0)).toString()}};var ol="0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",Di=class extends Te{constructor(i,o){super();this.tronWeb=i;this.api=o}chainType="TRX";async getAllowance(i){let{token:{tokenAddress:o},owner:r}=i;return(await(await this.getContract(o)).methods.allowance(r,i.spender).call()).toString()}async getTokenBalance(i){return(await(await this.getContract(i.token.tokenAddress)).balanceOf(i.account).call()).toString()}async getNativeTokenBalance(i){return(await this.tronWeb.trx.getBalance(i.account)).toString()}async approve(i){let o=await this.buildRawTransactionApprove(i);return await La(this.tronWeb,o)}async buildRawTransactionApprove(i){let{tokenAddress:o,spender:r,owner:s,amount:d}=i,c=d==null?ol:Pa(d),A=[{type:"address",value:r},{type:"uint256",value:c}];return this.buildRawTransaction(o,"approve(address,uint256)",A,"0",s)}getContract(i){return this.tronWeb.contract(co.abi,i)}async buildRawTransaction(i,o,r,s,d){let c=await this.tronWeb.transactionBuilder.triggerSmartContract(i,o,{callValue:+s},r,d);if(!c?.result?.result)throw new B("Unknown error: "+JSON.stringify(c,null,2));return c.transaction}};var ni=class{constructor(n,i,o){this.api=n;this.nodeRpcUrlsConfig=i;this.params=o}async getAllowance(n,i){let o=await this.getChainTokenService(n.token.chainSymbol,n.owner,i).getAllowance(n);return S(o,n.token.decimals).toFixed()}async checkAllowance(n,i){return H(n.amount),z("amount",n.amount,n.token.decimals),this.getChainTokenService(n.token.chainSymbol,n.owner,i).checkAllowance(this.prepareCheckAllowanceParams(n))}async approve(n,i){return i.amount&&(H(i.amount),z("amount",i.amount,i.token.decimals)),this.getChainTokenService(i.token.chainSymbol,i.owner,n).approve(this.prepareApproveParams(i))}async buildRawTransactionApprove(n,i){return n.amount&&(H(n.amount),z("amount",n.amount,n.token.decimals)),this.getChainTokenService(n.token.chainSymbol,n.owner,i).buildRawTransactionApprove(this.prepareApproveParams(n))}async getTokenBalance(n,i){let o=await this.getChainTokenService(n.token.chainSymbol,n.account,i).getTokenBalance(n);return n.token.decimals?S(o,n.token.decimals).toFixed():o}async getNativeTokenBalance(n,i){let o=await this.getChainTokenService(n.chainSymbol,n.account,i).getNativeTokenBalance(n);return{int:o,float:S(o,L.getChainDecimalsByType(L.getChainProperty(n.chainSymbol).chainType)).toFixed()}}getChainTokenService(n,i,o){switch(L.getChainProperty(n).chainType){case"EVM":{if(o)return new Ui(o,this.api);{let r=this.nodeRpcUrlsConfig.getNodeRpcUrl(n);return new Ui(new Wc.Web3(r),this.api)}}case"TRX":{if(o)return new Di(o,this.api);{let r=this.nodeRpcUrlsConfig.getNodeRpcUrl(n),s=new Yc.TronWeb({fullHost:r});return s.setAddress(i),new Di(s,this.api)}}case"SOLANA":{let r=this.nodeRpcUrlsConfig.getNodeRpcUrl(n);return new Ao(r,this.api)}case"SRB":return new go(this.nodeRpcUrlsConfig,this.params,this.api);case"SUI":return new lo(this.nodeRpcUrlsConfig.getNodeRpcUrl(n),this.api);case"ALG":if(o){let r=o,s=$r.AlgorandClient.fromClients({algod:r});return new Ki(s,this.api)}else{let r=this.nodeRpcUrlsConfig.getNodeRpcUrl(n),s=$r.AlgorandClient.fromConfig({algodConfig:{server:r}});return new Ki(s,this.api)}}}prepareCheckAllowanceParams(n){return{...n,amount:V(n.amount,n.token.decimals)}}prepareApproveParams(n){return{tokenAddress:n.token.tokenAddress,owner:n.owner,spender:n.spender,chainSymbol:n.token.chainSymbol,amount:n.amount==null?void 0:(0,Bc.Big)(n.amount).toFixed()}}};var uo=class{constructor(n,i){this.nodeRpcUrlsConfig=n;this.params=i;let o=new _n(i),r=new $n(o),s=new qn(r),d=new ti(s);this.api=new ei(d,i),this.tokenService=new ni(this.api,n,i)}api;tokenService;buildRawTransactionApprove(n,i){return this.tokenService.buildRawTransactionApprove(n,i)}checkAllowance(n,i){return this.tokenService.checkAllowance(n,i)}getAllowance(n,i){return this.tokenService.getAllowance(n,i)}};var ii=require("@solana/web3.js");var mo=class{constructor(n,i){this.nodeRpcUrlsConfig=n;this.params=i}async addMemoToTx(n,i){if(i.length>28)throw new B("InvalidArgumentException memo cannot be more than 28 characters");let o=new ii.Connection(this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"),"confirmed"),r=await sn(n,o),s=ii.TransactionMessage.decompile(n.message,{addressLookupTableAccounts:r}),d=s.instructions[s.instructions.length-1];if(!d?.keys)throw new B("Last instruction or its keys are invalid.");d.keys.push({pubkey:new ii.PublicKey(Buffer.from(i)),isSigner:!1,isWritable:!1}),n.message=s.compileToV0Message(r)}};var ie=require("@stellar/stellar-sdk");var b0=require("@stellar/stellar-sdk"),rl=b0.contract.Spec,sl=b0.contract.Client;var Ei=class extends sl{constructor(i){super(new rl(["AAAAAAAAAYlSZXR1cm5zIHRoZSBhbGxvd2FuY2UgZm9yIGBzcGVuZGVyYCB0byB0cmFuc2ZlciBmcm9tIGBmcm9tYC4KClRoZSBhbW91bnQgcmV0dXJuZWQgaXMgdGhlIGFtb3VudCB0aGF0IHNwZW5kZXIgaXMgYWxsb3dlZCB0byB0cmFuc2ZlcgpvdXQgb2YgZnJvbSdzIGJhbGFuY2UuIFdoZW4gdGhlIHNwZW5kZXIgdHJhbnNmZXJzIGFtb3VudHMsIHRoZSBhbGxvd2FuY2UKd2lsbCBiZSByZWR1Y2VkIGJ5IHRoZSBhbW91bnQgdHJhbnNmZXJlZC4KCiMgQXJndW1lbnRzCgoqIGBmcm9tYCAtIFRoZSBhZGRyZXNzIGhvbGRpbmcgdGhlIGJhbGFuY2Ugb2YgdG9rZW5zIHRvIGJlIGRyYXduIGZyb20uCiogYHNwZW5kZXJgIC0gVGhlIGFkZHJlc3Mgc3BlbmRpbmcgdGhlIHRva2VucyBoZWxkIGJ5IGBmcm9tYC4AAAAAAAAJYWxsb3dhbmNlAAAAAAAAAgAAAAAAAAAEZnJvbQAAABMAAAAAAAAAB3NwZW5kZXIAAAAAEwAAAAEAAAAL","AAAAAAAAAIlSZXR1cm5zIHRydWUgaWYgYGlkYCBpcyBhdXRob3JpemVkIHRvIHVzZSBpdHMgYmFsYW5jZS4KCiMgQXJndW1lbnRzCgoqIGBpZGAgLSBUaGUgYWRkcmVzcyBmb3Igd2hpY2ggdG9rZW4gYXV0aG9yaXphdGlvbiBpcyBiZWluZyBjaGVja2VkLgAAAAAAAAphdXRob3JpemVkAAAAAAABAAAAAAAAAAJpZAAAAAAAEwAAAAEAAAAB","AAAAAAAAA55TZXQgdGhlIGFsbG93YW5jZSBieSBgYW1vdW50YCBmb3IgYHNwZW5kZXJgIHRvIHRyYW5zZmVyL2J1cm4gZnJvbQpgZnJvbWAuCgpUaGUgYW1vdW50IHNldCBpcyB0aGUgYW1vdW50IHRoYXQgc3BlbmRlciBpcyBhcHByb3ZlZCB0byB0cmFuc2ZlciBvdXQgb2YKZnJvbSdzIGJhbGFuY2UuIFRoZSBzcGVuZGVyIHdpbGwgYmUgYWxsb3dlZCB0byB0cmFuc2ZlciBhbW91bnRzLCBhbmQKd2hlbiBhbiBhbW91bnQgaXMgdHJhbnNmZXJyZWQgdGhlIGFsbG93YW5jZSB3aWxsIGJlIHJlZHVjZWQgYnkgdGhlCmFtb3VudCB0cmFuc2ZlcmVkLgoKIyBBcmd1bWVudHMKCiogYGZyb21gIC0gVGhlIGFkZHJlc3MgaG9sZGluZyB0aGUgYmFsYW5jZSBvZiB0b2tlbnMgdG8gYmUgZHJhd24gZnJvbS4KKiBgc3BlbmRlcmAgLSBUaGUgYWRkcmVzcyBiZWluZyBhdXRob3JpemVkIHRvIHNwZW5kIHRoZSB0b2tlbnMgaGVsZCBieQpgZnJvbWAuCiogYGFtb3VudGAgLSBUaGUgdG9rZW5zIHRvIGJlIG1hZGUgYXZhaWxhYmxlIHRvIGBzcGVuZGVyYC4KKiBgZXhwaXJhdGlvbl9sZWRnZXJgIC0gVGhlIGxlZGdlciBudW1iZXIgd2hlcmUgdGhpcyBhbGxvd2FuY2UgZXhwaXJlcy4gQ2Fubm90CmJlIGxlc3MgdGhhbiB0aGUgY3VycmVudCBsZWRnZXIgbnVtYmVyIHVubGVzcyB0aGUgYW1vdW50IGlzIGJlaW5nIHNldCB0byAwLgpBbiBleHBpcmVkIGVudHJ5ICh3aGVyZSBleHBpcmF0aW9uX2xlZGdlciA8IHRoZSBjdXJyZW50IGxlZGdlciBudW1iZXIpCnNob3VsZCBiZSB0cmVhdGVkIGFzIGEgMCBhbW91bnQgYWxsb3dhbmNlLgoKIyBFdmVudHMKCkVtaXRzIGFuIGV2ZW50IHdpdGggdG9waWNzIGBbImFwcHJvdmUiLCBmcm9tOiBBZGRyZXNzLApzcGVuZGVyOiBBZGRyZXNzXSwgZGF0YSA9IFthbW91bnQ6IGkxMjgsIGV4cGlyYXRpb25fbGVkZ2VyOiB1MzJdYAAAAAAAB2FwcHJvdmUAAAAABAAAAAAAAAAEZnJvbQAAABMAAAAAAAAAB3NwZW5kZXIAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAAAAABFleHBpcmF0aW9uX2xlZGdlcgAAAAAAAAQAAAAA","AAAAAAAAAJhSZXR1cm5zIHRoZSBiYWxhbmNlIG9mIGBpZGAuCgojIEFyZ3VtZW50cwoKKiBgaWRgIC0gVGhlIGFkZHJlc3MgZm9yIHdoaWNoIGEgYmFsYW5jZSBpcyBiZWluZyBxdWVyaWVkLiBJZiB0aGUKYWRkcmVzcyBoYXMgbm8gZXhpc3RpbmcgYmFsYW5jZSwgcmV0dXJucyAwLgAAAAdiYWxhbmNlAAAAAAEAAAAAAAAAAmlkAAAAAAATAAAAAQAAAAs=","AAAAAAAAAWRCdXJuIGBhbW91bnRgIGZyb20gYGZyb21gLgoKUmVkdWNlcyBmcm9tJ3MgYmFsYW5jZSBieSB0aGUgYW1vdW50LCB3aXRob3V0IHRyYW5zZmVycmluZyB0aGUgYmFsYW5jZQp0byBhbm90aGVyIGhvbGRlcidzIGJhbGFuY2UuCgojIEFyZ3VtZW50cwoKKiBgZnJvbWAgLSBUaGUgYWRkcmVzcyBob2xkaW5nIHRoZSBiYWxhbmNlIG9mIHRva2VucyB3aGljaCB3aWxsIGJlCmJ1cm5lZCBmcm9tLgoqIGBhbW91bnRgIC0gVGhlIGFtb3VudCBvZiB0b2tlbnMgdG8gYmUgYnVybmVkLgoKIyBFdmVudHMKCkVtaXRzIGFuIGV2ZW50IHdpdGggdG9waWNzIGBbImJ1cm4iLCBmcm9tOiBBZGRyZXNzXSwgZGF0YSA9IFthbW91bnQ6CmkxMjhdYAAAAARidXJuAAAAAgAAAAAAAAAEZnJvbQAAABMAAAAAAAAABmFtb3VudAAAAAAACwAAAAA=","AAAAAAAAAtxCdXJuIGBhbW91bnRgIGZyb20gYGZyb21gLCBjb25zdW1pbmcgdGhlIGFsbG93YW5jZSBvZiBgc3BlbmRlcmAuCgpSZWR1Y2VzIGZyb20ncyBiYWxhbmNlIGJ5IHRoZSBhbW91bnQsIHdpdGhvdXQgdHJhbnNmZXJyaW5nIHRoZSBiYWxhbmNlCnRvIGFub3RoZXIgaG9sZGVyJ3MgYmFsYW5jZS4KClRoZSBzcGVuZGVyIHdpbGwgYmUgYWxsb3dlZCB0byBidXJuIHRoZSBhbW91bnQgZnJvbSBmcm9tJ3MgYmFsYW5jZSwgaWYKdGhlIGFtb3VudCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGFsbG93YW5jZSB0aGF0IHRoZSBzcGVuZGVyIGhhcwpvbiB0aGUgZnJvbSdzIGJhbGFuY2UuIFRoZSBzcGVuZGVyJ3MgYWxsb3dhbmNlIG9uIGZyb20ncyBiYWxhbmNlIHdpbGwgYmUKcmVkdWNlZCBieSB0aGUgYW1vdW50LgoKIyBBcmd1bWVudHMKCiogYHNwZW5kZXJgIC0gVGhlIGFkZHJlc3MgYXV0aG9yaXppbmcgdGhlIGJ1cm4sIGFuZCBoYXZpbmcgaXRzIGFsbG93YW5jZQpjb25zdW1lZCBkdXJpbmcgdGhlIGJ1cm4uCiogYGZyb21gIC0gVGhlIGFkZHJlc3MgaG9sZGluZyB0aGUgYmFsYW5jZSBvZiB0b2tlbnMgd2hpY2ggd2lsbCBiZQpidXJuZWQgZnJvbS4KKiBgYW1vdW50YCAtIFRoZSBhbW91bnQgb2YgdG9rZW5zIHRvIGJlIGJ1cm5lZC4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJidXJuIiwgZnJvbTogQWRkcmVzc10sIGRhdGEgPSBbYW1vdW50OgppMTI4XWAAAAAJYnVybl9mcm9tAAAAAAAAAwAAAAAAAAAHc3BlbmRlcgAAAAATAAAAAAAAAARmcm9tAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAA==","AAAAAAAAAVNDbGF3YmFjayBgYW1vdW50YCBmcm9tIGBmcm9tYCBhY2NvdW50LiBgYW1vdW50YCBpcyBidXJuZWQgaW4gdGhlCmNsYXdiYWNrIHByb2Nlc3MuCgojIEFyZ3VtZW50cwoKKiBgZnJvbWAgLSBUaGUgYWRkcmVzcyBob2xkaW5nIHRoZSBiYWxhbmNlIGZyb20gd2hpY2ggdGhlIGNsYXdiYWNrIHdpbGwKdGFrZSB0b2tlbnMuCiogYGFtb3VudGAgLSBUaGUgYW1vdW50IG9mIHRva2VucyB0byBiZSBjbGF3ZWQgYmFjay4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJjbGF3YmFjayIsIGFkbWluOiBBZGRyZXNzLCB0bzogQWRkcmVzc10sCmRhdGEgPSBbYW1vdW50OiBpMTI4XWAAAAAACGNsYXdiYWNrAAAAAgAAAAAAAAAEZnJvbQAAABMAAAAAAAAABmFtb3VudAAAAAAACwAAAAA=","AAAAAAAAAIBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZGVjaW1hbHMgdXNlZCB0byByZXByZXNlbnQgYW1vdW50cyBvZiB0aGlzIHRva2VuLgoKIyBQYW5pY3MKCklmIHRoZSBjb250cmFjdCBoYXMgbm90IHlldCBiZWVuIGluaXRpYWxpemVkLgAAAAhkZWNpbWFscwAAAAAAAAABAAAABA==","AAAAAAAAAPVNaW50cyBgYW1vdW50YCB0byBgdG9gLgoKIyBBcmd1bWVudHMKCiogYHRvYCAtIFRoZSBhZGRyZXNzIHdoaWNoIHdpbGwgcmVjZWl2ZSB0aGUgbWludGVkIHRva2Vucy4KKiBgYW1vdW50YCAtIFRoZSBhbW91bnQgb2YgdG9rZW5zIHRvIGJlIG1pbnRlZC4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJtaW50IiwgYWRtaW46IEFkZHJlc3MsIHRvOiBBZGRyZXNzXSwgZGF0YQo9IFthbW91bnQ6IGkxMjhdYAAAAAAAAARtaW50AAAAAgAAAAAAAAACdG8AAAAAABMAAAAAAAAABmFtb3VudAAAAAAACwAAAAA=","AAAAAAAAAFlSZXR1cm5zIHRoZSBuYW1lIGZvciB0aGlzIHRva2VuLgoKIyBQYW5pY3MKCklmIHRoZSBjb250cmFjdCBoYXMgbm90IHlldCBiZWVuIGluaXRpYWxpemVkLgAAAAAAAARuYW1lAAAAAAAAAAEAAAAQ","AAAAAAAAAQxTZXRzIHRoZSBhZG1pbmlzdHJhdG9yIHRvIHRoZSBzcGVjaWZpZWQgYWRkcmVzcyBgbmV3X2FkbWluYC4KCiMgQXJndW1lbnRzCgoqIGBuZXdfYWRtaW5gIC0gVGhlIGFkZHJlc3Mgd2hpY2ggd2lsbCBoZW5jZWZvcnRoIGJlIHRoZSBhZG1pbmlzdHJhdG9yCm9mIHRoaXMgdG9rZW4gY29udHJhY3QuCgojIEV2ZW50cwoKRW1pdHMgYW4gZXZlbnQgd2l0aCB0b3BpY3MgYFsic2V0X2FkbWluIiwgYWRtaW46IEFkZHJlc3NdLCBkYXRhID0KW25ld19hZG1pbjogQWRkcmVzc11gAAAACXNldF9hZG1pbgAAAAAAAAEAAAAAAAAACW5ld19hZG1pbgAAAAAAABMAAAAA","AAAAAAAAAEZSZXR1cm5zIHRoZSBhZG1pbiBvZiB0aGUgY29udHJhY3QuCgojIFBhbmljcwoKSWYgdGhlIGFkbWluIGlzIG5vdCBzZXQuAAAAAAAFYWRtaW4AAAAAAAAAAAAAAQAAABM=","AAAAAAAAAVBTZXRzIHdoZXRoZXIgdGhlIGFjY291bnQgaXMgYXV0aG9yaXplZCB0byB1c2UgaXRzIGJhbGFuY2UuIElmCmBhdXRob3JpemVkYCBpcyB0cnVlLCBgaWRgIHNob3VsZCBiZSBhYmxlIHRvIHVzZSBpdHMgYmFsYW5jZS4KCiMgQXJndW1lbnRzCgoqIGBpZGAgLSBUaGUgYWRkcmVzcyBiZWluZyAoZGUtKWF1dGhvcml6ZWQuCiogYGF1dGhvcml6ZWAgLSBXaGV0aGVyIG9yIG5vdCBgaWRgIGNhbiB1c2UgaXRzIGJhbGFuY2UuCgojIEV2ZW50cwoKRW1pdHMgYW4gZXZlbnQgd2l0aCB0b3BpY3MgYFsic2V0X2F1dGhvcml6ZWQiLCBpZDogQWRkcmVzc10sIGRhdGEgPQpbYXV0aG9yaXplOiBib29sXWAAAAAOc2V0X2F1dGhvcml6ZWQAAAAAAAIAAAAAAAAAAmlkAAAAAAATAAAAAAAAAAlhdXRob3JpemUAAAAAAAABAAAAAA==","AAAAAAAAAFtSZXR1cm5zIHRoZSBzeW1ib2wgZm9yIHRoaXMgdG9rZW4uCgojIFBhbmljcwoKSWYgdGhlIGNvbnRyYWN0IGhhcyBub3QgeWV0IGJlZW4gaW5pdGlhbGl6ZWQuAAAAAAZzeW1ib2wAAAAAAAAAAAABAAAAEA==","AAAAAAAAAWRUcmFuc2ZlciBgYW1vdW50YCBmcm9tIGBmcm9tYCB0byBgdG9gLgoKIyBBcmd1bWVudHMKCiogYGZyb21gIC0gVGhlIGFkZHJlc3MgaG9sZGluZyB0aGUgYmFsYW5jZSBvZiB0b2tlbnMgd2hpY2ggd2lsbCBiZQp3aXRoZHJhd24gZnJvbS4KKiBgdG9gIC0gVGhlIGFkZHJlc3Mgd2hpY2ggd2lsbCByZWNlaXZlIHRoZSB0cmFuc2ZlcnJlZCB0b2tlbnMuCiogYGFtb3VudGAgLSBUaGUgYW1vdW50IG9mIHRva2VucyB0byBiZSB0cmFuc2ZlcnJlZC4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJ0cmFuc2ZlciIsIGZyb206IEFkZHJlc3MsIHRvOiBBZGRyZXNzXSwKZGF0YSA9IFthbW91bnQ6IGkxMjhdYAAAAAh0cmFuc2ZlcgAAAAMAAAAAAAAABGZyb20AAAATAAAAAAAAAAJ0bwAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAA==","AAAAAAAAAzNUcmFuc2ZlciBgYW1vdW50YCBmcm9tIGBmcm9tYCB0byBgdG9gLCBjb25zdW1pbmcgdGhlIGFsbG93YW5jZSB0aGF0CmBzcGVuZGVyYCBoYXMgb24gYGZyb21gJ3MgYmFsYW5jZS4gQXV0aG9yaXplZCBieSBzcGVuZGVyCihgc3BlbmRlci5yZXF1aXJlX2F1dGgoKWApLgoKVGhlIHNwZW5kZXIgd2lsbCBiZSBhbGxvd2VkIHRvIHRyYW5zZmVyIHRoZSBhbW91bnQgZnJvbSBmcm9tJ3MgYmFsYW5jZQppZiB0aGUgYW1vdW50IGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgYWxsb3dhbmNlIHRoYXQgdGhlIHNwZW5kZXIKaGFzIG9uIHRoZSBmcm9tJ3MgYmFsYW5jZS4gVGhlIHNwZW5kZXIncyBhbGxvd2FuY2Ugb24gZnJvbSdzIGJhbGFuY2UKd2lsbCBiZSByZWR1Y2VkIGJ5IHRoZSBhbW91bnQuCgojIEFyZ3VtZW50cwoKKiBgc3BlbmRlcmAgLSBUaGUgYWRkcmVzcyBhdXRob3JpemluZyB0aGUgdHJhbnNmZXIsIGFuZCBoYXZpbmcgaXRzCmFsbG93YW5jZSBjb25zdW1lZCBkdXJpbmcgdGhlIHRyYW5zZmVyLgoqIGBmcm9tYCAtIFRoZSBhZGRyZXNzIGhvbGRpbmcgdGhlIGJhbGFuY2Ugb2YgdG9rZW5zIHdoaWNoIHdpbGwgYmUKd2l0aGRyYXduIGZyb20uCiogYHRvYCAtIFRoZSBhZGRyZXNzIHdoaWNoIHdpbGwgcmVjZWl2ZSB0aGUgdHJhbnNmZXJyZWQgdG9rZW5zLgoqIGBhbW91bnRgIC0gVGhlIGFtb3VudCBvZiB0b2tlbnMgdG8gYmUgdHJhbnNmZXJyZWQuCgojIEV2ZW50cwoKRW1pdHMgYW4gZXZlbnQgd2l0aCB0b3BpY3MgYFsidHJhbnNmZXIiLCBmcm9tOiBBZGRyZXNzLCB0bzogQWRkcmVzc10sCmRhdGEgPSBbYW1vdW50OiBpMTI4XWAAAAAADXRyYW5zZmVyX2Zyb20AAAAAAAAEAAAAAAAAAAdzcGVuZGVyAAAAABMAAAAAAAAABGZyb20AAAATAAAAAAAAAAJ0bwAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAA=="]),i);this.options=i}fromJSON={allowance:this.txFromJSON,authorized:this.txFromJSON,approve:this.txFromJSON,balance:this.txFromJSON,burn:this.txFromJSON,burn_from:this.txFromJSON,clawback:this.txFromJSON,decimals:this.txFromJSON,mint:this.txFromJSON,name:this.txFromJSON,set_admin:this.txFromJSON,admin:this.txFromJSON,set_authorized:this.txFromJSON,symbol:this.txFromJSON,transfer:this.txFromJSON,transfer_from:this.txFromJSON}};var dl=100,cl=180,po=class{constructor(n,i){this.nodeRpcUrlsConfig=n;this.params=i}async buildChangeTrustLineXdrTx(n){let o=await new ie.Horizon.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")).loadAccount(n.sender),s=await this.getContract(Ei,n.tokenAddress).name();if(On(s))throw new B;let d=xn(s);if(!d)throw new B;let[c,A]=d.split(":");if(c===void 0||A===void 0)throw new B("Invalid token name format. Expected format 'symbol:srbTokenAddress'");let g=new ie.Asset(c,A),l=ie.Operation.changeTrust({asset:g,limit:n.limit});return new ie.TransactionBuilder(o,{fee:dl.toString(10),networkPassphrase:this.params.sorobanNetworkPassphrase}).addOperation(l).setTimeout(cl).build().toXDR()}async getBalanceLine(n,i){let r=await this.getContract(Ei,i).name();if(On(r))throw new B;let s=xn(r);if(!s)throw new B;let[d,c]=s.split(":"),A=this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR");return(await new ie.Horizon.Server(A).loadAccount(n)).balances.find(I=>(I.asset_type==="credit_alphanum4"||I.asset_type==="credit_alphanum12")&&I.asset_code==d&&I.asset_issuer==c)}async submitTransactionStellar(n){let i=new ie.Horizon.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")),o=ie.TransactionBuilder.fromXDR(n,this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR"));return await i.submitTransaction(o)}async simulateAndCheckRestoreTxRequiredSoroban(n,i){let o=new ie.rpc.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),r=await o.getAccount(i),s=ie.TransactionBuilder.fromXDR(n,this.params.sorobanNetworkPassphrase),d=await o.simulateTransaction(s);if(ie.rpc.Api.isSimulationRestore(d))return new ie.TransactionBuilder(r,{fee:(+ie.BASE_FEE+ +d.restorePreamble.minResourceFee).toString(),networkPassphrase:this.params.sorobanNetworkPassphrase}).setSorobanData(d.restorePreamble.transactionData.build()).addOperation(ie.Operation.restoreFootprint({})).setTimeout(ie.TimeoutInfinite).build().toXDR()}async sendTransactionSoroban(n){let i=new ie.rpc.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),o=ie.TransactionBuilder.fromXDR(n,this.params.sorobanNetworkPassphrase);return i.sendTransaction(o)}async confirmTx(n,i=15){let o=new ie.rpc.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),r=await ns(()=>o.getTransaction(n),d=>d.status===ie.rpc.Api.GetTransactionStatus.NOT_FOUND,i);if(r.length===0)throw new B("No transaction responses found.");let s=r[r.length-1];if(!s)throw new B("Unexpected error: last response is undefined.");return s}getContract(n,i){let o={contractId:i,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new n(o)}};var Co=class{constructor(n,i){this.nodeRpcUrlsConfig=n;this.api=i}_suiBridgeService;async buildSendTxFromCustomTx(n,i,o){return this.suiBridgeService.buildRawTransactionSendFromCustomTx(n,i,o)}get suiBridgeService(){return this._suiBridgeService||(this._suiBridgeService=new kn(this.nodeRpcUrlsConfig,this.api)),this._suiBridgeService}};var bo=class{constructor(n){this.service=n;this.srb=new po(n.nodeRpcUrlsConfig,n.params),this.sol=new mo(n.nodeRpcUrlsConfig,n.params),this.sui=new Co(n.nodeRpcUrlsConfig,n.api),this.evm=new uo(n.nodeRpcUrlsConfig,n.params),this.alg=new ro(n.nodeRpcUrlsConfig)}srb;sol;sui;evm;alg};var St=(i=>(i.WITH_NATIVE_CURRENCY="native",i.WITH_STABLECOIN="stablecoin",i))(St||{}),pi=(i=>(i.INT="int",i.FLOAT="float",i))(pi||{});var ue=require("big.js");var _i=class{constructor(n){this.nodeRpcUrls=n}getNodeRpcUrl(n){let i=this.nodeRpcUrls[n];if(i!==void 0)return i;throw new di(n)}},Io=class{constructor(n,i=ai){this.nodeRpcUrlsConfig=n;L.addChainsProperties(i.additionalChainsProperties);let o=new _n(i),r=new $n(o),s=new qn(r),d=new ti(s);this.api=new ei(d,i),this.tokenService=new ni(this.api,n,i),this.bridge=new Ha(this.api,n,i,this.tokenService),this.pool=new no(this.api,n,i,this.tokenService),this.yield=new oo(this.api,n,i,this.tokenService),this.params=i}api;tokenService;params;bridge;pool;yield;async chainDetailsMap(n){return this.api.getChainDetailsMap(n)}async tokens(n){return this.api.tokens(n)}async tokensByChain(n,i){let r=(await this.api.getChainDetailsMap(i))[n];return r?r.tokens:[]}async getTransferStatus(n,i){return this.api.getTransferStatus(n,i)}async getGasBalance(n,i){return this.api.getGasBalance(n,i)}async checkAddress(){return new Promise(n=>{n({status:"OK",gasBalance:null})})}async getPendingStatusInfo(n,i,o,r){H(n);let s;i=="float"?(z("amount",n,o.decimals),s=V(n,o.decimals).toFixed()):s=n;let d=Bt(s,o,await me(this.api,o)),c=await me(this.api,r),A=this.getAmountFromVUsdFormatted(d,r,c),g,l=await this.api.getPendingInfo();for(let m in l[r.chainSymbol]){let I=l[r.chainSymbol];if(!I)throw new B("Cannot find pending info for "+r.chainSymbol);g=I[m]}if(g){let m=as(g.totalSentAmount,c),I=this.getAmountFromVUsdFormatted(d,r,m),h;return(0,ue.Big)(I.int).gt(A.int)?h={min:A,max:I}:h={min:I,max:A},{pendingTxs:g.pendingTxs,pendingAmount:{int:Ue(g.totalSentAmount,3,r.decimals).toFixed(0),float:S(g.totalSentAmount,3).toFixed()},estimatedAmount:h}}return{pendingTxs:0,pendingAmount:{int:"0",float:"0"},estimatedAmount:{min:A,max:A}}}async getTokenBalance(n,i){return this.tokenService.getTokenBalance(n,i)}async getNativeTokenBalance(n,i){return this.tokenService.getNativeTokenBalance(n,i)}async calculateFeePercentOnSourceChain(n,i){H(n),z("amountFloat",n,i.decimals);let o=V(n,i.decimals);if(o.eq(0))return 0;let r=Bt(o,i,await me(this.api,i)),s=Je(r,i.decimals);return Ro(o,s)}async calculateFeePercentOnDestinationChain(n,i,o){H(n),z("amountFloat",n,i.decimals);let r=V(n,i.decimals);if(r.eq(0))return 0;let s=Bt(r,i,await me(this.api,i)),d=ui(s,o,await me(this.api,o)),c=Je(s,o.decimals);return Ro(c,d)}async getAmountToBeReceivedAndGasFeeOptions(n,i,o,r){return H(n),z("amountToSendFloat",n,i.decimals),{amountToSendFloat:(0,ue.Big)(n).toFixed(),amountToBeReceivedFloat:await this.getAmountToBeReceived(n,i,o,r),gasFeeOptions:await this.getGasFeeOptions(i,o,r)}}async getAmountToSendAndGasFeeOptions(n,i,o,r){return H(n),z("amountToBeReceivedFloat",n,o.decimals),{amountToSendFloat:await this.getAmountToSend(n,i,o,r),amountToBeReceivedFloat:(0,ue.Big)(n).toFixed(),gasFeeOptions:await this.getGasFeeOptions(i,o,r)}}async getAmountToBeReceived(n,i,o,r){return this.getAmountToBeReceivedCompute(n,i,o,r,async()=>await me(this.api,i),async()=>await me(this.api,o))}async getAmountToBeReceivedFromChain(n,i,o,r,s,d){return this.getAmountToBeReceivedCompute(n,i,o,r,async()=>await this.pool.getPoolInfoFromChain(i,s),async()=>await this.pool.getPoolInfoFromChain(o,d))}async getAmountToBeReceivedCompute(n,i,o,r=1,s,d){switch(r){case 1:case 2:return this.getAmountToBeReceivedComputeWithPools(n,i,o,await s(),await d());case 3:case 4:return this.getAmountToBeReceivedComputeCctp(n,i,o,r);case 5:return this.getAmountToBeReceivedComputeOft(n,i,o)}}getAmountToBeReceivedComputeWithPools(n,i,o,r,s){H(n),z("amountToSendFloat",n,i.decimals);let d=V(n,i.decimals),c=Bt(d,i,r);return this.getAmountFromVUsdFormatted(c,o,s).float}getAmountToBeReceivedComputeCctp(n,i,o,r){H(n),z("amountToSendFloat",n,i.decimals);let s=V(n,i.decimals);switch(r){case 3:{if(!i.cctpAddress||!o.cctpAddress||!i.cctpFeeShare)throw new he("Such route does not support CCTP protocol");let d=s.mul((0,ue.Big)(1).minus(i.cctpFeeShare)).round(0,ue.Big.roundUp),c=Ue(d,i.decimals,o.decimals).round(0);return S(c,o.decimals).toFixed()}case 4:{if(!i.cctpV2Address||!o.cctpV2Address||!i.cctpV2FeeShare)throw new he("Such route does not support CCTP V2 protocol");let d=s.mul((0,ue.Big)(1).minus(i.cctpV2FeeShare)).round(0,ue.Big.roundUp),c=Ue(d,i.decimals,o.decimals).round(0);return S(c,o.decimals).toFixed()}}}async getAmountToBeReceivedComputeOft(n,i,o){H(n),z("amountToSendFloat",n,i.decimals);let r=V(n,i.decimals);if(!i.oftBridgeAddress||!o.oftBridgeAddress||i.oftId!==o.oftId)throw new ve("Such route does not support OFT protocol");let{adminFeeShareWithExtras:s}=await this.api.getReceiveTransactionCost({sourceChainId:i.allbridgeChainId,destinationChainId:o.allbridgeChainId,messenger:5,sourceToken:i.tokenAddress});if(!s)throw new ve("Such route does not support OFT protocol");let d=r.mul((0,ue.Big)(1).minus(s)).round(0,ue.Big.roundUp),c=Ue(d,i.decimals,o.decimals).round(0);return S(c,o.decimals).toFixed()}async getAmountToSend(n,i,o,r){return this.getAmountToSendCompute(n,i,o,r,()=>me(this.api,i),()=>me(this.api,o))}async getAmountToSendFromChain(n,i,o,r,s,d){return this.getAmountToSendCompute(n,i,o,r,()=>this.pool.getPoolInfoFromChain(i,s),()=>this.pool.getPoolInfoFromChain(o,d))}async getAmountToSendCompute(n,i,o,r=1,s,d){switch(r){case 1:case 2:return this.getAmountToSendComputeWithPools(n,i,o,await s(),await d());case 3:case 4:return this.getAmountToSendComputeCctp(n,i,o,r);case 5:return this.getAmountToSendComputeOft(n,i,o)}}getAmountToSendComputeWithPools(n,i,o,r,s){H(n),z("amountToBeReceivedFloat",n,o.decimals);let d=V(n,o.decimals),c=rs(d,o,s),A=os(c,i,r);if((0,ue.Big)(A).lte(0))throw new vt;return S(A,i.decimals).toFixed()}getAmountToSendComputeCctp(n,i,o,r){H(n),z("amountToBeReceivedFloat",n,o.decimals);let s=V(n,o.decimals);switch(r){case 3:{if(!i.cctpAddress||!o.cctpAddress||!i.cctpFeeShare)throw new he("Such route does not support CCTP protocol");let d=s.div((0,ue.Big)(1).minus(i.cctpFeeShare)).round(0,ue.Big.roundDown),c=Ue(d,o.decimals,i.decimals).round(0);return S(c,i.decimals).toFixed()}case 4:{if(!i.cctpV2Address||!o.cctpV2Address||!i.cctpV2FeeShare)throw new he("Such route does not support CCTP V2 protocol");let d=s.div((0,ue.Big)(1).minus(i.cctpV2FeeShare)).round(0,ue.Big.roundDown),c=Ue(d,o.decimals,i.decimals).round(0);return S(c,i.decimals).toFixed()}}}async getAmountToSendComputeOft(n,i,o){H(n),z("amountToBeReceivedFloat",n,o.decimals);let r=V(n,o.decimals);if(!i.oftId||!o.oftId||!i.oftBridgeAddress||i.oftId!==o.oftId)throw new ve("Such route does not support OFT protocol");let{adminFeeShareWithExtras:s}=await this.api.getReceiveTransactionCost({sourceChainId:i.allbridgeChainId,destinationChainId:o.allbridgeChainId,messenger:5,sourceToken:i.tokenAddress});if(!s)throw new ve("Such route does not support OFT protocol");let d=r.div((0,ue.Big)(1).minus(s)).round(0,ue.Big.roundDown),c=Ue(d,o.decimals,i.decimals).round(0);return S(c,i.decimals).toFixed()}async getGasFeeOptions(n,i,o){return Wo(n,i.allbridgeChainId,o,this.api)}getAverageTransferTime(n,i,o){return n.transferTime?.[i.chainSymbol]?.[o]??null}async getPoolInfoByToken(n){return await this.api.getPoolInfoByKey({chainSymbol:n.chainSymbol,poolAddress:n.poolAddress})}async refreshPoolInfo(n){if(n){let o=(n instanceof Array?n:[n]).map(r=>({chainSymbol:r.chainSymbol,poolAddress:r.poolAddress}));return this.api.refreshPoolInfo(o)}return this.api.refreshPoolInfo()}aprInPercents(n){return ds(n)}async getExtraGasMaxLimits(n,i,o){return await fo(n,i,o,this.api)}async getVUsdFromAmount(n,i,o){H(n);let r;i=="float"?(z("amount",n,o.decimals),r=V(n,o.decimals).toFixed()):r=n;let s=Bt(r,o,await me(this.api,o));return{int:s,float:S(s,3).toFixed()}}async getAmountFromVUsd(n,i){return this.getAmountFromVUsdFormatted(n,i,await me(this.api,i))}getAmountFromVUsdFormatted(n,i,o){H(n);let r=ui(n,i,o);if((0,ue.Big)(r).lt(0))throw new vt;return{int:r,float:S(r,i.decimals).toFixed()}}async swapAndBridgeFeeCalculation(n,i,o){return lc(n,{decimals:i.decimals,feeShare:i.feeShare,poolInfo:await me(this.api,i)},{decimals:o.decimals,feeShare:o.feeShare,poolInfo:await me(this.api,o)})}async swapAndBridgeFeeCalculationReverse(n,i,o){let r=uc(n,{decimals:i.decimals,feeShare:i.feeShare,poolInfo:await me(this.api,i)},{decimals:o.decimals,feeShare:o.feeShare,poolInfo:await me(this.api,o)}),s=r.swapFromVUsdCalcResult.amountIncludingCommissionInTokenPrecision;if((0,ue.Big)(s).lt(0))throw new vt;return r}async getSendAmountDetails(n,i,o,r){H(n);let s;return i=="float"?(z("amount",n,o.decimals),s=V(n,o.decimals).toFixed()):s=n,mc(s,o,await me(this.api,o),r,await me(this.api,r))}};function Al(a){return"solanaRpcUrl"in a}var qr=class{params;bridge;pool;yield;utils;service;constructor(n,i=ai){let o;Al(n)?o=new _i({SOL:n.solanaRpcUrl,TRX:n.tronRpcUrl}):o=new _i(n),this.service=new Io(o,i),this.bridge=this.service.bridge,this.pool=this.service.pool,this.yield=this.service.yield,this.utils=new bo(this.service),this.params=i}async chainDetailsMap(n="swap"){return this.service.chainDetailsMap(n)}async tokens(n="swap"){return this.service.tokens(n)}async tokensByChain(n,i="swap"){return this.service.tokensByChain(n,i)}async getTransferStatus(n,i){return this.service.getTransferStatus(n,i)}async getGasBalance(n,i){return this.service.getGasBalance(n,i)}async checkAddress(n,i,o){return await this.service.checkAddress()}async getPendingStatusInfo(n,i,o,r){return this.service.getPendingStatusInfo(n,i,o,r)}async getTokenBalance(n,i){return this.service.getTokenBalance(n,i)}async getNativeTokenBalance(n,i){return this.service.getNativeTokenBalance(n,i)}async calculateFeePercentOnSourceChain(n,i){return this.service.calculateFeePercentOnSourceChain(n,i)}async calculateFeePercentOnDestinationChain(n,i,o){return this.service.calculateFeePercentOnDestinationChain(n,i,o)}async getAmountToBeReceivedAndGasFeeOptions(n,i,o,r){return this.service.getAmountToBeReceivedAndGasFeeOptions(n,i,o,r)}async getAmountToSendAndGasFeeOptions(n,i,o,r){return this.service.getAmountToSendAndGasFeeOptions(n,i,o,r)}async getAmountToBeReceived(n,i,o,r=1){return this.service.getAmountToBeReceived(n,i,o,r)}async getAmountToBeReceivedFromChain(n,i,o,r=1,s,d){return this.service.getAmountToBeReceivedFromChain(n,i,o,r,s,d)}getAmountToBeReceivedFromPools(n,i,o,r,s,d=1){switch(d){case 1:case 2:return this.service.getAmountToBeReceivedComputeWithPools(n,i,o,r,s);case 3:case 4:return this.service.getAmountToBeReceivedComputeCctp(n,i,o,d)}}async getAmountToSend(n,i,o,r=1){return this.service.getAmountToSend(n,i,o,r)}async getAmountToSendFromChain(n,i,o,r=1,s,d){return this.service.getAmountToSendFromChain(n,i,o,r,s,d)}getAmountToSendFromPools(n,i,o,r,s,d=1){switch(d){case 1:case 2:return this.service.getAmountToSendComputeWithPools(n,i,o,r,s);case 3:case 4:return this.service.getAmountToSendComputeCctp(n,i,o,d)}}async getGasFeeOptions(n,i,o){return this.service.getGasFeeOptions(n,i,o)}getAverageTransferTime(n,i,o){return this.service.getAverageTransferTime(n,i,o)}async getPoolInfoByToken(n){return this.service.getPoolInfoByToken(n)}async refreshPoolInfo(n){return this.service.refreshPoolInfo(n)}aprInPercents(n){return this.service.aprInPercents(n)}async getExtraGasMaxLimits(n,i,o=1){return this.service.getExtraGasMaxLimits(n,i,o)}async getVUsdFromAmount(n,i,o){return this.service.getVUsdFromAmount(n,i,o)}async getAmountFromVUsd(n,i){return this.service.getAmountFromVUsd(n,i)}async swapAndBridgeFeeCalculation(n,i,o){return this.service.swapAndBridgeFeeCalculation(n,i,o)}async swapAndBridgeFeeCalculationReverse(n,i,o){return this.service.swapAndBridgeFeeCalculationReverse(n,i,o)}async getSendAmountDetails(n,i,o,r){return this.service.getSendAmountDetails(n,i,o,r)}};0&&(module.exports={AddressStatus,AllbridgeCoreSdk,AmountFormat,AmountNotEnoughError,ArgumentInvalidDecimalsError,CCTPDoesNotSupportedError,ChainSymbol,ChainType,ErrorCode,ExtraGasMaxLimitExceededError,FeePaymentMethod,InsufficientPoolLiquidityError,InvalidAmountError,InvalidGasFeePaymentOptionError,InvalidMessengerOptionError,InvalidTxError,JupiterError,Messenger,MethodNotSupportedError,NodeRpcUrlNotInitializedError,OFTDoesNotSupportedError,SdkError,SdkRootError,SolanaAutoTxFee,TimeoutError,TxTooLargeError,VerifyTxError,YieldDoesNotSupportedError,assertYieldIsSupported,isYieldSupported,mainnet,nodeRpcUrlsDefault,nodeUrlsDefault});
|
|
6
|
+
Y - is value of virtual usd`,networks:{},state:{schema:{global:{ints:15,bytes:4},local:{ints:2,bytes:0}},keys:{global:{feeShareBP:{keyType:"AVMString",valueType:"AVMUint64",key:"ZmVlU2hhcmVCUA=="},router:{keyType:"AVMString",valueType:"address",key:"cm91dGVy"},tokenBalance:{keyType:"AVMString",valueType:"AVMUint64",key:"dG9rZW5CYWxhbmNl"},vUsdBalance:{keyType:"AVMString",valueType:"AVMUint64",key:"dlVzZEJhbGFuY2U="},balanceRatioMinBP:{keyType:"AVMString",valueType:"AVMUint64",key:"YmFsYW5jZVJhdGlvTWluQlA="},reserves:{keyType:"AVMString",valueType:"AVMUint64",key:"cmVzZXJ2ZXM="},a:{keyType:"AVMString",valueType:"AVMUint64",key:"YQ=="},d:{keyType:"AVMString",valueType:"AVMUint64",key:"ZA=="},tokenAmountReduce:{keyType:"AVMString",valueType:"AVMUint64",key:"dG9rZW5BbW91bnRSZWR1Y2U="},tokenAmountIncrease:{keyType:"AVMString",valueType:"AVMUint64",key:"dG9rZW5BbW91bnRJbmNyZWFzZQ=="},stopAuthority:{keyType:"AVMString",valueType:"address",key:"c3RvcEF1dGhvcml0eQ=="},canDeposit:{keyType:"AVMString",valueType:"AVMUint64",key:"Y2FuRGVwb3NpdA=="},canWithdraw:{keyType:"AVMString",valueType:"AVMUint64",key:"Y2FuV2l0aGRyYXc="},asset:{keyType:"AVMString",valueType:"AVMUint64",key:"YXNzZXQ="},adminFeeShareBP:{keyType:"AVMString",valueType:"AVMUint64",key:"YWRtaW5GZWVTaGFyZUJQ"},totalSupply:{keyType:"AVMString",valueType:"AVMUint64",key:"dG90YWxTdXBwbHk="},accRewardPerShareP:{keyType:"AVMString",valueType:"AVMBytes",key:"YWNjUmV3YXJkUGVyU2hhcmVQ"},adminFeeAmount:{keyType:"AVMString",valueType:"AVMUint64",key:"YWRtaW5GZWVBbW91bnQ="},owner:{keyType:"AVMString",valueType:"address",key:"b3duZXI="}},local:{balance:{keyType:"AVMString",valueType:"AVMUint64",key:"YmFsYW5jZQ=="},userRewardDebt:{keyType:"AVMString",valueType:"AVMUint64",key:"dXNlclJld2FyZERlYnQ="}},box:{}},maps:{global:{},local:{},box:{}}},bareActions:{create:[],call:[]},sourceInfo:{approval:{sourceInfo:[{pc:[1446],errorMessage:'"Pool: withdraw prohibited'},{pc:[1249],errorMessage:"Asset must go to app"},{pc:[1232],errorMessage:"Asset txn missing"},{pc:[1270],errorMessage:"CloseTo not allowed"},{pc:[514,529,553,577,589,605,617,632,647,659,671,683,695,711,723,739,773,803,819,831,840,865],errorMessage:"OnCompletion is not NoOp"},{pc:[853],errorMessage:"OnCompletion is not OptIn"},{pc:[3306],errorMessage:"Only owner"},{pc:[1216],errorMessage:"Pool: deposit prohibited"},{pc:[1141],errorMessage:"Pool: is not stopAuthority"},{pc:[1206],errorMessage:"Pool: low token balance"},{pc:[1182],errorMessage:"Pool: low vUSD balance"},{pc:[1131],errorMessage:"Pool: only router"},{pc:[1701,1983],errorMessage:"Pool: reserves"},{pc:[2027],errorMessage:"Pool: slippage"},{pc:[2116,2175],errorMessage:"Pool: too large"},{pc:[1280],errorMessage:"Pool: too little"},{pc:[1369],errorMessage:"Pool: too much"},{pc:[1723],errorMessage:"Pool: zero D changes"},{pc:[1693],errorMessage:"Pool: zero changes"},{pc:[1263],errorMessage:"Rekey not allowed"},{pc:[1468],errorMessage:"RewardManager: not enough amount"},{pc:[2994],errorMessage:"RewardManager: too high"},{pc:[1256],errorMessage:"Wrong asset"},{pc:[984],errorMessage:"asset exists"},{pc:[869],errorMessage:"can only call when creating"},{pc:[517,532,556,580,592,608,620,635,650,662,674,686,698,714,726,742,776,806,822,834,843,856],errorMessage:"can only call when not creating"},{pc:[977,1080,1129,1139,1153,1163,1180,1204,1215,1225,1229,1284,1298,1308,1326,1336,1350,1360,1374,1412,1445,1451,1476,1531,1563,1614,1618,1624,1660,1686,1690,1697,1705,1719,1728,1775,1805,1815,1823,1833,1841,1870,1929,1939,1955,1976,1987,2002,2032,2066,2137,2148,2251,2260,2408,2413,2421,2529,2537,2578,2586,2917,2954,3015,3023,3028,3064,3092,3100,3118,3138,3152,3216,3250,3304],errorMessage:"check GlobalState exists"},{pc:[1463,1500,1516,2906,2934,3058,3078,3164,3186,3201],errorMessage:"check LocalState exists"},{pc:[2626],errorMessage:"n must be non-negative"},{pc:[1395,1426,1642,1674],errorMessage:"overflow"},{pc:[1242],errorMessage:"transaction type is axfer"}],pcOffsetMethod:"none"},clear:{sourceInfo:[],pcOffsetMethod:"none"}},source:{approval:"I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxIDggNCAxMDAwMAogICAgYnl0ZWNibG9jayAidG9rZW5CYWxhbmNlIiAidlVzZEJhbGFuY2UiICJhc3NldCIgInJlc2VydmVzIiAiYmFsYW5jZSIgInVzZXJSZXdhcmREZWJ0IiAiZCIgInRvdGFsU3VwcGx5IiAiYWNjUmV3YXJkUGVyU2hhcmVQIiAweDAxMDAwMDAwMDAwMDAwIDB4MDEgImFkbWluRmVlQW1vdW50IiAiY2FuRGVwb3NpdCIgImNhbldpdGhkcmF3IiAib3duZXIiICJmZWVTaGFyZUJQIiAiYmFsYW5jZVJhdGlvTWluQlAiIDB4MDIgImFkbWluRmVlU2hhcmVCUCIgMHgxNTFmN2M3NSAiYSIgInJvdXRlciIgInN0b3BBdXRob3JpdHkiICJ0b2tlbkFtb3VudFJlZHVjZSIgInRva2VuQW1vdW50SW5jcmVhc2UiIDB4YmE4MTgwNzYgMHgwMyAweDAxMDAwMDAwMDAwMDAwMDAwMAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjI4CiAgICAvLyBhZG1pbkZlZVNoYXJlQlAgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiBCUCAvIDUgfSk7IC8vIERlZmF1bHQgYWRtaW4gZmVlIGlzIDIwJQogICAgYnl0ZWMgMTggLy8gImFkbWluRmVlU2hhcmVCUCIKICAgIHB1c2hpbnQgMjAwMCAvLyAyMDAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjI5CiAgICAvLyB0b3RhbFN1cHBseSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyA3IC8vICJ0b3RhbFN1cHBseSIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMwCiAgICAvLyBhY2NSZXdhcmRQZXJTaGFyZVAgPSBHbG9iYWxTdGF0ZTxiaWd1aW50Pih7IGluaXRpYWxWYWx1ZTogMG4gfSk7CiAgICBieXRlYyA4IC8vICJhY2NSZXdhcmRQZXJTaGFyZVAiCiAgICBwdXNoYnl0ZXMgMHgKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzEKICAgIC8vIGFkbWluRmVlQW1vdW50ID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjIDExIC8vICJhZG1pbkZlZUFtb3VudCIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDEKICAgIC8vIHRva2VuQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18wIC8vICJ0b2tlbkJhbGFuY2UiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQyCiAgICAvLyB2VXNkQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18xIC8vICJ2VXNkQmFsYW5jZSIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDQKICAgIC8vIHJlc2VydmVzID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzMgLy8gInJlc2VydmVzIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NgogICAgLy8gZCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyA2IC8vICJkIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MgogICAgLy8gY2FuRGVwb3NpdCA9IEdsb2JhbFN0YXRlPGJvb2xlYW4+KHsgaW5pdGlhbFZhbHVlOiB0cnVlIH0pOy8vIGlzIGRlcG9zaXQgb3BlcmF0aW9uIGFsbG93ZWQKICAgIGJ5dGVjIDEyIC8vICJjYW5EZXBvc2l0IgogICAgaW50Y18xIC8vIDEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MwogICAgLy8gY2FuV2l0aGRyYXcgPSBHbG9iYWxTdGF0ZTxib29sZWFuPih7IGluaXRpYWxWYWx1ZTogdHJ1ZSB9KTsvLyBpcyB3aXRoZHJhd24gb3BlcmF0aW9uIGFsbG93ZWQKICAgIGJ5dGVjIDEzIC8vICJjYW5XaXRoZHJhdyIKICAgIGludGNfMSAvLyAxCiAgICBhcHBfZ2xvYmFsX3B1dAoKbWFpbl9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMwogICAgLy8gZXhwb3J0IGNsYXNzIFBvb2wgZXh0ZW5kcyBSZXdhcmRNYW5hZ2VyIGltcGxlbWVudHMgQ29udmVudGlvbmFsUm91dGluZyB7CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9hZnRlcl9pZl9lbHNlQDMxCiAgICBwdXNoYnl0ZXNzIDB4NTE2ZDM0N2IgMHgwMWEzYTNmZiAweDc2MTBhNDYwIDB4ZTgzYTg3YWIgMHg5MmUwM2IxYyAweDIxZjFkZGZmIDB4ZDk3OGFkMTQgMHgwZDFiNGMwNiAweDc1YmY5YTI4IDB4ZjQ5M2Q3ZWQgMHg4ZDVjYjZkZiAweGZlMDRhNWNlIDB4MDI4ZTA4NTkgMHg0MWZjOTY2ZSAweGFiZjIwMDE0IDB4MDRiMTYxZjEgMHg2NjU5MWNjZiAweGE1YWU2YmQxIDB4YTA0YzViYzQgMHgzNjFiNjE1OSAweDMyYmJiMDExIDB4Yjg3NzllZTcgMHhlMTdiYWZiNCAvLyBtZXRob2QgImNyZWF0ZUFwcGxpY2F0aW9uKGFkZHJlc3MsYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpdm9pZCIsIG1ldGhvZCAib3B0SW5Ub0FwcGxpY2F0aW9uKCl2b2lkIiwgbWV0aG9kICJvcHRJbkFzc2V0KCl2b2lkIiwgbWV0aG9kICJub29wKCl2b2lkIiwgbWV0aG9kICJkZXBvc2l0KCl2b2lkIiwgbWV0aG9kICJ3aXRoZHJhdyh1aW50NjQpdm9pZCIsIG1ldGhvZCAic3dhcFRvVlVzZChhZGRyZXNzLHVpbnQ2NCxib29sKXVpbnQ2NCIsIG1ldGhvZCAic3dhcEZyb21WVXNkKGFkZHJlc3MsdWludDY0LHVpbnQ2NCxib29sKXVpbnQ2NCIsIG1ldGhvZCAic2V0RmVlU2hhcmUodWludDY0KXZvaWQiLCBtZXRob2QgImFkanVzdFRvdGFsTHBBbW91bnQoKXZvaWQiLCBtZXRob2QgInNldEJhbGFuY2VSYXRpb01pbkJQKHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJzdG9wRGVwb3NpdCgpdm9pZCIsIG1ldGhvZCAic3RhcnREZXBvc2l0KCl2b2lkIiwgbWV0aG9kICJzdG9wV2l0aGRyYXcoKXZvaWQiLCBtZXRob2QgInN0YXJ0V2l0aGRyYXcoKXZvaWQiLCBtZXRob2QgInNldFN0b3BBdXRob3JpdHkoYWRkcmVzcyl2b2lkIiwgbWV0aG9kICJzZXRSb3V0ZXIoYWRkcmVzcyl2b2lkIiwgbWV0aG9kICJjbGFpbVJld2FyZHMoKXZvaWQiLCBtZXRob2QgInNldEFkbWluRmVlU2hhcmUodWludDY0KXZvaWQiLCBtZXRob2QgImNsYWltQWRtaW5GZWUoKXZvaWQiLCBtZXRob2QgInBlbmRpbmdSZXdhcmQoYWNjb3VudCl1aW50NjQiLCBtZXRob2QgImRlY2ltYWxzKCl1aW50NjQiLCBtZXRob2QgInRyYW5zZmVyT3duZXJzaGlwKGFkZHJlc3Mpdm9pZCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fY3JlYXRlQXBwbGljYXRpb25fcm91dGVANSBtYWluX29wdEluVG9BcHBsaWNhdGlvbl9yb3V0ZUA2IG1haW5fb3B0SW5Bc3NldF9yb3V0ZUA3IG1haW5fbm9vcF9yb3V0ZUA4IG1haW5fZGVwb3NpdF9yb3V0ZUA5IG1haW5fd2l0aGRyYXdfcm91dGVAMTAgbWFpbl9zd2FwVG9WVXNkX3JvdXRlQDExIG1haW5fc3dhcEZyb21WVXNkX3JvdXRlQDEyIG1haW5fc2V0RmVlU2hhcmVfcm91dGVAMTMgbWFpbl9hZGp1c3RUb3RhbExwQW1vdW50X3JvdXRlQDE0IG1haW5fc2V0QmFsYW5jZVJhdGlvTWluQlBfcm91dGVAMTUgbWFpbl9zdG9wRGVwb3NpdF9yb3V0ZUAxNiBtYWluX3N0YXJ0RGVwb3NpdF9yb3V0ZUAxNyBtYWluX3N0b3BXaXRoZHJhd19yb3V0ZUAxOCBtYWluX3N0YXJ0V2l0aGRyYXdfcm91dGVAMTkgbWFpbl9zZXRTdG9wQXV0aG9yaXR5X3JvdXRlQDIwIG1haW5fc2V0Um91dGVyX3JvdXRlQDIxIG1haW5fY2xhaW1SZXdhcmRzX3JvdXRlQDIyIG1haW5fc2V0QWRtaW5GZWVTaGFyZV9yb3V0ZUAyMyBtYWluX2NsYWltQWRtaW5GZWVfcm91dGVAMjQgbWFpbl9wZW5kaW5nUmV3YXJkX3JvdXRlQDI1IG1haW5fZGVjaW1hbHNfcm91dGVAMjYgbWFpbl90cmFuc2Zlck93bmVyc2hpcF9yb3V0ZUAyNwoKbWFpbl9hZnRlcl9pZl9lbHNlQDMxOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzMKICAgIC8vIGV4cG9ydCBjbGFzcyBQb29sIGV4dGVuZHMgUmV3YXJkTWFuYWdlciBpbXBsZW1lbnRzIENvbnZlbnRpb25hbFJvdXRpbmcgewogICAgaW50Y18wIC8vIDAKICAgIHJldHVybgoKbWFpbl90cmFuc2Zlck93bmVyc2hpcF9yb3V0ZUAyNzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjE2CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzMKICAgIC8vIGV4cG9ydCBjbGFzcyBQb29sIGV4dGVuZHMgUmV3YXJkTWFuYWdlciBpbXBsZW1lbnRzIENvbnZlbnRpb25hbFJvdXRpbmcgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6MTYKICAgIC8vIEBhYmltZXRob2QoKQogICAgY2FsbHN1YiB0cmFuc2Zlck93bmVyc2hpcAogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9kZWNpbWFsc19yb3V0ZUAyNjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo5MQogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIHB1c2hieXRlcyAweDE1MWY3Yzc1MDAwMDAwMDAwMDAwMDAwMwogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX3BlbmRpbmdSZXdhcmRfcm91dGVAMjU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6ODYKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMwogICAgLy8gZXhwb3J0IGNsYXNzIFBvb2wgZXh0ZW5kcyBSZXdhcmRNYW5hZ2VyIGltcGxlbWVudHMgQ29udmVudGlvbmFsUm91dGluZyB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBY2NvdW50cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjg2CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIGNhbGxzdWIgcGVuZGluZ1Jld2FyZAogICAgaXRvYgogICAgYnl0ZWMgMTkgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fY2xhaW1BZG1pbkZlZV9yb3V0ZUAyNDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo3MgogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgY2xhaW1BZG1pbkZlZQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9zZXRBZG1pbkZlZVNoYXJlX3JvdXRlQDIzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjY1CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzMKICAgIC8vIGV4cG9ydCBjbGFzcyBQb29sIGV4dGVuZHMgUmV3YXJkTWFuYWdlciBpbXBsZW1lbnRzIENvbnZlbnRpb25hbFJvdXRpbmcgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjY1CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgc2V0QWRtaW5GZWVTaGFyZQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9jbGFpbVJld2FyZHNfcm91dGVAMjI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NTAKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGNsYWltUmV3YXJkcwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9zZXRSb3V0ZXJfcm91dGVAMjE6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozNTcKICAgIC8vIHNldFJvdXRlcihyb3V0ZXI6IEFkZHJlc3MpOiB2b2lkIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzMKICAgIC8vIGV4cG9ydCBjbGFzcyBQb29sIGV4dGVuZHMgUmV3YXJkTWFuYWdlciBpbXBsZW1lbnRzIENvbnZlbnRpb25hbFJvdXRpbmcgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzU3CiAgICAvLyBzZXRSb3V0ZXIocm91dGVyOiBBZGRyZXNzKTogdm9pZCB7CiAgICBjYWxsc3ViIHNldFJvdXRlcgogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9zZXRTdG9wQXV0aG9yaXR5X3JvdXRlQDIwOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzUyCiAgICAvLyBzZXRTdG9wQXV0aG9yaXR5KHN0b3BBdXRob3JpdHk6IEFkZHJlc3MpOiB2b2lkIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzMKICAgIC8vIGV4cG9ydCBjbGFzcyBQb29sIGV4dGVuZHMgUmV3YXJkTWFuYWdlciBpbXBsZW1lbnRzIENvbnZlbnRpb25hbFJvdXRpbmcgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzUyCiAgICAvLyBzZXRTdG9wQXV0aG9yaXR5KHN0b3BBdXRob3JpdHk6IEFkZHJlc3MpOiB2b2lkIHsKICAgIGNhbGxzdWIgc2V0U3RvcEF1dGhvcml0eQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9zdGFydFdpdGhkcmF3X3JvdXRlQDE5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzQ3CiAgICAvLyBzdGFydFdpdGhkcmF3KCk6IHZvaWQgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIHN0YXJ0V2l0aGRyYXcKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fc3RvcFdpdGhkcmF3X3JvdXRlQDE4OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzQyCiAgICAvLyBzdG9wV2l0aGRyYXcoKTogdm9pZCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgc3RvcFdpdGhkcmF3CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX3N0YXJ0RGVwb3NpdF9yb3V0ZUAxNzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMzNwogICAgLy8gc3RhcnREZXBvc2l0KCk6IHZvaWQgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIHN0YXJ0RGVwb3NpdAogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9zdG9wRGVwb3NpdF9yb3V0ZUAxNjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMzMgogICAgLy8gc3RvcERlcG9zaXQoKTogdm9pZCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgc3RvcERlcG9zaXQKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fc2V0QmFsYW5jZVJhdGlvTWluQlBfcm91dGVAMTU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMjYKICAgIC8vIHNldEJhbGFuY2VSYXRpb01pbkJQKGJhbGFuY2VSYXRpb01pbkJQOiB1aW50NjQpOiB2b2lkIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzMKICAgIC8vIGV4cG9ydCBjbGFzcyBQb29sIGV4dGVuZHMgUmV3YXJkTWFuYWdlciBpbXBsZW1lbnRzIENvbnZlbnRpb25hbFJvdXRpbmcgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzI2CiAgICAvLyBzZXRCYWxhbmNlUmF0aW9NaW5CUChiYWxhbmNlUmF0aW9NaW5CUDogdWludDY0KTogdm9pZCB7CiAgICBjYWxsc3ViIHNldEJhbGFuY2VSYXRpb01pbkJQCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2FkanVzdFRvdGFsTHBBbW91bnRfcm91dGVAMTQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMTMKICAgIC8vIGFkanVzdFRvdGFsTHBBbW91bnQoKTogdm9pZCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgYWRqdXN0VG90YWxMcEFtb3VudAogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9zZXRGZWVTaGFyZV9yb3V0ZUAxMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMwNwogICAgLy8gc2V0RmVlU2hhcmUoZmVlU2hhcmVCUDogdWludDY0KTogdm9pZCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMzCiAgICAvLyBleHBvcnQgY2xhc3MgUG9vbCBleHRlbmRzIFJld2FyZE1hbmFnZXIgaW1wbGVtZW50cyBDb252ZW50aW9uYWxSb3V0aW5nIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMwNwogICAgLy8gc2V0RmVlU2hhcmUoZmVlU2hhcmVCUDogdWludDY0KTogdm9pZCB7CiAgICBjYWxsc3ViIHNldEZlZVNoYXJlCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX3N3YXBGcm9tVlVzZF9yb3V0ZUAxMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI1OS0yNjQKICAgIC8vIHN3YXBGcm9tVlVzZCgKICAgIC8vICAgdXNlcjogQWRkcmVzcywKICAgIC8vICAgYW1vdW50OiB1aW50NjQsCiAgICAvLyAgIHJlY2VpdmVBbW91bnRNaW46IHVpbnQ2NCwKICAgIC8vICAgemVyb0ZlZTogYm9vbGVhbiwKICAgIC8vICk6IHVpbnQ2NCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMzCiAgICAvLyBleHBvcnQgY2xhc3MgUG9vbCBleHRlbmRzIFJld2FyZE1hbmFnZXIgaW1wbGVtZW50cyBDb252ZW50aW9uYWxSb3V0aW5nIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDQKICAgIGludGNfMCAvLyAwCiAgICBnZXRiaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI1OS0yNjQKICAgIC8vIHN3YXBGcm9tVlVzZCgKICAgIC8vICAgdXNlcjogQWRkcmVzcywKICAgIC8vICAgYW1vdW50OiB1aW50NjQsCiAgICAvLyAgIHJlY2VpdmVBbW91bnRNaW46IHVpbnQ2NCwKICAgIC8vICAgemVyb0ZlZTogYm9vbGVhbiwKICAgIC8vICk6IHVpbnQ2NCB7CiAgICBjYWxsc3ViIHN3YXBGcm9tVlVzZAogICAgaXRvYgogICAgYnl0ZWMgMTkgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fc3dhcFRvVlVzZF9yb3V0ZUAxMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIxMy0yMTcKICAgIC8vIHN3YXBUb1ZVc2QoCiAgICAvLyAgIHVzZXI6IEFkZHJlc3MsCiAgICAvLyAgIGFtb3VudDogdWludDY0LAogICAgLy8gICB6ZXJvRmVlOiBib29sZWFuLAogICAgLy8gKTogdWludDY0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzMKICAgIC8vIGV4cG9ydCBjbGFzcyBQb29sIGV4dGVuZHMgUmV3YXJkTWFuYWdlciBpbXBsZW1lbnRzIENvbnZlbnRpb25hbFJvdXRpbmcgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgaW50Y18wIC8vIDAKICAgIGdldGJpdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjEzLTIxNwogICAgLy8gc3dhcFRvVlVzZCgKICAgIC8vICAgdXNlcjogQWRkcmVzcywKICAgIC8vICAgYW1vdW50OiB1aW50NjQsCiAgICAvLyAgIHplcm9GZWU6IGJvb2xlYW4sCiAgICAvLyApOiB1aW50NjQgewogICAgY2FsbHN1YiBzd2FwVG9WVXNkCiAgICBpdG9iCiAgICBieXRlYyAxOSAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl93aXRoZHJhd19yb3V0ZUAxMDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE2OAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMzCiAgICAvLyBleHBvcnQgY2xhc3MgUG9vbCBleHRlbmRzIFJld2FyZE1hbmFnZXIgaW1wbGVtZW50cyBDb252ZW50aW9uYWxSb3V0aW5nIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE2OAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHdpdGhkcmF3CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2RlcG9zaXRfcm91dGVAOToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjEyOQogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZGVwb3NpdAogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9ub29wX3JvdXRlQDg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo5MgogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fb3B0SW5Bc3NldF9yb3V0ZUA3OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NzcKICAgIC8vIG9wdEluQXNzZXQoKTogdm9pZCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgb3B0SW5Bc3NldAogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9vcHRJblRvQXBwbGljYXRpb25fcm91dGVANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjY4CiAgICAvLyBvcHRJblRvQXBwbGljYXRpb24oKTogdm9pZCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzEgLy8gT3B0SW4KICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBPcHRJbgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIG9wdEluVG9BcHBsaWNhdGlvbgogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9jcmVhdGVBcHBsaWNhdGlvbl9yb3V0ZUA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTUKICAgIC8vIGNyZWF0ZUFwcGxpY2F0aW9uKG93bmVyOiBBZGRyZXNzLCByb3V0ZXI6IEFkZHJlc3MsIGE6IHVpbnQ2NCwgYXNzZXRJZDogdWludDY0LCBmZWVTaGFyZUJQOiB1aW50NjQsIGJhbGFuY2VSYXRpb01pbkJQOiB1aW50NjQpOiB2b2lkIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMwogICAgLy8gZXhwb3J0IGNsYXNzIFBvb2wgZXh0ZW5kcyBSZXdhcmRNYW5hZ2VyIGltcGxlbWVudHMgQ29udmVudGlvbmFsUm91dGluZyB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA1CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA2CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1NQogICAgLy8gY3JlYXRlQXBwbGljYXRpb24ob3duZXI6IEFkZHJlc3MsIHJvdXRlcjogQWRkcmVzcywgYTogdWludDY0LCBhc3NldElkOiB1aW50NjQsIGZlZVNoYXJlQlA6IHVpbnQ2NCwgYmFsYW5jZVJhdGlvTWluQlA6IHVpbnQ2NCk6IHZvaWQgewogICAgY2FsbHN1YiBjcmVhdGVBcHBsaWNhdGlvbgogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czo6YmlndWludFRvVWludDY0TW9kdWxvKHY6IGJ5dGVzKSAtPiB1aW50NjQ6CmJpZ3VpbnRUb1VpbnQ2NE1vZHVsbzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czoyNgogICAgLy8gZXhwb3J0IGZ1bmN0aW9uIGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbyh2OiBiaWd1aW50KTogdWludDY0IHsKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjI4CiAgICAvLyBjb25zdCBsZW4gPSBvcC5sZW4oYik7CiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6MjkKICAgIC8vIGNvbnN0IHN0YXJ0OiB1aW50NjQgPSBsZW4gPiA4ID8gKGxlbiAtIDgpIDogMDsKICAgIGludGNfMiAvLyA4CiAgICA+CiAgICBieiBiaWd1aW50VG9VaW50NjRNb2R1bG9fdGVybmFyeV9mYWxzZUAyCiAgICBmcmFtZV9kaWcgMAogICAgaW50Y18yIC8vIDgKICAgIC0KCmJpZ3VpbnRUb1VpbnQ2NE1vZHVsb190ZXJuYXJ5X21lcmdlQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6MzAKICAgIC8vIGNvbnN0IGxhc3Q4ID0gYi5zbGljZShzdGFydCk7ICAgICAgICAgICAvLyBrZWVwIGxlYXN0LXNpZ25pZmljYW50IDggYnl0ZXMKICAgIGR1cAogICAgZnJhbWVfZGlnIDAKICAgIGR1cAogICAgY292ZXIgMwogICAgPj0KICAgIGRpZyAyCiAgICBzd2FwCiAgICBzZWxlY3QKICAgIGZyYW1lX2RpZyAtMQogICAgc3dhcAogICAgdW5jb3ZlciAyCiAgICBzdWJzdHJpbmczCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6MzEKICAgIC8vIHJldHVybiBvcC5idG9pKGxhc3Q4KTsgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29udmVydCB0byB1aW50NjQKICAgIGJ0b2kKICAgIHN3YXAKICAgIHJldHN1YgoKYmlndWludFRvVWludDY0TW9kdWxvX3Rlcm5hcnlfZmFsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czoyOQogICAgLy8gY29uc3Qgc3RhcnQ6IHVpbnQ2NCA9IGxlbiA+IDggPyAobGVuIC0gOCkgOiAwOwogICAgaW50Y18wIC8vIDAKICAgIGIgYmlndWludFRvVWludDY0TW9kdWxvX3Rlcm5hcnlfbWVyZ2VAMwoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLmNyZWF0ZUFwcGxpY2F0aW9uKG93bmVyOiBieXRlcywgcm91dGVyOiBieXRlcywgYTogdWludDY0LCBhc3NldElkOiB1aW50NjQsIGZlZVNoYXJlQlA6IHVpbnQ2NCwgYmFsYW5jZVJhdGlvTWluQlA6IHVpbnQ2NCkgLT4gdm9pZDoKY3JlYXRlQXBwbGljYXRpb246CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1NQogICAgLy8gY3JlYXRlQXBwbGljYXRpb24ob3duZXI6IEFkZHJlc3MsIHJvdXRlcjogQWRkcmVzcywgYTogdWludDY0LCBhc3NldElkOiB1aW50NjQsIGZlZVNoYXJlQlA6IHVpbnQ2NCwgYmFsYW5jZVJhdGlvTWluQlA6IHVpbnQ2NCk6IHZvaWQgewogICAgcHJvdG8gNiAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czo2CiAgICAvLyBwcm90ZWN0ZWQgb3duZXIgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPigpOwogICAgYnl0ZWMgMTQgLy8gIm93bmVyIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6OQogICAgLy8gdGhpcy5vd25lci52YWx1ZSA9IG93bmVyOwogICAgZnJhbWVfZGlnIC02CiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjI3CiAgICAvLyBhc3NldCA9IEdsb2JhbFN0YXRlPEFzc2V0PigpOwogICAgYnl0ZWNfMiAvLyAiYXNzZXQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzgKICAgIC8vIHRoaXMuYXNzZXQudmFsdWUgPSBBc3NldChhc3NldElkKTsKICAgIGZyYW1lX2RpZyAtMwogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ1CiAgICAvLyBhID0gR2xvYmFsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgMjAgLy8gImEiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1NwogICAgLy8gdGhpcy5hLnZhbHVlID0gYTsKICAgIGZyYW1lX2RpZyAtNAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQwCiAgICAvLyByb3V0ZXIgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPigpOy8vIGlzIGRlcG9zaXQgb3BlcmF0aW9uIGFsbG93ZWQKICAgIGJ5dGVjIDIxIC8vICJyb3V0ZXIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1OAogICAgLy8gdGhpcy5yb3V0ZXIudmFsdWUgPSByb3V0ZXI7CiAgICBmcmFtZV9kaWcgLTUKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MQogICAgLy8gcHJpdmF0ZSBzdG9wQXV0aG9yaXR5ID0gR2xvYmFsU3RhdGU8QWRkcmVzcz4oKTsvLyBjYW4gcmVzdHJpY3QgZGVwb3NpdCBvciB3aXRoZHJhdyBvcGVyYXRpb25zCiAgICBieXRlYyAyMiAvLyAic3RvcEF1dGhvcml0eSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjU5CiAgICAvLyB0aGlzLnN0b3BBdXRob3JpdHkudmFsdWUgPSBvd25lcjsKICAgIGZyYW1lX2RpZyAtNgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM5CiAgICAvLyBmZWVTaGFyZUJQID0gR2xvYmFsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgMTUgLy8gImZlZVNoYXJlQlAiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo2MAogICAgLy8gdGhpcy5mZWVTaGFyZUJQLnZhbHVlID0gZmVlU2hhcmVCUDsKICAgIGZyYW1lX2RpZyAtMgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQzCiAgICAvLyBiYWxhbmNlUmF0aW9NaW5CUCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDE2IC8vICJiYWxhbmNlUmF0aW9NaW5CUCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjYxCiAgICAvLyB0aGlzLmJhbGFuY2VSYXRpb01pbkJQLnZhbHVlID0gYmFsYW5jZVJhdGlvTWluQlA7CiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjcKICAgIC8vIGFzc2V0ID0gR2xvYmFsU3RhdGU8QXNzZXQ+KCk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMiAvLyAiYXNzZXQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NjMKICAgIC8vIGNvbnN0IGRlY2ltYWxzID0gdGhpcy5hc3NldC52YWx1ZS5kZWNpbWFsczsKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXREZWNpbWFscwogICAgc3dhcAogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgIGFzc2VydCAvLyBhc3NldCBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIwCiAgICAvLyBjb25zdCBTWVNURU1fUFJFQ0lTSU9OOiB1aW50NjQgPSAzOwogICAgcHVzaGludCAzIC8vIDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjY0CiAgICAvLyB0aGlzLnRva2VuQW1vdW50UmVkdWNlLnZhbHVlID0gZGVjaW1hbHMgPiBTWVNURU1fUFJFQ0lTSU9OID8gMTAgKiogKGRlY2ltYWxzIC0gU1lTVEVNX1BSRUNJU0lPTikgOiAwOwogICAgPgogICAgYnogY3JlYXRlQXBwbGljYXRpb25fdGVybmFyeV9mYWxzZUAyCiAgICBmcmFtZV9kaWcgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjAKICAgIC8vIGNvbnN0IFNZU1RFTV9QUkVDSVNJT046IHVpbnQ2NCA9IDM7CiAgICBwdXNoaW50IDMgLy8gMwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NjQKICAgIC8vIHRoaXMudG9rZW5BbW91bnRSZWR1Y2UudmFsdWUgPSBkZWNpbWFscyA+IFNZU1RFTV9QUkVDSVNJT04gPyAxMCAqKiAoZGVjaW1hbHMgLSBTWVNURU1fUFJFQ0lTSU9OKSA6IDA7CiAgICAtCiAgICBwdXNoaW50IDEwIC8vIDEwCiAgICBzd2FwCiAgICBleHAKCmNyZWF0ZUFwcGxpY2F0aW9uX3Rlcm5hcnlfbWVyZ2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ4CiAgICAvLyBwcml2YXRlIHRva2VuQW1vdW50UmVkdWNlID0gR2xvYmFsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgMjMgLy8gInRva2VuQW1vdW50UmVkdWNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NjQKICAgIC8vIHRoaXMudG9rZW5BbW91bnRSZWR1Y2UudmFsdWUgPSBkZWNpbWFscyA+IFNZU1RFTV9QUkVDSVNJT04gPyAxMCAqKiAoZGVjaW1hbHMgLSBTWVNURU1fUFJFQ0lTSU9OKSA6IDA7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NjUKICAgIC8vIHRoaXMudG9rZW5BbW91bnRJbmNyZWFzZS52YWx1ZSA9IGRlY2ltYWxzIDwgU1lTVEVNX1BSRUNJU0lPTiA/IDEwICoqIChTWVNURU1fUFJFQ0lTSU9OIC0gZGVjaW1hbHMpIDogMDsKICAgIGZyYW1lX2RpZyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMAogICAgLy8gY29uc3QgU1lTVEVNX1BSRUNJU0lPTjogdWludDY0ID0gMzsKICAgIHB1c2hpbnQgMyAvLyAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo2NQogICAgLy8gdGhpcy50b2tlbkFtb3VudEluY3JlYXNlLnZhbHVlID0gZGVjaW1hbHMgPCBTWVNURU1fUFJFQ0lTSU9OID8gMTAgKiogKFNZU1RFTV9QUkVDSVNJT04gLSBkZWNpbWFscykgOiAwOwogICAgPAogICAgYnogY3JlYXRlQXBwbGljYXRpb25fdGVybmFyeV9mYWxzZUA1CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMAogICAgLy8gY29uc3QgU1lTVEVNX1BSRUNJU0lPTjogdWludDY0ID0gMzsKICAgIHB1c2hpbnQgMyAvLyAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo2NQogICAgLy8gdGhpcy50b2tlbkFtb3VudEluY3JlYXNlLnZhbHVlID0gZGVjaW1hbHMgPCBTWVNURU1fUFJFQ0lTSU9OID8gMTAgKiogKFNZU1RFTV9QUkVDSVNJT04gLSBkZWNpbWFscykgOiAwOwogICAgZnJhbWVfZGlnIDAKICAgIC0KICAgIHB1c2hpbnQgMTAgLy8gMTAKICAgIHN3YXAKICAgIGV4cAoKY3JlYXRlQXBwbGljYXRpb25fdGVybmFyeV9tZXJnZUA2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDkKICAgIC8vIHByaXZhdGUgdG9rZW5BbW91bnRJbmNyZWFzZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDI0IC8vICJ0b2tlbkFtb3VudEluY3JlYXNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NjUKICAgIC8vIHRoaXMudG9rZW5BbW91bnRJbmNyZWFzZS52YWx1ZSA9IGRlY2ltYWxzIDwgU1lTVEVNX1BSRUNJU0lPTiA/IDEwICoqIChTWVNURU1fUFJFQ0lTSU9OIC0gZGVjaW1hbHMpIDogMDsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCmNyZWF0ZUFwcGxpY2F0aW9uX3Rlcm5hcnlfZmFsc2VANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjY1CiAgICAvLyB0aGlzLnRva2VuQW1vdW50SW5jcmVhc2UudmFsdWUgPSBkZWNpbWFscyA8IFNZU1RFTV9QUkVDSVNJT04gPyAxMCAqKiAoU1lTVEVNX1BSRUNJU0lPTiAtIGRlY2ltYWxzKSA6IDA7CiAgICBpbnRjXzAgLy8gMAogICAgYiBjcmVhdGVBcHBsaWNhdGlvbl90ZXJuYXJ5X21lcmdlQDYKCmNyZWF0ZUFwcGxpY2F0aW9uX3Rlcm5hcnlfZmFsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjY0CiAgICAvLyB0aGlzLnRva2VuQW1vdW50UmVkdWNlLnZhbHVlID0gZGVjaW1hbHMgPiBTWVNURU1fUFJFQ0lTSU9OID8gMTAgKiogKGRlY2ltYWxzIC0gU1lTVEVNX1BSRUNJU0lPTikgOiAwOwogICAgaW50Y18wIC8vIDAKICAgIGIgY3JlYXRlQXBwbGljYXRpb25fdGVybmFyeV9tZXJnZUAzCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wub3B0SW5Ub0FwcGxpY2F0aW9uKCkgLT4gdm9pZDoKb3B0SW5Ub0FwcGxpY2F0aW9uOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NjgKICAgIC8vIG9wdEluVG9BcHBsaWNhdGlvbigpOiB2b2lkIHsKICAgIHByb3RvIDAgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NjkKICAgIC8vIHN1cGVyLm9wdEluVG9BcHBsaWNhdGlvbihUeG4uc2VuZGVyKTsKICAgIHR4biBTZW5kZXIKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjQyCiAgICAvLyBpZiAoIXRoaXMuYmFsYW5jZSh0bykuaGFzVmFsdWUpIHsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzMKICAgIC8vIGJhbGFuY2UgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDQgLy8gImJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NDIKICAgIC8vIGlmICghdGhpcy5iYWxhbmNlKHRvKS5oYXNWYWx1ZSkgewogICAgYXBwX2xvY2FsX2dldF9leAogICAgYnVyeSAxCiAgICBibnogb3B0SW5Ub0FwcGxpY2F0aW9uX2FmdGVyX2lmX2Vsc2VAMwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjQzCiAgICAvLyB0aGlzLmJhbGFuY2UodG8pLnZhbHVlID0gMDsKICAgIGZyYW1lX2RpZyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzMKICAgIC8vIGJhbGFuY2UgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDQgLy8gImJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NDMKICAgIC8vIHRoaXMuYmFsYW5jZSh0bykudmFsdWUgPSAwOwogICAgaW50Y18wIC8vIDAKICAgIGFwcF9sb2NhbF9wdXQKCm9wdEluVG9BcHBsaWNhdGlvbl9hZnRlcl9pZl9lbHNlQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NDUKICAgIC8vIGlmICghdGhpcy51c2VyUmV3YXJkRGVidCh0bykuaGFzVmFsdWUpIHsKICAgIGZyYW1lX2RpZyAwCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjM0CiAgICAvLyB1c2VyUmV3YXJkRGVidCA9IExvY2FsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgNSAvLyAidXNlclJld2FyZERlYnQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NDUKICAgIC8vIGlmICghdGhpcy51c2VyUmV3YXJkRGVidCh0bykuaGFzVmFsdWUpIHsKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGJ1cnkgMQogICAgYm56IG9wdEluVG9BcHBsaWNhdGlvbl9hZnRlcl9pZl9lbHNlQDUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo0NgogICAgLy8gdGhpcy51c2VyUmV3YXJkRGVidCh0bykudmFsdWUgPSAwOwogICAgZnJhbWVfZGlnIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozNAogICAgLy8gdXNlclJld2FyZERlYnQgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDUgLy8gInVzZXJSZXdhcmREZWJ0IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjQ2CiAgICAvLyB0aGlzLnVzZXJSZXdhcmREZWJ0KHRvKS52YWx1ZSA9IDA7CiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2xvY2FsX3B1dAoKb3B0SW5Ub0FwcGxpY2F0aW9uX2FmdGVyX2lmX2Vsc2VANToKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLm9wdEluQXNzZXQoKSAtPiB2b2lkOgpvcHRJbkFzc2V0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NzgKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6ODEtODcKICAgIC8vIGl0eG4KICAgIC8vICAgLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICAgIHhmZXJBc3NldDogdGhpcy5hc3NldC52YWx1ZSwKICAgIC8vICAgICBhc3NldEFtb3VudDogMCwKICAgIC8vICAgICBhc3NldFJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpOwogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjI3CiAgICAvLyBhc3NldCA9IEdsb2JhbFN0YXRlPEFzc2V0PigpOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzIgLy8gImFzc2V0IgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjg1CiAgICAvLyBhc3NldFJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjg0CiAgICAvLyBhc3NldEFtb3VudDogMCwKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6ODEtODYKICAgIC8vIGl0eG4KICAgIC8vICAgLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICAgIHhmZXJBc3NldDogdGhpcy5hc3NldC52YWx1ZSwKICAgIC8vICAgICBhc3NldEFtb3VudDogMCwKICAgIC8vICAgICBhc3NldFJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgfSkKICAgIGludGNfMyAvLyA0CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjgxLTg3CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsCiAgICAvLyAgICAgYXNzZXRBbW91bnQ6IDAsCiAgICAvLyAgICAgYXNzZXRSZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKTsKICAgIGl0eG5fc3VibWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo4OQogICAgLy8gbG9nKCdQb29sOiBvcHQtaW4gY29tcGxldGVkJyk7CiAgICBwdXNoYnl0ZXMgIlBvb2w6IG9wdC1pbiBjb21wbGV0ZWQiCiAgICBsb2cKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLm9ubHlSb3V0ZXIoKSAtPiB2b2lkOgpvbmx5Um91dGVyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OTcKICAgIC8vIGFzc2VydChvcC5UeG4uc2VuZGVyLmJ5dGVzID09PSB0aGlzLnJvdXRlci52YWx1ZS5ieXRlcywgJ1Bvb2w6IG9ubHkgcm91dGVyJyk7CiAgICB0eG4gU2VuZGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MAogICAgLy8gcm91dGVyID0gR2xvYmFsU3RhdGU8QWRkcmVzcz4oKTsvLyBpcyBkZXBvc2l0IG9wZXJhdGlvbiBhbGxvd2VkCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMjEgLy8gInJvdXRlciIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo5NwogICAgLy8gYXNzZXJ0KG9wLlR4bi5zZW5kZXIuYnl0ZXMgPT09IHRoaXMucm91dGVyLnZhbHVlLmJ5dGVzLCAnUG9vbDogb25seSByb3V0ZXInKTsKICAgID09CiAgICBhc3NlcnQgLy8gUG9vbDogb25seSByb3V0ZXIKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLm9ubHlTdG9wQXV0aG9yaXR5KCkgLT4gdm9pZDoKb25seVN0b3BBdXRob3JpdHk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMDEKICAgIC8vIGFzc2VydChvcC5UeG4uc2VuZGVyLmJ5dGVzID09PSB0aGlzLnN0b3BBdXRob3JpdHkudmFsdWUuYnl0ZXMsICdQb29sOiBpcyBub3Qgc3RvcEF1dGhvcml0eScpOwogICAgdHhuIFNlbmRlcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTEKICAgIC8vIHByaXZhdGUgc3RvcEF1dGhvcml0eSA9IEdsb2JhbFN0YXRlPEFkZHJlc3M+KCk7Ly8gY2FuIHJlc3RyaWN0IGRlcG9zaXQgb3Igd2l0aGRyYXcgb3BlcmF0aW9ucwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDIyIC8vICJzdG9wQXV0aG9yaXR5IgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjEwMQogICAgLy8gYXNzZXJ0KG9wLlR4bi5zZW5kZXIuYnl0ZXMgPT09IHRoaXMuc3RvcEF1dGhvcml0eS52YWx1ZS5ieXRlcywgJ1Bvb2w6IGlzIG5vdCBzdG9wQXV0aG9yaXR5Jyk7CiAgICA9PQogICAgYXNzZXJ0IC8vIFBvb2w6IGlzIG5vdCBzdG9wQXV0aG9yaXR5CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC52YWxpZGF0ZUJhbGFuY2VSYXRpbygpIC0+IHZvaWQ6CnZhbGlkYXRlQmFsYW5jZVJhdGlvOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTA3CiAgICAvLyBwcml2YXRlIHZhbGlkYXRlQmFsYW5jZVJhdGlvKCk6IHZvaWQgewogICAgcHJvdG8gMCAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MQogICAgLy8gdG9rZW5CYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18wIC8vICJ0b2tlbkJhbGFuY2UiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgc3dhcAogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQyCiAgICAvLyB2VXNkQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgc3dhcAogICAgZHVwCiAgICBjb3ZlciAyCiAgICBjb3ZlciAzCiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMTAKICAgIC8vIGlmICh0b2tlbkJhbGFuY2UgPiB2VXNkQmFsYW5jZSkgewogICAgPgogICAgYnogdmFsaWRhdGVCYWxhbmNlUmF0aW9fZWxzZV9ib2R5QDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjExMQogICAgLy8gYXNzZXJ0KCh2VXNkQmFsYW5jZSAqIEJQKSAvIHRva2VuQmFsYW5jZSA+PSB0aGlzLmJhbGFuY2VSYXRpb01pbkJQLnZhbHVlLCAnUG9vbDogbG93IHZVU0QgYmFsYW5jZScpOwogICAgZnJhbWVfZGlnIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxOQogICAgLy8gZXhwb3J0IGNvbnN0IEJQOiB1aW50NjQgPSAxMF8wMDA7CiAgICBpbnRjIDQgLy8gMTAwMDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjExMQogICAgLy8gYXNzZXJ0KCh2VXNkQmFsYW5jZSAqIEJQKSAvIHRva2VuQmFsYW5jZSA+PSB0aGlzLmJhbGFuY2VSYXRpb01pbkJQLnZhbHVlLCAnUG9vbDogbG93IHZVU0QgYmFsYW5jZScpOwogICAgKgogICAgZnJhbWVfZGlnIDAKICAgIC8KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQzCiAgICAvLyBiYWxhbmNlUmF0aW9NaW5CUCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxNiAvLyAiYmFsYW5jZVJhdGlvTWluQlAiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTExCiAgICAvLyBhc3NlcnQoKHZVc2RCYWxhbmNlICogQlApIC8gdG9rZW5CYWxhbmNlID49IHRoaXMuYmFsYW5jZVJhdGlvTWluQlAudmFsdWUsICdQb29sOiBsb3cgdlVTRCBiYWxhbmNlJyk7CiAgICA+PQogICAgYXNzZXJ0IC8vIFBvb2w6IGxvdyB2VVNEIGJhbGFuY2UKCnZhbGlkYXRlQmFsYW5jZVJhdGlvX2FmdGVyX2lmX2Vsc2VANToKICAgIHJldHN1YgoKdmFsaWRhdGVCYWxhbmNlUmF0aW9fZWxzZV9ib2R5QDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMTIKICAgIC8vIH0gZWxzZSBpZiAodG9rZW5CYWxhbmNlIDwgdlVzZEJhbGFuY2UpIHsKICAgIGZyYW1lX2RpZyAwCiAgICBmcmFtZV9kaWcgMQogICAgPAogICAgYnogdmFsaWRhdGVCYWxhbmNlUmF0aW9fYWZ0ZXJfaWZfZWxzZUA1CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMTMKICAgIC8vIGFzc2VydCgodG9rZW5CYWxhbmNlICogQlApIC8gdlVzZEJhbGFuY2UgPj0gdGhpcy5iYWxhbmNlUmF0aW9NaW5CUC52YWx1ZSwgJ1Bvb2w6IGxvdyB0b2tlbiBiYWxhbmNlJyk7CiAgICBmcmFtZV9kaWcgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjE5CiAgICAvLyBleHBvcnQgY29uc3QgQlA6IHVpbnQ2NCA9IDEwXzAwMDsKICAgIGludGMgNCAvLyAxMDAwMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTEzCiAgICAvLyBhc3NlcnQoKHRva2VuQmFsYW5jZSAqIEJQKSAvIHZVc2RCYWxhbmNlID49IHRoaXMuYmFsYW5jZVJhdGlvTWluQlAudmFsdWUsICdQb29sOiBsb3cgdG9rZW4gYmFsYW5jZScpOwogICAgKgogICAgZnJhbWVfZGlnIDEKICAgIC8KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQzCiAgICAvLyBiYWxhbmNlUmF0aW9NaW5CUCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxNiAvLyAiYmFsYW5jZVJhdGlvTWluQlAiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTEzCiAgICAvLyBhc3NlcnQoKHRva2VuQmFsYW5jZSAqIEJQKSAvIHZVc2RCYWxhbmNlID49IHRoaXMuYmFsYW5jZVJhdGlvTWluQlAudmFsdWUsICdQb29sOiBsb3cgdG9rZW4gYmFsYW5jZScpOwogICAgPj0KICAgIGFzc2VydCAvLyBQb29sOiBsb3cgdG9rZW4gYmFsYW5jZQogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuZGVwb3NpdCgpIC0+IHZvaWQ6CmRlcG9zaXQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMjktMTMwCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIC8vIGRlcG9zaXQoKTogdm9pZCB7CiAgICBwcm90byAwIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUyCiAgICAvLyBjYW5EZXBvc2l0ID0gR2xvYmFsU3RhdGU8Ym9vbGVhbj4oeyBpbml0aWFsVmFsdWU6IHRydWUgfSk7Ly8gaXMgZGVwb3NpdCBvcGVyYXRpb24gYWxsb3dlZAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDEyIC8vICJjYW5EZXBvc2l0IgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjExOAogICAgLy8gYXNzZXJ0KHRoaXMuY2FuRGVwb3NpdC52YWx1ZSwgJ1Bvb2w6IGRlcG9zaXQgcHJvaGliaXRlZCcpOwogICAgYXNzZXJ0IC8vIFBvb2w6IGRlcG9zaXQgcHJvaGliaXRlZAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDYKICAgIC8vIGQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDYgLy8gImQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgc3dhcAogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyNwogICAgLy8gYXNzZXQgPSBHbG9iYWxTdGF0ZTxBc3NldD4oKTsKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18yIC8vICJhc3NldCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6MzYKICAgIC8vIGFzc2VydChUeG4uZ3JvdXBJbmRleCA+IDAsIGBBc3NldCB0eG4gbWlzc2luZ2ApOwogICAgdHhuIEdyb3VwSW5kZXgKICAgIGFzc2VydCAvLyBBc3NldCB0eG4gbWlzc2luZwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjM5CiAgICAvLyBjb25zdCBwcmV2SWR4OiB1aW50NjQgPSBUeG4uZ3JvdXBJbmRleCAtIDE7CiAgICB0eG4gR3JvdXBJbmRleAogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czo0MQogICAgLy8gY29uc3QgcGF5ID0gZ3R4bi5Bc3NldFRyYW5zZmVyVHhuKHByZXZJZHgpOwogICAgZHVwCiAgICBndHhucyBUeXBlRW51bQogICAgaW50Y18zIC8vIGF4ZmVyCiAgICA9PQogICAgYXNzZXJ0IC8vIHRyYW5zYWN0aW9uIHR5cGUgaXMgYXhmZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czo0NAogICAgLy8gYXNzZXJ0KHBheS5hc3NldFJlY2VpdmVyID09PSBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywgYEFzc2V0IG11c3QgZ28gdG8gYXBwYCk7CiAgICBkdXAKICAgIGd0eG5zIEFzc2V0UmVjZWl2ZXIKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICA9PQogICAgYXNzZXJ0IC8vIEFzc2V0IG11c3QgZ28gdG8gYXBwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6NDUKICAgIC8vIGFzc2VydChwYXkueGZlckFzc2V0LmlkID09PSBhc3NldElkLCBgV3JvbmcgYXNzZXRgKTsKICAgIGR1cAogICAgZ3R4bnMgWGZlckFzc2V0CiAgICB1bmNvdmVyIDIKICAgID09CiAgICBhc3NlcnQgLy8gV3JvbmcgYXNzZXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czo0OAogICAgLy8gYXNzZXJ0KHBheS5yZWtleVRvID09PSBHbG9iYWwuemVyb0FkZHJlc3MsIGBSZWtleSBub3QgYWxsb3dlZGApOwogICAgZHVwCiAgICBndHhucyBSZWtleVRvCiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKICAgID09CiAgICBhc3NlcnQgLy8gUmVrZXkgbm90IGFsbG93ZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czo0OQogICAgLy8gYXNzZXJ0KHBheS5hc3NldENsb3NlVG8gPT09IEdsb2JhbC56ZXJvQWRkcmVzcywgYENsb3NlVG8gbm90IGFsbG93ZWRgKTsKICAgIGR1cAogICAgZ3R4bnMgQXNzZXRDbG9zZVRvCiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKICAgID09CiAgICBhc3NlcnQgLy8gQ2xvc2VUbyBub3QgYWxsb3dlZAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjUwCiAgICAvLyByZXR1cm4gcGF5LmFzc2V0QW1vdW50OwogICAgZ3R4bnMgQXNzZXRBbW91bnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjEzNgogICAgLy8gY29uc3QgYW1vdW50U1AgPSB0aGlzLnRvU3lzdGVtUHJlY2lzaW9uKGFtb3VudCk7CiAgICBjYWxsc3ViIHRvU3lzdGVtUHJlY2lzaW9uCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjEzNwogICAgLy8gYXNzZXJ0KGFtb3VudFNQID4gMCwgJ1Bvb2w6IHRvbyBsaXR0bGUnKTsKICAgIGR1cAogICAgYXNzZXJ0IC8vIFBvb2w6IHRvbyBsaXR0bGUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ0CiAgICAvLyByZXNlcnZlcyA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMyAvLyAicmVzZXJ2ZXMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTQwCiAgICAvLyB0aGlzLnJlc2VydmVzLnZhbHVlICs9IGFtb3VudFNQOwogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDQKICAgIC8vIHJlc2VydmVzID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzMgLy8gInJlc2VydmVzIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTQwCiAgICAvLyB0aGlzLnJlc2VydmVzLnZhbHVlICs9IGFtb3VudFNQOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQxCiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gInRva2VuQmFsYW5jZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBzd2FwCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGNvdmVyIDMKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQyCiAgICAvLyB2VXNkQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgc3dhcAogICAgZHVwCiAgICBjb3ZlciAyCiAgICBjb3ZlciA0CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNDUKICAgIC8vIGNvbnN0IG9sZEJhbGFuY2U6IHVpbnQ2NCA9ICh0b2tlbkJhbGFuY2UgKyB2VXNkQmFsYW5jZSk7CiAgICArCiAgICBzd2FwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNDYKICAgIC8vIGlmIChvbGREID09PSAwIHx8IG9sZEJhbGFuY2UgPT09IDApIHsKICAgIGJ6IGRlcG9zaXRfaWZfYm9keUAyCiAgICBmcmFtZV9kaWcgNAogICAgYm56IGRlcG9zaXRfZWxzZV9ib2R5QDMKCmRlcG9zaXRfaWZfYm9keUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTQ4CiAgICAvLyBjb25zdCBoYWxmQW1vdW50OiB1aW50NjQgPSBhbW91bnRTUCA+PiAxOwogICAgZnJhbWVfZGlnIDEKICAgIGludGNfMSAvLyAxCiAgICBzaHIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQxCiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gInRva2VuQmFsYW5jZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNDkKICAgIC8vIHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlICs9IGhhbGZBbW91bnQ7CiAgICBkaWcgMQogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDEKICAgIC8vIHRva2VuQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18wIC8vICJ0b2tlbkJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNDkKICAgIC8vIHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlICs9IGhhbGZBbW91bnQ7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDIKICAgIC8vIHZVc2RCYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18xIC8vICJ2VXNkQmFsYW5jZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNTAKICAgIC8vIHRoaXMudlVzZEJhbGFuY2UudmFsdWUgKz0gaGFsZkFtb3VudDsKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQyCiAgICAvLyB2VXNkQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18xIC8vICJ2VXNkQmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE1MAogICAgLy8gdGhpcy52VXNkQmFsYW5jZS52YWx1ZSArPSBoYWxmQW1vdW50OwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKCmRlcG9zaXRfYWZ0ZXJfaWZfZWxzZUA0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTU2CiAgICAvLyB0aGlzLnVwZGF0ZUQoKTsKICAgIGNhbGxzdWIgdXBkYXRlRAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTU4CiAgICAvLyB0aGlzLmRlcG9zaXRMcChUeG4uc2VuZGVyLCB0aGlzLmQudmFsdWUgLSBvbGREKTsKICAgIHR4biBTZW5kZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyBkID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA2IC8vICJkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE1OAogICAgLy8gdGhpcy5kZXBvc2l0THAoVHhuLnNlbmRlciwgdGhpcy5kLnZhbHVlIC0gb2xkRCk7CiAgICBmcmFtZV9kaWcgMAogICAgLQogICAgY2FsbHN1YiBkZXBvc2l0THAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQxCiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gInRva2VuQmFsYW5jZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMQogICAgLy8gY29uc3QgTUFYX1RPS0VOX0JBTEFOQ0U6IHVpbnQ2NCA9IDIgKiogNDA7IC8vIE1heCBwb3NzaWJsZSB0b2tlbiBiYWxhbmNlCiAgICBwdXNoaW50IDEwOTk1MTE2Mjc3NzYgLy8gMTA5OTUxMTYyNzc3NgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTYwCiAgICAvLyBhc3NlcnQodGhpcy50b2tlbkJhbGFuY2UudmFsdWUgPCBNQVhfVE9LRU5fQkFMQU5DRSwgJ1Bvb2w6IHRvbyBtdWNoJyk7CiAgICA8CiAgICBhc3NlcnQgLy8gUG9vbDogdG9vIG11Y2gKICAgIHJldHN1YgoKZGVwb3NpdF9lbHNlX2JvZHlAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQxCiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gInRva2VuQmFsYW5jZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNTMKICAgIC8vIHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlICs9IG5ldyBVaW50TjY0KChCaWdVaW50KGFtb3VudFNQKSAqIEJpZ1VpbnQodG9rZW5CYWxhbmNlKSkgLyBCaWdVaW50KG9sZEJhbGFuY2UpKS5uYXRpdmU7CiAgICBmcmFtZV9kaWcgMQogICAgaXRvYgogICAgZnJhbWVfZGlnIDIKICAgIGl0b2IKICAgIGRpZyAxCiAgICBiKgogICAgZnJhbWVfZGlnIDQKICAgIGl0b2IKICAgIHN3YXAKICAgIGRpZyAxCiAgICBiLwogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzIgLy8gOAogICAgYnplcm8KICAgIHN3YXAKICAgIGRpZyAxCiAgICBifAogICAgYnRvaQogICAgdW5jb3ZlciA0CiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MQogICAgLy8gdG9rZW5CYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzAgLy8gInRva2VuQmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE1MwogICAgLy8gdGhpcy50b2tlbkJhbGFuY2UudmFsdWUgKz0gbmV3IFVpbnRONjQoKEJpZ1VpbnQoYW1vdW50U1ApICogQmlnVWludCh0b2tlbkJhbGFuY2UpKSAvIEJpZ1VpbnQob2xkQmFsYW5jZSkpLm5hdGl2ZTsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MgogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gInZVc2RCYWxhbmNlIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE1NAogICAgLy8gdGhpcy52VXNkQmFsYW5jZS52YWx1ZSArPSBuZXcgVWludE42NCgoQmlnVWludChhbW91bnRTUCkgKiBCaWdVaW50KHZVc2RCYWxhbmNlKSkgLyBCaWdVaW50KG9sZEJhbGFuY2UpKS5uYXRpdmU7CiAgICBmcmFtZV9kaWcgMwogICAgaXRvYgogICAgdW5jb3ZlciA0CiAgICBiKgogICAgdW5jb3ZlciAzCiAgICBiLwogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICB1bmNvdmVyIDIKICAgIGJ8CiAgICBidG9pCiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MgogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNTQKICAgIC8vIHRoaXMudlVzZEJhbGFuY2UudmFsdWUgKz0gbmV3IFVpbnRONjQoKEJpZ1VpbnQoYW1vdW50U1ApICogQmlnVWludCh2VXNkQmFsYW5jZSkpIC8gQmlnVWludChvbGRCYWxhbmNlKSkubmF0aXZlOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIGIgZGVwb3NpdF9hZnRlcl9pZl9lbHNlQDQKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC53aXRoZHJhdyhhbW91bnRMcDogdWludDY0KSAtPiB2b2lkOgp3aXRoZHJhdzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE2OC0xNjkKICAgIC8vIEBhYmltZXRob2QoKQogICAgLy8gd2l0aGRyYXcoYW1vdW50THA6IHVpbnQ2NCk6IHZvaWQgewogICAgcHJvdG8gMSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MwogICAgLy8gY2FuV2l0aGRyYXcgPSBHbG9iYWxTdGF0ZTxib29sZWFuPih7IGluaXRpYWxWYWx1ZTogdHJ1ZSB9KTsvLyBpcyB3aXRoZHJhd24gb3BlcmF0aW9uIGFsbG93ZWQKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxMyAvLyAiY2FuV2l0aGRyYXciCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTIyCiAgICAvLyBhc3NlcnQodGhpcy5jYW5XaXRoZHJhdy52YWx1ZSwgJyJQb29sOiB3aXRoZHJhdyBwcm9oaWJpdGVkJyk7CiAgICBhc3NlcnQgLy8gIlBvb2w6IHdpdGhkcmF3IHByb2hpYml0ZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyBkID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA2IC8vICJkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE3MwogICAgLy8gdGhpcy53aXRoZHJhd0xwKFR4bi5zZW5kZXIsIGFtb3VudExwKTsKICAgIHR4biBTZW5kZXIKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEyNgogICAgLy8gbGV0IHVzZXJMcEFtb3VudCA9IHRoaXMuYmFsYW5jZShmcm9tKS52YWx1ZTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzMKICAgIC8vIGJhbGFuY2UgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDQgLy8gImJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTI2CiAgICAvLyBsZXQgdXNlckxwQW1vdW50ID0gdGhpcy5iYWxhbmNlKGZyb20pLnZhbHVlOwogICAgYXBwX2xvY2FsX2dldF9leAogICAgc3dhcAogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgIGFzc2VydCAvLyBjaGVjayBMb2NhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEyNwogICAgLy8gYXNzZXJ0KHVzZXJMcEFtb3VudCA+PSBscEFtb3VudCwgJ1Jld2FyZE1hbmFnZXI6IG5vdCBlbm91Z2ggYW1vdW50Jyk7CiAgICBkdXAKICAgIGZyYW1lX2RpZyAtMQogICAgPj0KICAgIGFzc2VydCAvLyBSZXdhcmRNYW5hZ2VyOiBub3QgZW5vdWdoIGFtb3VudAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMwCiAgICAvLyBhY2NSZXdhcmRQZXJTaGFyZVAgPSBHbG9iYWxTdGF0ZTxiaWd1aW50Pih7IGluaXRpYWxWYWx1ZTogMG4gfSk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgOCAvLyAiYWNjUmV3YXJkUGVyU2hhcmVQIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHN3YXAKICAgIGNvdmVyIDIKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMjkKICAgIC8vIGxldCBwZW5kaW5nOiB1aW50NjQgPSAwOwogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMzAKICAgIC8vIGlmICh1c2VyTHBBbW91bnQgPiAwKSB7CiAgICBieiB3aXRoZHJhd19hZnRlcl9pZl9lbHNlQDYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMzEKICAgIC8vIHBlbmRpbmcgPSBiaWd1aW50VG9VaW50NjRNb2R1bG8oKEJpZ1VpbnQodXNlckxwQW1vdW50KSAqIGFjY1Jld2FyZFBlclNoYXJlUCkgLyBQX1NDQUxFKSAtIHRoaXMudXNlclJld2FyZERlYnQoZnJvbSkudmFsdWU7CiAgICBmcmFtZV9kaWcgMgogICAgaXRvYgogICAgZnJhbWVfZGlnIDMKICAgIGIqCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjAKICAgIC8vIGNvbnN0IFBfU0NBTEU6IGJpZ3VpbnQgPSBCaWdVaW50KDEgPDwgUCk7CiAgICBieXRlYyA5IC8vIDB4MDEwMDAwMDAwMDAwMDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMzEKICAgIC8vIHBlbmRpbmcgPSBiaWd1aW50VG9VaW50NjRNb2R1bG8oKEJpZ1VpbnQodXNlckxwQW1vdW50KSAqIGFjY1Jld2FyZFBlclNoYXJlUCkgLyBQX1NDQUxFKSAtIHRoaXMudXNlclJld2FyZERlYnQoZnJvbSkudmFsdWU7CiAgICBiLwogICAgY2FsbHN1YiBiaWd1aW50VG9VaW50NjRNb2R1bG8KICAgIGZyYW1lX2RpZyAxCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjM0CiAgICAvLyB1c2VyUmV3YXJkRGVidCA9IExvY2FsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgNSAvLyAidXNlclJld2FyZERlYnQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTMxCiAgICAvLyBwZW5kaW5nID0gYmlndWludFRvVWludDY0TW9kdWxvKChCaWdVaW50KHVzZXJMcEFtb3VudCkgKiBhY2NSZXdhcmRQZXJTaGFyZVApIC8gUF9TQ0FMRSkgLSB0aGlzLnVzZXJSZXdhcmREZWJ0KGZyb20pLnZhbHVlOwogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICAtCiAgICBmcmFtZV9idXJ5IDQKCndpdGhkcmF3X2FmdGVyX2lmX2Vsc2VANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMzMKICAgIC8vIHVzZXJMcEFtb3VudCAtPSBscEFtb3VudDsKICAgIGZyYW1lX2RpZyAyCiAgICBmcmFtZV9kaWcgLTEKICAgIC0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMzQKICAgIC8vIHRoaXMuYmFsYW5jZShmcm9tKS52YWx1ZSAtPSBscEFtb3VudDsKICAgIGZyYW1lX2RpZyAxCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzMKICAgIC8vIGJhbGFuY2UgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDQgLy8gImJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTM0CiAgICAvLyB0aGlzLmJhbGFuY2UoZnJvbSkudmFsdWUgLT0gbHBBbW91bnQ7CiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIGZyYW1lX2RpZyAtMQogICAgLQogICAgZGlnIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMwogICAgLy8gYmFsYW5jZSA9IExvY2FsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgNCAvLyAiYmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMzQKICAgIC8vIHRoaXMuYmFsYW5jZShmcm9tKS52YWx1ZSAtPSBscEFtb3VudDsKICAgIHVuY292ZXIgMgogICAgYXBwX2xvY2FsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjI5CiAgICAvLyB0b3RhbFN1cHBseSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNyAvLyAidG90YWxTdXBwbHkiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEzNQogICAgLy8gdGhpcy50b3RhbFN1cHBseS52YWx1ZSAtPSBscEFtb3VudDsKICAgIGZyYW1lX2RpZyAtMQogICAgLQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjI5CiAgICAvLyB0b3RhbFN1cHBseSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyA3IC8vICJ0b3RhbFN1cHBseSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMzUKICAgIC8vIHRoaXMudG90YWxTdXBwbHkudmFsdWUgLT0gbHBBbW91bnQ7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEzNgogICAgLy8gdGhpcy51c2VyUmV3YXJkRGVidChmcm9tKS52YWx1ZSA9IGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbyhCaWdVaW50KHVzZXJMcEFtb3VudCkgKiBhY2NSZXdhcmRQZXJTaGFyZVAgLyBQX1NDQUxFKTsKICAgIHN3YXAKICAgIGl0b2IKICAgIGZyYW1lX2RpZyAzCiAgICBiKgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjIwCiAgICAvLyBjb25zdCBQX1NDQUxFOiBiaWd1aW50ID0gQmlnVWludCgxIDw8IFApOwogICAgYnl0ZWMgOSAvLyAweDAxMDAwMDAwMDAwMDAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTM2CiAgICAvLyB0aGlzLnVzZXJSZXdhcmREZWJ0KGZyb20pLnZhbHVlID0gYmlndWludFRvVWludDY0TW9kdWxvKEJpZ1VpbnQodXNlckxwQW1vdW50KSAqIGFjY1Jld2FyZFBlclNoYXJlUCAvIFBfU0NBTEUpOwogICAgYi8KICAgIGNhbGxzdWIgYmlndWludFRvVWludDY0TW9kdWxvCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzQKICAgIC8vIHVzZXJSZXdhcmREZWJ0ID0gTG9jYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlYyA1IC8vICJ1c2VyUmV3YXJkRGVidCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMzYKICAgIC8vIHRoaXMudXNlclJld2FyZERlYnQoZnJvbSkudmFsdWUgPSBiaWd1aW50VG9VaW50NjRNb2R1bG8oQmlnVWludCh1c2VyTHBBbW91bnQpICogYWNjUmV3YXJkUGVyU2hhcmVQIC8gUF9TQ0FMRSk7CiAgICBzd2FwCiAgICBhcHBfbG9jYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTM3CiAgICAvLyBpZiAocGVuZGluZyA+IDApIHsKICAgIGZyYW1lX2RpZyA0CiAgICBieiB3aXRoZHJhd19hZnRlcl9pZl9lbHNlQDkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMzgKICAgIC8vIGFzc2V0VHJhbnNmZXIoeyB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsIGFzc2V0QW1vdW50OiBwZW5kaW5nLCBhc3NldFJlY2VpdmVyOiBmcm9tIH0pLnN1Ym1pdCgpOwogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjI3CiAgICAvLyBhc3NldCA9IEdsb2JhbFN0YXRlPEFzc2V0PigpOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzIgLy8gImFzc2V0IgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGZyYW1lX2RpZyAxCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgZnJhbWVfZGlnIDQKICAgIGR1cAogICAgY292ZXIgMgogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMzgKICAgIC8vIGFzc2V0VHJhbnNmZXIoeyB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsIGFzc2V0QW1vdW50OiBwZW5kaW5nLCBhc3NldFJlY2VpdmVyOiBmcm9tIH0pLnN1Ym1pdCgpOwogICAgaW50Y18zIC8vIDQKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMzkKICAgIC8vIGVtaXQ8UmV3YXJkc0NsYWltZWQ+KHsgdXNlcjogbmV3IEFkZHJlc3MoZnJvbSksIHBlbmRpbmcgfSk7CiAgICBpdG9iCiAgICBjb25jYXQKICAgIGJ5dGVjIDI1IC8vIG1ldGhvZCAiUmV3YXJkc0NsYWltZWQoYWRkcmVzcyx1aW50NjQpIgogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKCndpdGhkcmF3X2FmdGVyX2lmX2Vsc2VAOToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxNDEKICAgIC8vIGVtaXQ8V2l0aGRyYXc+KHsgZnJvbTogbmV3IEFkZHJlc3MoZnJvbSksIGxwQW1vdW50IH0pOwogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICBmcmFtZV9kaWcgMQogICAgZGlnIDEKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4ZDNhZmE0ZjEgLy8gbWV0aG9kICJXaXRoZHJhdyhhZGRyZXNzLHVpbnQ2NCkiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDEKICAgIC8vIHRva2VuQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAidG9rZW5CYWxhbmNlIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQyCiAgICAvLyB2VXNkQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTgxCiAgICAvLyBjb25zdCBvbGRCYWxhbmNlOiB1aW50NjQgPSAodG9rZW5CYWxhbmNlICsgdlVzZEJhbGFuY2UpOwogICAgZHVwMgogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDEKICAgIC8vIHRva2VuQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAidG9rZW5CYWxhbmNlIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE4MgogICAgLy8gdGhpcy50b2tlbkJhbGFuY2UudmFsdWUgLT0gbmV3IFVpbnRONjQoKEJpZ1VpbnQoYW1vdW50THApICogQmlnVWludCh0b2tlbkJhbGFuY2UpKSAvIEJpZ1VpbnQob2xkQmFsYW5jZSkpLm5hdGl2ZTsKICAgIHVuY292ZXIgMwogICAgaXRvYgogICAgZGlnIDQKICAgIGIqCiAgICBkaWcgMgogICAgaXRvYgogICAgc3dhcAogICAgZGlnIDEKICAgIGIvCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMiAvLyA4CiAgICBiemVybwogICAgc3dhcAogICAgZGlnIDEKICAgIGJ8CiAgICBidG9pCiAgICB1bmNvdmVyIDMKICAgIHN3YXAKICAgIC0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQxCiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMCAvLyAidG9rZW5CYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTgyCiAgICAvLyB0aGlzLnRva2VuQmFsYW5jZS52YWx1ZSAtPSBuZXcgVWludE42NCgoQmlnVWludChhbW91bnRMcCkgKiBCaWdVaW50KHRva2VuQmFsYW5jZSkpIC8gQmlnVWludChvbGRCYWxhbmNlKSkubmF0aXZlOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQyCiAgICAvLyB2VXNkQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTgzCiAgICAvLyB0aGlzLnZVc2RCYWxhbmNlLnZhbHVlIC09IG5ldyBVaW50TjY0KChCaWdVaW50KGFtb3VudExwKSAqIEJpZ1VpbnQodlVzZEJhbGFuY2UpKSAvIEJpZ1VpbnQob2xkQmFsYW5jZSkpLm5hdGl2ZTsKICAgIHVuY292ZXIgNAogICAgaXRvYgogICAgdW5jb3ZlciA1CiAgICBiKgogICAgdW5jb3ZlciAzCiAgICBiLwogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICB1bmNvdmVyIDIKICAgIGJ8CiAgICBidG9pCiAgICAtCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MgogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxODMKICAgIC8vIHRoaXMudlVzZEJhbGFuY2UudmFsdWUgLT0gbmV3IFVpbnRONjQoKEJpZ1VpbnQoYW1vdW50THApICogQmlnVWludCh2VXNkQmFsYW5jZSkpIC8gQmlnVWludChvbGRCYWxhbmNlKSkubmF0aXZlOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQxCiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gInRva2VuQmFsYW5jZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MgogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gInZVc2RCYWxhbmNlIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE4NQogICAgLy8gYXNzZXJ0KHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlICsgdGhpcy52VXNkQmFsYW5jZS52YWx1ZSA8IG9sZEJhbGFuY2UsICdQb29sOiB6ZXJvIGNoYW5nZXMnKTsKICAgICsKICAgID4KICAgIGFzc2VydCAvLyBQb29sOiB6ZXJvIGNoYW5nZXMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ0CiAgICAvLyByZXNlcnZlcyA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMyAvLyAicmVzZXJ2ZXMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTg4CiAgICAvLyBhc3NlcnQoYW1vdW50THAgPD0gdGhpcy5yZXNlcnZlcy52YWx1ZSwgJ1Bvb2w6IHJlc2VydmVzJyk7CiAgICBmcmFtZV9kaWcgLTEKICAgID49CiAgICBhc3NlcnQgLy8gUG9vbDogcmVzZXJ2ZXMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ0CiAgICAvLyByZXNlcnZlcyA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMyAvLyAicmVzZXJ2ZXMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTkxCiAgICAvLyB0aGlzLnJlc2VydmVzLnZhbHVlIC09IGFtb3VudExwOwogICAgZnJhbWVfZGlnIC0xCiAgICAtCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NAogICAgLy8gcmVzZXJ2ZXMgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMyAvLyAicmVzZXJ2ZXMiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxOTEKICAgIC8vIHRoaXMucmVzZXJ2ZXMudmFsdWUgLT0gYW1vdW50THA7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTk0CiAgICAvLyB0aGlzLnVwZGF0ZUQoKTsKICAgIGNhbGxzdWIgdXBkYXRlRAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDYKICAgIC8vIGQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDYgLy8gImQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTk1CiAgICAvLyBhc3NlcnQodGhpcy5kLnZhbHVlIDwgb2xkRCwgJ1Bvb2w6IHplcm8gRCBjaGFuZ2VzJyk7CiAgICBmcmFtZV9kaWcgMAogICAgPAogICAgYXNzZXJ0IC8vIFBvb2w6IHplcm8gRCBjaGFuZ2VzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxOTctMjAxCiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsCiAgICAvLyAgIGFzc2V0QW1vdW50OiB0aGlzLmZyb21TeXN0ZW1QcmVjaXNpb24oYW1vdW50THApLAogICAgLy8gICBhc3NldFJlY2VpdmVyOiBUeG4uc2VuZGVyLAogICAgLy8gfSkuc3VibWl0KCk7CiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjcKICAgIC8vIGFzc2V0ID0gR2xvYmFsU3RhdGU8QXNzZXQ+KCk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMiAvLyAiYXNzZXQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTk5CiAgICAvLyBhc3NldEFtb3VudDogdGhpcy5mcm9tU3lzdGVtUHJlY2lzaW9uKGFtb3VudExwKSwKICAgIGZyYW1lX2RpZyAtMQogICAgY2FsbHN1YiBmcm9tU3lzdGVtUHJlY2lzaW9uCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMDAKICAgIC8vIGFzc2V0UmVjZWl2ZXI6IFR4bi5zZW5kZXIsCiAgICB0eG4gU2VuZGVyCiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxOTctMjAxCiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsCiAgICAvLyAgIGFzc2V0QW1vdW50OiB0aGlzLmZyb21TeXN0ZW1QcmVjaXNpb24oYW1vdW50THApLAogICAgLy8gICBhc3NldFJlY2VpdmVyOiBUeG4uc2VuZGVyLAogICAgLy8gfSkuc3VibWl0KCk7CiAgICBpbnRjXzMgLy8gNAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuc3dhcFRvVlVzZCh1c2VyOiBieXRlcywgYW1vdW50OiB1aW50NjQsIHplcm9GZWU6IHVpbnQ2NCkgLT4gdWludDY0Ogpzd2FwVG9WVXNkOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjEzLTIxNwogICAgLy8gc3dhcFRvVlVzZCgKICAgIC8vICAgdXNlcjogQWRkcmVzcywKICAgIC8vICAgYW1vdW50OiB1aW50NjQsCiAgICAvLyAgIHplcm9GZWU6IGJvb2xlYW4sCiAgICAvLyApOiB1aW50NjQgewogICAgcHJvdG8gMyAxCiAgICBwdXNoYnl0ZXMgIiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIxOAogICAgLy8gdGhpcy5vbmx5Um91dGVyKCk7CiAgICBjYWxsc3ViIG9ubHlSb3V0ZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIyMAogICAgLy8gbGV0IHJlc3VsdDogdWludDY0ID0gMDsgLy8gMCBieSBkZWZhdWx0CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjIwLTIyMQogICAgLy8gbGV0IHJlc3VsdDogdWludDY0ID0gMDsgLy8gMCBieSBkZWZhdWx0CiAgICAvLyBsZXQgZmVlOiB1aW50NjQgPSAwOwogICAgZHVwbiAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMjIKICAgIC8vIGlmIChhbW91bnQgPiAwKSB7CiAgICBmcmFtZV9kaWcgLTIKICAgIGJ6IHN3YXBUb1ZVc2RfYWZ0ZXJfaWZfZWxzZUA2CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMjMKICAgIC8vIGlmICghemVyb0ZlZSkgewogICAgZnJhbWVfZGlnIC0xCiAgICBibnogc3dhcFRvVlVzZF9hZnRlcl9pZl9lbHNlQDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM5CiAgICAvLyBmZWVTaGFyZUJQID0gR2xvYmFsU3RhdGU8dWludDY0PigpOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDE1IC8vICJmZWVTaGFyZUJQIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIyNAogICAgLy8gZmVlID0gKGFtb3VudCAqIHRoaXMuZmVlU2hhcmVCUC52YWx1ZSkgLyBCUDsKICAgIGZyYW1lX2RpZyAtMgogICAgKgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjE5CiAgICAvLyBleHBvcnQgY29uc3QgQlA6IHVpbnQ2NCA9IDEwXzAwMDsKICAgIGludGMgNCAvLyAxMDAwMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjI0CiAgICAvLyBmZWUgPSAoYW1vdW50ICogdGhpcy5mZWVTaGFyZUJQLnZhbHVlKSAvIEJQOwogICAgLwogICAgZnJhbWVfYnVyeSAyCgpzd2FwVG9WVXNkX2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIyNgogICAgLy8gY29uc3QgYW1vdW50SW4gPSB0aGlzLnRvU3lzdGVtUHJlY2lzaW9uKGFtb3VudCAtIGZlZSk7CiAgICBmcmFtZV9kaWcgLTIKICAgIGZyYW1lX2RpZyAyCiAgICAtCiAgICBjYWxsc3ViIHRvU3lzdGVtUHJlY2lzaW9uCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMjgKICAgIC8vIGZlZSA9IGFtb3VudCAtIHRoaXMuZnJvbVN5c3RlbVByZWNpc2lvbihhbW91bnRJbik7CiAgICBkdXAKICAgIGNhbGxzdWIgZnJvbVN5c3RlbVByZWNpc2lvbgogICAgZnJhbWVfZGlnIC0yCiAgICBzd2FwCiAgICAtCiAgICBmcmFtZV9idXJ5IDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQxCiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gInRva2VuQmFsYW5jZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMzEKICAgIC8vIHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlICs9IGFtb3VudEluOwogICAgZGlnIDEKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQxCiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMCAvLyAidG9rZW5CYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjMxCiAgICAvLyB0aGlzLnRva2VuQmFsYW5jZS52YWx1ZSArPSBhbW91bnRJbjsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NAogICAgLy8gcmVzZXJ2ZXMgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzMgLy8gInJlc2VydmVzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIzMgogICAgLy8gdGhpcy5yZXNlcnZlcy52YWx1ZSArPSBhbW91bnRJbjsKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ0CiAgICAvLyByZXNlcnZlcyA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18zIC8vICJyZXNlcnZlcyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIzMgogICAgLy8gdGhpcy5yZXNlcnZlcy52YWx1ZSArPSBhbW91bnRJbjsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MQogICAgLy8gdG9rZW5CYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18wIC8vICJ0b2tlbkJhbGFuY2UiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjM0CiAgICAvLyBjb25zdCB2VXNkTmV3QW1vdW50ID0gdGhpcy5nZXRZKHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlKTsKICAgIGNhbGxzdWIgZ2V0WQogICAgZHVwCiAgICBmcmFtZV9idXJ5IDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQyCiAgICAvLyB2VXNkQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjM1CiAgICAvLyBpZiAodGhpcy52VXNkQmFsYW5jZS52YWx1ZSA+IHZVc2ROZXdBbW91bnQpIHsKICAgIDwKICAgIGJ6IHN3YXBUb1ZVc2RfYWZ0ZXJfaWZfZWxzZUA1CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MgogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gInZVc2RCYWxhbmNlIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIzNgogICAgLy8gcmVzdWx0ID0gdGhpcy52VXNkQmFsYW5jZS52YWx1ZSAtIHZVc2ROZXdBbW91bnQ7CiAgICBmcmFtZV9kaWcgMAogICAgLQogICAgZnJhbWVfYnVyeSAxCgpzd2FwVG9WVXNkX2FmdGVyX2lmX2Vsc2VANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQyCiAgICAvLyB2VXNkQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18xIC8vICJ2VXNkQmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIzOAogICAgLy8gdGhpcy52VXNkQmFsYW5jZS52YWx1ZSA9IHZVc2ROZXdBbW91bnQ7CiAgICBmcmFtZV9kaWcgMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIzOQogICAgLy8gdGhpcy5hZGRSZXdhcmRzKGZlZSk7CiAgICBmcmFtZV9kaWcgMgogICAgZHVwCiAgICBjYWxsc3ViIGFkZFJld2FyZHMKICAgIGZyYW1lX2J1cnkgMwogICAgZnJhbWVfZGlnIDEKICAgIGZyYW1lX2J1cnkgNAoKc3dhcFRvVlVzZF9hZnRlcl9pZl9lbHNlQDY6CiAgICBmcmFtZV9kaWcgMwogICAgZnJhbWVfZGlnIDQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyNwogICAgLy8gYXNzZXQgPSBHbG9iYWxTdGF0ZTxBc3NldD4oKTsKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18yIC8vICJhc3NldCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNDIKICAgIC8vIGVtaXQ8U3dhcHBlZFRvVlVzZD4oeyB1c2VyLCBhc3NldDogdGhpcy5hc3NldC52YWx1ZS5pZCwgYW1vdW50LCByZXN1bHQsIGZlZSB9KTsKICAgIGZyYW1lX2RpZyAtMgogICAgaXRvYgogICAgZGlnIDIKICAgIGl0b2IKICAgIHVuY292ZXIgNAogICAgaXRvYgogICAgZnJhbWVfZGlnIC0zCiAgICB1bmNvdmVyIDQKICAgIGNvbmNhdAogICAgdW5jb3ZlciAzCiAgICBjb25jYXQKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHB1c2hieXRlcyAweDJiYmJlY2EzIC8vIG1ldGhvZCAiU3dhcHBlZFRvVlVzZChhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjQ0CiAgICAvLyB0aGlzLnZhbGlkYXRlQmFsYW5jZVJhdGlvKCk7CiAgICBjYWxsc3ViIHZhbGlkYXRlQmFsYW5jZVJhdGlvCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNDUKICAgIC8vIHJldHVybiByZXN1bHQ7CiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLnN3YXBGcm9tVlVzZCh1c2VyOiBieXRlcywgYW1vdW50OiB1aW50NjQsIHJlY2VpdmVBbW91bnRNaW46IHVpbnQ2NCwgemVyb0ZlZTogdWludDY0KSAtPiB1aW50NjQ6CnN3YXBGcm9tVlVzZDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI1OS0yNjQKICAgIC8vIHN3YXBGcm9tVlVzZCgKICAgIC8vICAgdXNlcjogQWRkcmVzcywKICAgIC8vICAgYW1vdW50OiB1aW50NjQsCiAgICAvLyAgIHJlY2VpdmVBbW91bnRNaW46IHVpbnQ2NCwKICAgIC8vICAgemVyb0ZlZTogYm9vbGVhbiwKICAgIC8vICk6IHVpbnQ2NCB7CiAgICBwcm90byA0IDEKICAgIHB1c2hieXRlcyAiIgogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNjUKICAgIC8vIHRoaXMub25seVJvdXRlcigpOwogICAgY2FsbHN1YiBvbmx5Um91dGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNjcKICAgIC8vIGxldCByZXN1bHRTUDogdWludDY0ID0gMDsgLy8gMCBieSBkZWZhdWx0CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjY4LTI2OQogICAgLy8gbGV0IHJlc3VsdDogdWludDY0ID0gMDsgLy8gMCBieSBkZWZhdWx0CiAgICAvLyBsZXQgZmVlOiB1aW50NjQgPSAwOwogICAgZHVwbiA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNzAKICAgIC8vIGlmIChhbW91bnQgPiAwKSB7CiAgICBmcmFtZV9kaWcgLTMKICAgIGJ6IHN3YXBGcm9tVlVzZF9hZnRlcl9pZl9lbHNlQDcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQyCiAgICAvLyB2VXNkQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjcxCiAgICAvLyB0aGlzLnZVc2RCYWxhbmNlLnZhbHVlICs9IGFtb3VudDsKICAgIGZyYW1lX2RpZyAtMwogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDIKICAgIC8vIHZVc2RCYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzEgLy8gInZVc2RCYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjcxCiAgICAvLyB0aGlzLnZVc2RCYWxhbmNlLnZhbHVlICs9IGFtb3VudDsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MgogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gInZVc2RCYWxhbmNlIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI3MgogICAgLy8gY29uc3QgbmV3QW1vdW50ID0gdGhpcy5nZXRZKHRoaXMudlVzZEJhbGFuY2UudmFsdWUpOwogICAgY2FsbHN1YiBnZXRZCiAgICBkdXAKICAgIGZyYW1lX2J1cnkgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDEKICAgIC8vIHRva2VuQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAidG9rZW5CYWxhbmNlIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHN3YXAKICAgIGR1cAogICAgY292ZXIgMgogICAgZnJhbWVfYnVyeSAxCiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNzQKICAgIC8vIGlmICh0b2tlbkJhbGFuY2UgPiBuZXdBbW91bnQpIHsKICAgIDwKICAgIGJ6IHN3YXBGcm9tVlVzZF9hZnRlcl9pZl9lbHNlQDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI3NQogICAgLy8gcmVzdWx0U1AgPSB0b2tlbkJhbGFuY2UgLSBuZXdBbW91bnQ7CiAgICBmcmFtZV9kaWcgMQogICAgZnJhbWVfZGlnIDAKICAgIC0KICAgIGR1cAogICAgZnJhbWVfYnVyeSAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNzYKICAgIC8vIHJlc3VsdCA9IHRoaXMuZnJvbVN5c3RlbVByZWNpc2lvbihyZXN1bHRTUCk7CiAgICBjYWxsc3ViIGZyb21TeXN0ZW1QcmVjaXNpb24KICAgIGZyYW1lX2J1cnkgMwoKc3dhcEZyb21WVXNkX2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ0CiAgICAvLyByZXNlcnZlcyA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMyAvLyAicmVzZXJ2ZXMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjgwCiAgICAvLyBhc3NlcnQocmVzdWx0U1AgPD0gdGhpcy5yZXNlcnZlcy52YWx1ZSwgJ1Bvb2w6IHJlc2VydmVzJyk7CiAgICBmcmFtZV9kaWcgMgogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgIDw9CiAgICBhc3NlcnQgLy8gUG9vbDogcmVzZXJ2ZXMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ0CiAgICAvLyByZXNlcnZlcyA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMyAvLyAicmVzZXJ2ZXMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjgyCiAgICAvLyB0aGlzLnJlc2VydmVzLnZhbHVlIC09IHJlc3VsdFNQOwogICAgc3dhcAogICAgLQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDQKICAgIC8vIHJlc2VydmVzID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzMgLy8gInJlc2VydmVzIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjgyCiAgICAvLyB0aGlzLnJlc2VydmVzLnZhbHVlIC09IHJlc3VsdFNQOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI4MwogICAgLy8gaWYgKCF6ZXJvRmVlKSB7CiAgICBmcmFtZV9kaWcgLTEKICAgIGJueiBzd2FwRnJvbVZVc2RfYWZ0ZXJfaWZfZWxzZUA1CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozOQogICAgLy8gZmVlU2hhcmVCUCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxNSAvLyAiZmVlU2hhcmVCUCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyODQKICAgIC8vIGZlZSA9IChyZXN1bHQgKiB0aGlzLmZlZVNoYXJlQlAudmFsdWUpIC8gQlA7CiAgICBmcmFtZV9kaWcgMwogICAgKgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjE5CiAgICAvLyBleHBvcnQgY29uc3QgQlA6IHVpbnQ2NCA9IDEwXzAwMDsKICAgIGludGMgNCAvLyAxMDAwMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6Mjg0CiAgICAvLyBmZWUgPSAocmVzdWx0ICogdGhpcy5mZWVTaGFyZUJQLnZhbHVlKSAvIEJQOwogICAgLwogICAgZnJhbWVfYnVyeSA0Cgpzd2FwRnJvbVZVc2RfYWZ0ZXJfaWZfZWxzZUA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6Mjg3CiAgICAvLyByZXN1bHQgLT0gZmVlOwogICAgZnJhbWVfZGlnIDMKICAgIGZyYW1lX2RpZyA0CiAgICBkdXAKICAgIGNvdmVyIDIKICAgIC0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQxCiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMCAvLyAidG9rZW5CYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6Mjg5CiAgICAvLyB0aGlzLnRva2VuQmFsYW5jZS52YWx1ZSA9IG5ld0Ftb3VudDsKICAgIGZyYW1lX2RpZyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjkwCiAgICAvLyBhc3NlcnQocmVzdWx0ID49IHJlY2VpdmVBbW91bnRNaW4sICdQb29sOiBzbGlwcGFnZScpOwogICAgZHVwCiAgICBmcmFtZV9kaWcgLTIKICAgID49CiAgICBhc3NlcnQgLy8gUG9vbDogc2xpcHBhZ2UKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI5MS0yOTUKICAgIC8vIGl0eG4uYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgIHhmZXJBc3NldDogdGhpcy5hc3NldC52YWx1ZSwKICAgIC8vICAgYXNzZXRBbW91bnQ6IHJlc3VsdCwKICAgIC8vICAgYXNzZXRSZWNlaXZlcjogdXNlci5uYXRpdmUsCiAgICAvLyB9KS5zdWJtaXQoKTsKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyNwogICAgLy8gYXNzZXQgPSBHbG9iYWxTdGF0ZTxBc3NldD4oKTsKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18yIC8vICJhc3NldCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTQKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgZGlnIDEKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyOTEtMjk1CiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsCiAgICAvLyAgIGFzc2V0QW1vdW50OiByZXN1bHQsCiAgICAvLyAgIGFzc2V0UmVjZWl2ZXI6IHVzZXIubmF0aXZlLAogICAgLy8gfSkuc3VibWl0KCk7CiAgICBpbnRjXzMgLy8gNAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6Mjk2CiAgICAvLyB0aGlzLmFkZFJld2FyZHMoZmVlKTsKICAgIGRpZyAxCiAgICBjYWxsc3ViIGFkZFJld2FyZHMKICAgIGZyYW1lX2J1cnkgNgogICAgZnJhbWVfYnVyeSA1Cgpzd2FwRnJvbVZVc2RfYWZ0ZXJfaWZfZWxzZUA3OgogICAgZnJhbWVfZGlnIDUKICAgIGZyYW1lX2RpZyA2CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjcKICAgIC8vIGFzc2V0ID0gR2xvYmFsU3RhdGU8QXNzZXQ+KCk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMiAvLyAiYXNzZXQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6Mjk4CiAgICAvLyBlbWl0PFN3YXBwZWRGcm9tVlVzZD4oeyB1c2VyLCBhc3NldDogdGhpcy5hc3NldC52YWx1ZS5pZCwgYW1vdW50LCByZXN1bHQsIGZlZSB9KTsKICAgIGZyYW1lX2RpZyAtMwogICAgaXRvYgogICAgZGlnIDIKICAgIGl0b2IKICAgIHVuY292ZXIgNAogICAgaXRvYgogICAgZnJhbWVfZGlnIC00CiAgICB1bmNvdmVyIDQKICAgIGNvbmNhdAogICAgdW5jb3ZlciAzCiAgICBjb25jYXQKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHB1c2hieXRlcyAweGQzZjFkNTQyIC8vIG1ldGhvZCAiU3dhcHBlZEZyb21WVXNkKGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMDAKICAgIC8vIHRoaXMudmFsaWRhdGVCYWxhbmNlUmF0aW8oKTsKICAgIGNhbGxzdWIgdmFsaWRhdGVCYWxhbmNlUmF0aW8KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMwMQogICAgLy8gcmV0dXJuIHJlc3VsdDsKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuc2V0RmVlU2hhcmUoZmVlU2hhcmVCUDogdWludDY0KSAtPiB2b2lkOgpzZXRGZWVTaGFyZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMwNwogICAgLy8gc2V0RmVlU2hhcmUoZmVlU2hhcmVCUDogdWludDY0KTogdm9pZCB7CiAgICBwcm90byAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMwOAogICAgLy8gdGhpcy5vbmx5T3duZXIoKTsKICAgIGNhbGxzdWIgb25seU93bmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMDkKICAgIC8vIGFzc2VydChmZWVTaGFyZUJQIDw9IEJQLCAnUG9vbDogdG9vIGxhcmdlJyk7CiAgICBmcmFtZV9kaWcgLTEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxOQogICAgLy8gZXhwb3J0IGNvbnN0IEJQOiB1aW50NjQgPSAxMF8wMDA7CiAgICBpbnRjIDQgLy8gMTAwMDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMwOQogICAgLy8gYXNzZXJ0KGZlZVNoYXJlQlAgPD0gQlAsICdQb29sOiB0b28gbGFyZ2UnKTsKICAgIDw9CiAgICBhc3NlcnQgLy8gUG9vbDogdG9vIGxhcmdlCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozOQogICAgLy8gZmVlU2hhcmVCUCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDE1IC8vICJmZWVTaGFyZUJQIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzEwCiAgICAvLyB0aGlzLmZlZVNoYXJlQlAudmFsdWUgPSBmZWVTaGFyZUJQOwogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuYWRqdXN0VG90YWxMcEFtb3VudCgpIC0+IHZvaWQ6CmFkanVzdFRvdGFsTHBBbW91bnQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMTMKICAgIC8vIGFkanVzdFRvdGFsTHBBbW91bnQoKTogdm9pZCB7CiAgICBwcm90byAwIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMxNAogICAgLy8gdGhpcy5vbmx5T3duZXIoKTsKICAgIGNhbGxzdWIgb25seU93bmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NgogICAgLy8gZCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNiAvLyAiZCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBzd2FwCiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjI5CiAgICAvLyB0b3RhbFN1cHBseSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNyAvLyAidG90YWxTdXBwbHkiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgc3dhcAogICAgZHVwCiAgICBjb3ZlciAyCiAgICBjb3ZlciAzCiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMTgKICAgIC8vIGlmIChkID4gdG90YWxTdXBwbHkpIHsKICAgID4KICAgIGJ6IGFkanVzdFRvdGFsTHBBbW91bnRfYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMTkKICAgIC8vIHRoaXMuZGVwb3NpdExwKFR4bi5zZW5kZXIsIGQgLSB0b3RhbFN1cHBseSk7CiAgICB0eG4gU2VuZGVyCiAgICBmcmFtZV9kaWcgMAogICAgZnJhbWVfZGlnIDEKICAgIC0KICAgIGNhbGxzdWIgZGVwb3NpdExwCgphZGp1c3RUb3RhbExwQW1vdW50X2FmdGVyX2lmX2Vsc2VAMjoKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLnNldEJhbGFuY2VSYXRpb01pbkJQKGJhbGFuY2VSYXRpb01pbkJQOiB1aW50NjQpIC0+IHZvaWQ6CnNldEJhbGFuY2VSYXRpb01pbkJQOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzI2CiAgICAvLyBzZXRCYWxhbmNlUmF0aW9NaW5CUChiYWxhbmNlUmF0aW9NaW5CUDogdWludDY0KTogdm9pZCB7CiAgICBwcm90byAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMyNwogICAgLy8gdGhpcy5vbmx5T3duZXIoKTsKICAgIGNhbGxzdWIgb25seU93bmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMjgKICAgIC8vIGFzc2VydChiYWxhbmNlUmF0aW9NaW5CUCA8PSBCUCwgJ1Bvb2w6IHRvbyBsYXJnZScpOwogICAgZnJhbWVfZGlnIC0xCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTkKICAgIC8vIGV4cG9ydCBjb25zdCBCUDogdWludDY0ID0gMTBfMDAwOwogICAgaW50YyA0IC8vIDEwMDAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMjgKICAgIC8vIGFzc2VydChiYWxhbmNlUmF0aW9NaW5CUCA8PSBCUCwgJ1Bvb2w6IHRvbyBsYXJnZScpOwogICAgPD0KICAgIGFzc2VydCAvLyBQb29sOiB0b28gbGFyZ2UKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQzCiAgICAvLyBiYWxhbmNlUmF0aW9NaW5CUCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDE2IC8vICJiYWxhbmNlUmF0aW9NaW5CUCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMyOQogICAgLy8gdGhpcy5iYWxhbmNlUmF0aW9NaW5CUC52YWx1ZSA9IGJhbGFuY2VSYXRpb01pbkJQOwogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuc3RvcERlcG9zaXQoKSAtPiB2b2lkOgpzdG9wRGVwb3NpdDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMzMwogICAgLy8gdGhpcy5vbmx5U3RvcEF1dGhvcml0eSgpOwogICAgY2FsbHN1YiBvbmx5U3RvcEF1dGhvcml0eQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTIKICAgIC8vIGNhbkRlcG9zaXQgPSBHbG9iYWxTdGF0ZTxib29sZWFuPih7IGluaXRpYWxWYWx1ZTogdHJ1ZSB9KTsvLyBpcyBkZXBvc2l0IG9wZXJhdGlvbiBhbGxvd2VkCiAgICBieXRlYyAxMiAvLyAiY2FuRGVwb3NpdCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMzNAogICAgLy8gdGhpcy5jYW5EZXBvc2l0LnZhbHVlID0gZmFsc2U7CiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLnN0YXJ0RGVwb3NpdCgpIC0+IHZvaWQ6CnN0YXJ0RGVwb3NpdDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMzOAogICAgLy8gdGhpcy5vbmx5T3duZXIoKTsKICAgIGNhbGxzdWIgb25seU93bmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MgogICAgLy8gY2FuRGVwb3NpdCA9IEdsb2JhbFN0YXRlPGJvb2xlYW4+KHsgaW5pdGlhbFZhbHVlOiB0cnVlIH0pOy8vIGlzIGRlcG9zaXQgb3BlcmF0aW9uIGFsbG93ZWQKICAgIGJ5dGVjIDEyIC8vICJjYW5EZXBvc2l0IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzM5CiAgICAvLyB0aGlzLmNhbkRlcG9zaXQudmFsdWUgPSB0cnVlOwogICAgaW50Y18xIC8vIDEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC5zdG9wV2l0aGRyYXcoKSAtPiB2b2lkOgpzdG9wV2l0aGRyYXc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozNDMKICAgIC8vIHRoaXMub25seVN0b3BBdXRob3JpdHkoKTsKICAgIGNhbGxzdWIgb25seVN0b3BBdXRob3JpdHkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUzCiAgICAvLyBjYW5XaXRoZHJhdyA9IEdsb2JhbFN0YXRlPGJvb2xlYW4+KHsgaW5pdGlhbFZhbHVlOiB0cnVlIH0pOy8vIGlzIHdpdGhkcmF3biBvcGVyYXRpb24gYWxsb3dlZAogICAgYnl0ZWMgMTMgLy8gImNhbldpdGhkcmF3IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzQ0CiAgICAvLyB0aGlzLmNhbldpdGhkcmF3LnZhbHVlID0gZmFsc2U7CiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLnN0YXJ0V2l0aGRyYXcoKSAtPiB2b2lkOgpzdGFydFdpdGhkcmF3OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzQ4CiAgICAvLyB0aGlzLm9ubHlPd25lcigpOwogICAgY2FsbHN1YiBvbmx5T3duZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUzCiAgICAvLyBjYW5XaXRoZHJhdyA9IEdsb2JhbFN0YXRlPGJvb2xlYW4+KHsgaW5pdGlhbFZhbHVlOiB0cnVlIH0pOy8vIGlzIHdpdGhkcmF3biBvcGVyYXRpb24gYWxsb3dlZAogICAgYnl0ZWMgMTMgLy8gImNhbldpdGhkcmF3IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzQ5CiAgICAvLyB0aGlzLmNhbldpdGhkcmF3LnZhbHVlID0gdHJ1ZTsKICAgIGludGNfMSAvLyAxCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuc2V0U3RvcEF1dGhvcml0eShzdG9wQXV0aG9yaXR5OiBieXRlcykgLT4gdm9pZDoKc2V0U3RvcEF1dGhvcml0eToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM1MgogICAgLy8gc2V0U3RvcEF1dGhvcml0eShzdG9wQXV0aG9yaXR5OiBBZGRyZXNzKTogdm9pZCB7CiAgICBwcm90byAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM1MwogICAgLy8gdGhpcy5vbmx5T3duZXIoKTsKICAgIGNhbGxzdWIgb25seU93bmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MQogICAgLy8gcHJpdmF0ZSBzdG9wQXV0aG9yaXR5ID0gR2xvYmFsU3RhdGU8QWRkcmVzcz4oKTsvLyBjYW4gcmVzdHJpY3QgZGVwb3NpdCBvciB3aXRoZHJhdyBvcGVyYXRpb25zCiAgICBieXRlYyAyMiAvLyAic3RvcEF1dGhvcml0eSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM1NAogICAgLy8gdGhpcy5zdG9wQXV0aG9yaXR5LnZhbHVlID0gc3RvcEF1dGhvcml0eTsKICAgIGZyYW1lX2RpZyAtMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLnNldFJvdXRlcihyb3V0ZXI6IGJ5dGVzKSAtPiB2b2lkOgpzZXRSb3V0ZXI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozNTcKICAgIC8vIHNldFJvdXRlcihyb3V0ZXI6IEFkZHJlc3MpOiB2b2lkIHsKICAgIHByb3RvIDEgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzU4CiAgICAvLyB0aGlzLm9ubHlPd25lcigpOwogICAgY2FsbHN1YiBvbmx5T3duZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQwCiAgICAvLyByb3V0ZXIgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPigpOy8vIGlzIGRlcG9zaXQgb3BlcmF0aW9uIGFsbG93ZWQKICAgIGJ5dGVjIDIxIC8vICJyb3V0ZXIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozNTkKICAgIC8vIHRoaXMucm91dGVyLnZhbHVlID0gcm91dGVyOwogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuZ2V0WSh4OiB1aW50NjQpIC0+IHVpbnQ2NDoKZ2V0WToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM2NQogICAgLy8gcHJpdmF0ZSBnZXRZKHg6IHVpbnQ2NCk6IHVpbnQ2NCB7CiAgICBwcm90byAxIDEKICAgIGludGNfMCAvLyAwCiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM2NgogICAgLy8gY29uc3QgeF8gPSBCaWdVaW50KHgpOwogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyBkID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA2IC8vICJkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM2NwogICAgLy8gY29uc3QgZF8gPSBCaWdVaW50KHRoaXMuZC52YWx1ZSk7CiAgICBpdG9iCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ1CiAgICAvLyBhID0gR2xvYmFsU3RhdGU8dWludDY0PigpOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDIwIC8vICJhIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM2OAogICAgLy8gY29uc3QgYTQgPSBCaWdVaW50KHRoaXMuYS52YWx1ZSA8PCAyKTsKICAgIHB1c2hpbnQgMiAvLyAyCiAgICBzaGwKICAgIGl0b2IKICAgIGR1cAogICAgY292ZXIgMwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzY5CiAgICAvLyBjb25zdCBhOCA9IEJpZ1VpbnQoYTQgKiAybik7CiAgICBieXRlYyAxNyAvLyAweDAyCiAgICBiKgogICAgY292ZXIgMgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzcxCiAgICAvLyBjb25zdCBkTWludXNYSXNQb3NpdGl2ZSA9IGRfID49IHhfOwogICAgYjw9CiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM3MgogICAgLy8gY29uc3QgZE1pbnVzWEFiczogYmlndWludCA9IGRNaW51c1hJc1Bvc2l0aXZlID8gKGRfIC0geF8pIDogKHhfIC0gZF8pOwogICAgYnogZ2V0WV90ZXJuYXJ5X2ZhbHNlQDIKICAgIGZyYW1lX2RpZyAzCiAgICBmcmFtZV9kaWcgMgogICAgYi0KCmdldFlfdGVybmFyeV9tZXJnZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6Mzc0CiAgICAvLyBjb25zdCBhNEJ5RE1pbnVzWEFiczogYmlndWludCA9IGE0ICogZE1pbnVzWEFiczsKICAgIGZyYW1lX2RpZyA0CiAgICBiKgogICAgZnJhbWVfYnVyeSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozNzkKICAgIC8vIGlmIChkTWludXNYSXNQb3NpdGl2ZSkgewogICAgZnJhbWVfZGlnIDYKICAgIGJ6IGdldFlfZWxzZV9ib2R5QDgKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM4MAogICAgLy8gaWYgKGE0QnlETWludXNYQWJzID49IGRfKSB7CiAgICBmcmFtZV9kaWcgMAogICAgZnJhbWVfZGlnIDMKICAgIGI+PQogICAgYnogZ2V0WV9lbHNlX2JvZHlANgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzgxCiAgICAvLyBwYXJ0MUFicyA9IGE0QnlETWludXNYQWJzIC0gZF87CiAgICBmcmFtZV9kaWcgMAogICAgZnJhbWVfZGlnIDMKICAgIGItCiAgICBmcmFtZV9idXJ5IDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM4MgogICAgLy8gcGFydDFJc1Bvc2l0aXZlID0gdHJ1ZTsKICAgIGludGNfMSAvLyAxCgpnZXRZX2FmdGVyX2lmX2Vsc2VAOToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM5MwogICAgLy8gY29uc3QgcGFydDI6IGJpZ3VpbnQgPSBCaWdVaW50KHgpICogKGE0ICogZF8gKiBkXyAqIGRfICsgeF8gKiAocGFydDFBYnMgKiBwYXJ0MUFicykpOwogICAgZnJhbWVfZGlnIDQKICAgIGZyYW1lX2RpZyAzCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGIqCiAgICBkaWcgMQogICAgYioKICAgIGIqCiAgICBmcmFtZV9kaWcgMQogICAgZHVwCiAgICBiKgogICAgZnJhbWVfZGlnIDIKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBiKgogICAgdW5jb3ZlciAyCiAgICBiKwogICAgYioKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM5NAogICAgLy8gbGV0IG51bWVyYXRvcjogYmlndWludCA9IHRoaXMuc3FydChwYXJ0Mik7CiAgICBjYWxsc3ViIHNxcnQKICAgIHN3YXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM5NwogICAgLy8gaWYgKHBhcnQxSXNQb3NpdGl2ZSkgewogICAgYnogZ2V0WV9lbHNlX2JvZHlAMTEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM5OAogICAgLy8gbnVtZXJhdG9yICs9IHhfICogcGFydDFBYnM7CiAgICBmcmFtZV9kaWcgMgogICAgZnJhbWVfZGlnIDEKICAgIGIqCiAgICBiKwoKZ2V0WV9hZnRlcl9pZl9lbHNlQDEyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDA0CiAgICAvLyByZXR1cm4gYmlndWludFRvVWludDY0TW9kdWxvKG51bWVyYXRvciAvIChhOCAqIHhfKSArIDFuKTsgLy8gKzEgdG8gb2Zmc2V0IHJvdW5kaW5nIGVycm9ycwogICAgZnJhbWVfZGlnIDUKICAgIGZyYW1lX2RpZyAyCiAgICBiKgogICAgYi8KICAgIGJ5dGVjIDEwIC8vIDB4MDEKICAgIGIrCiAgICBjYWxsc3ViIGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbwogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCmdldFlfZWxzZV9ib2R5QDExOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDAwCiAgICAvLyBudW1lcmF0b3IgLT0geF8gKiBwYXJ0MUFiczsKICAgIGZyYW1lX2RpZyAyCiAgICBmcmFtZV9kaWcgMQogICAgYioKICAgIGItCiAgICBiIGdldFlfYWZ0ZXJfaWZfZWxzZUAxMgoKZ2V0WV9lbHNlX2JvZHlANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM4NAogICAgLy8gcGFydDFBYnMgPSBkXyAtIGE0QnlETWludXNYQWJzOwogICAgZnJhbWVfZGlnIDMKICAgIGZyYW1lX2RpZyAwCiAgICBiLQogICAgZnJhbWVfYnVyeSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozODUKICAgIC8vIHBhcnQxSXNQb3NpdGl2ZSA9IGZhbHNlOwogICAgaW50Y18wIC8vIDAKICAgIGIgZ2V0WV9hZnRlcl9pZl9lbHNlQDkKCmdldFlfZWxzZV9ib2R5QDg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozODgKICAgIC8vIHBhcnQxQWJzID0gYTRCeURNaW51c1hBYnMgKyBkXzsKICAgIGZyYW1lX2RpZyAwCiAgICBmcmFtZV9kaWcgMwogICAgYisKICAgIGZyYW1lX2J1cnkgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6Mzg5CiAgICAvLyBwYXJ0MUlzUG9zaXRpdmUgPSBmYWxzZTsKICAgIGludGNfMCAvLyAwCiAgICBiIGdldFlfYWZ0ZXJfaWZfZWxzZUA5CgpnZXRZX3Rlcm5hcnlfZmFsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM3MgogICAgLy8gY29uc3QgZE1pbnVzWEFiczogYmlndWludCA9IGRNaW51c1hJc1Bvc2l0aXZlID8gKGRfIC0geF8pIDogKHhfIC0gZF8pOwogICAgZnJhbWVfZGlnIDIKICAgIGZyYW1lX2RpZyAzCiAgICBiLQogICAgYiBnZXRZX3Rlcm5hcnlfbWVyZ2VAMwoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLnVwZGF0ZUQoKSAtPiB2b2lkOgp1cGRhdGVEOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDA3CiAgICAvLyBwcml2YXRlIHVwZGF0ZUQoKTogdm9pZCB7CiAgICBwcm90byAwIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQxCiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gInRva2VuQmFsYW5jZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MDgKICAgIC8vIGNvbnN0IHggPSBCaWdVaW50KHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlKTsKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQyCiAgICAvLyB2VXNkQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDA5CiAgICAvLyBjb25zdCB5ID0gQmlnVWludCh0aGlzLnZVc2RCYWxhbmNlLnZhbHVlKTsKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQxNAogICAgLy8gY29uc3QgeHk6IGJpZ3VpbnQgPSB4ICogeTsKICAgIGR1cDIKICAgIGIqCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NQogICAgLy8gYSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAyMCAvLyAiYSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MTUKICAgIC8vIGNvbnN0IGFfID0gQmlnVWludCh0aGlzLmEudmFsdWUpOwogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDE3CiAgICAvLyBjb25zdCBwMTogYmlndWludCA9IGFfICogeHkgKiAoeCArIHkpOwogICAgZHVwCiAgICBkaWcgMgogICAgYioKICAgIHVuY292ZXIgNAogICAgdW5jb3ZlciA0CiAgICBiKwogICAgYioKICAgIGR1cAogICAgY292ZXIgMgogICAgY292ZXIgMwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDE5CiAgICAvLyBjb25zdCBwMjogYmlndWludCA9ICh4eSAqICgoYV8gKiA0bikgLSAxbikpIC8gM247CiAgICBwdXNoYnl0ZXMgMHgwNAogICAgYioKICAgIGJ5dGVjIDEwIC8vIDB4MDEKICAgIGItCiAgICB1bmNvdmVyIDIKICAgIGIqCiAgICBieXRlYyAyNiAvLyAweDAzCiAgICBiLwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDIxCiAgICAvLyBjb25zdCBwMzogYmlndWludCA9IHRoaXMuc3FydCgocDEgKiBwMSkgKyAocDIgKiBwMiAqIHAyKSk7CiAgICBkaWcgMQogICAgZGlnIDIKICAgIGIqCiAgICBkaWcgMQogICAgZGlnIDIKICAgIGIqCiAgICB1bmNvdmVyIDIKICAgIGIqCiAgICBiKwogICAgY2FsbHN1YiBzcXJ0CiAgICBkdXAKICAgIGNvdmVyIDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQyMgogICAgLy8gbGV0IGRfID0gdGhpcy5jYnJ0KHAxICsgcDMpOwogICAgZHVwMgogICAgYisKICAgIGNhbGxzdWIgY2JydAogICAgY292ZXIgMwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDIzCiAgICAvLyBpZiAocDMgPiBwMSkgewogICAgYjwKICAgIGJ6IHVwZGF0ZURfZWxzZV9ib2R5QDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQyNAogICAgLy8gZF8gLT0gdGhpcy5jYnJ0KHAzIC0gcDEpOwogICAgZnJhbWVfZGlnIDAKICAgIGItCiAgICBjYWxsc3ViIGNicnQKICAgIGZyYW1lX2RpZyAxCiAgICBzd2FwCiAgICAtCiAgICBmcmFtZV9idXJ5IDEKCnVwZGF0ZURfYWZ0ZXJfaWZfZWxzZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDI4CiAgICAvLyB0aGlzLmQudmFsdWUgPSAoZF8gPDwgMSk7CiAgICBmcmFtZV9kaWcgMQogICAgaW50Y18xIC8vIDEKICAgIHNobAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDYKICAgIC8vIGQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgNiAvLyAiZCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQyOAogICAgLy8gdGhpcy5kLnZhbHVlID0gKGRfIDw8IDEpOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKdXBkYXRlRF9lbHNlX2JvZHlAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQyNgogICAgLy8gZF8gKz0gdGhpcy5jYnJ0KHAxIC0gcDMpOwogICAgZnJhbWVfZGlnIDAKICAgIHN3YXAKICAgIGItCiAgICBjYWxsc3ViIGNicnQKICAgIGZyYW1lX2RpZyAxCiAgICArCiAgICBmcmFtZV9idXJ5IDEKICAgIGIgdXBkYXRlRF9hZnRlcl9pZl9lbHNlQDMKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC50b1N5c3RlbVByZWNpc2lvbihhbW91bnQ6IHVpbnQ2NCkgLT4gdWludDY0Ogp0b1N5c3RlbVByZWNpc2lvbjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQzMQogICAgLy8gcHJpdmF0ZSB0b1N5c3RlbVByZWNpc2lvbihhbW91bnQ6IHVpbnQ2NCk6IHVpbnQ2NCB7CiAgICBwcm90byAxIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ4CiAgICAvLyBwcml2YXRlIHRva2VuQW1vdW50UmVkdWNlID0gR2xvYmFsU3RhdGU8dWludDY0PigpOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDIzIC8vICJ0b2tlbkFtb3VudFJlZHVjZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBzd2FwCiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDkKICAgIC8vIHByaXZhdGUgdG9rZW5BbW91bnRJbmNyZWFzZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAyNCAvLyAidG9rZW5BbW91bnRJbmNyZWFzZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBzd2FwCiAgICBjb3ZlciAyCiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MzUKICAgIC8vIGlmICh0b2tlbkFtb3VudFJlZHVjZSA+IDApIHsKICAgIGJ6IHRvU3lzdGVtUHJlY2lzaW9uX2Vsc2VfYm9keUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MzYKICAgIC8vIHJldHVybiBhbW91bnQgLyB0b2tlbkFtb3VudFJlZHVjZTsKICAgIGZyYW1lX2RpZyAtMQogICAgZnJhbWVfZGlnIDAKICAgIC8KICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgp0b1N5c3RlbVByZWNpc2lvbl9lbHNlX2JvZHlAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQzNwogICAgLy8gfSBlbHNlIGlmICh0b2tlbkFtb3VudEluY3JlYXNlID4gMCkgewogICAgZnJhbWVfZGlnIDEKICAgIGJ6IHRvU3lzdGVtUHJlY2lzaW9uX2FmdGVyX2lmX2Vsc2VANAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDM4CiAgICAvLyByZXR1cm4gYW1vdW50ICogdG9rZW5BbW91bnRJbmNyZWFzZTsKICAgIGZyYW1lX2RpZyAtMQogICAgZnJhbWVfZGlnIDEKICAgICoKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgp0b1N5c3RlbVByZWNpc2lvbl9hZnRlcl9pZl9lbHNlQDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NDAKICAgIC8vIHJldHVybiBhbW91bnQ7CiAgICBmcmFtZV9kaWcgLTEKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuZnJvbVN5c3RlbVByZWNpc2lvbihhbW91bnQ6IHVpbnQ2NCkgLT4gdWludDY0Ogpmcm9tU3lzdGVtUHJlY2lzaW9uOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDQzCiAgICAvLyBwcml2YXRlIGZyb21TeXN0ZW1QcmVjaXNpb24oYW1vdW50OiB1aW50NjQpOiB1aW50NjQgewogICAgcHJvdG8gMSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0OAogICAgLy8gcHJpdmF0ZSB0b2tlbkFtb3VudFJlZHVjZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAyMyAvLyAidG9rZW5BbW91bnRSZWR1Y2UiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgc3dhcAogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ5CiAgICAvLyBwcml2YXRlIHRva2VuQW1vdW50SW5jcmVhc2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMjQgLy8gInRva2VuQW1vdW50SW5jcmVhc2UiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgc3dhcAogICAgY292ZXIgMgogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDQ3CiAgICAvLyBpZiAodG9rZW5BbW91bnRSZWR1Y2UgPiAwKSB7CiAgICBieiBmcm9tU3lzdGVtUHJlY2lzaW9uX2Vsc2VfYm9keUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NDgKICAgIC8vIHJldHVybiBhbW91bnQgKiB0b2tlbkFtb3VudFJlZHVjZTsKICAgIGZyYW1lX2RpZyAtMQogICAgZnJhbWVfZGlnIDAKICAgICoKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgpmcm9tU3lzdGVtUHJlY2lzaW9uX2Vsc2VfYm9keUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDQ5CiAgICAvLyB9IGVsc2UgaWYgKHRva2VuQW1vdW50SW5jcmVhc2UgPiAwKSB7CiAgICBmcmFtZV9kaWcgMQogICAgYnogZnJvbVN5c3RlbVByZWNpc2lvbl9hZnRlcl9pZl9lbHNlQDQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ1MAogICAgLy8gcmV0dXJuIGFtb3VudCAvIHRva2VuQW1vdW50SW5jcmVhc2U7CiAgICBmcmFtZV9kaWcgLTEKICAgIGZyYW1lX2RpZyAxCiAgICAvCiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1YgoKZnJvbVN5c3RlbVByZWNpc2lvbl9hZnRlcl9pZl9lbHNlQDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NTIKICAgIC8vIHJldHVybiBhbW91bnQ7CiAgICBmcmFtZV9kaWcgLTEKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuc3FydChuOiBieXRlcykgLT4gYnl0ZXM6CnNxcnQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NTUKICAgIC8vIHByaXZhdGUgc3FydChuOiBiaWd1aW50KTogYmlndWludCB7CiAgICBwcm90byAxIDEKICAgIGludGNfMCAvLyAwCiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ1NgogICAgLy8gYXNzZXJ0KG4gPiAwbiwgJ24gbXVzdCBiZSBub24tbmVnYXRpdmUnKTsKICAgIGZyYW1lX2RpZyAtMQogICAgcHVzaGJ5dGVzIDB4CiAgICBiPgogICAgYXNzZXJ0IC8vIG4gbXVzdCBiZSBub24tbmVnYXRpdmUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ1NwogICAgLy8gaWYgKG4gPT09IDBuKSByZXR1cm4gMG47CiAgICBmcmFtZV9kaWcgLTEKICAgIHB1c2hieXRlcyAweAogICAgYj09CiAgICBieiBzcXJ0X2FmdGVyX2lmX2Vsc2VAMgogICAgcHVzaGJ5dGVzIDB4CiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1YgoKc3FydF9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NTgKICAgIC8vIGlmIChuIDw9IDNuKSByZXR1cm4gMW47CiAgICBmcmFtZV9kaWcgLTEKICAgIGJ5dGVjIDI2IC8vIDB4MDMKICAgIGI8PQogICAgYnogc3FydF9hZnRlcl9pZl9lbHNlQDQKICAgIGJ5dGVjIDEwIC8vIDB4MDEKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgpzcXJ0X2FmdGVyX2lmX2Vsc2VANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2MQogICAgLy8gY29uc3QgYmwgPSBiaXRMZW5ndGgoQnl0ZXMobikpOwogICAgZnJhbWVfZGlnIC0xCiAgICBiaXRsZW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2MgogICAgLy8gbGV0IHdpZGUgPSBleHB3KDIsIChibCArIDEpIC8gMik7CiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgcHVzaGludCAyIC8vIDIKICAgIC8KICAgIHB1c2hpbnQgMiAvLyAyCiAgICBzd2FwCiAgICBleHB3CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NjMKICAgIC8vIGNvbnN0IGhpID0gQmlnVWludCh3aWRlWzBdKTsKICAgIHN3YXAKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2NAogICAgLy8gY29uc3QgbG8gPSBCaWdVaW50KHdpZGVbMV0pOwogICAgc3dhcAogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDY1CiAgICAvLyBsZXQgeDogYmlndWludCA9IGhpICogU0hJRlQ2NCArIGxvOwogICAgc3dhcAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjIKICAgIC8vIGNvbnN0IFNISUZUNjQ6IGJpZ3VpbnQgPSAxODQ0Njc0NDA3MzcwOTU1MTYxNm47IC8vIDJeNjQKICAgIGJ5dGVjIDI3IC8vIDB4MDEwMDAwMDAwMDAwMDAwMDAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NjUKICAgIC8vIGxldCB4OiBiaWd1aW50ID0gaGkgKiBTSElGVDY0ICsgbG87CiAgICBiKgogICAgYisKICAgIGR1cAogICAgZnJhbWVfYnVyeSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NjgKICAgIC8vIGxldCB5OiBiaWd1aW50ID0gKHggKyBuIC8geCkgLyAybjsKICAgIGZyYW1lX2RpZyAtMQogICAgZGlnIDEKICAgIGIvCiAgICBiKwogICAgYnl0ZWMgMTcgLy8gMHgwMgogICAgYi8KICAgIGZyYW1lX2J1cnkgMQoKc3FydF93aGlsZV90b3BANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2OQogICAgLy8gd2hpbGUgKHkgPCB4KSB7CiAgICBmcmFtZV9kaWcgMQogICAgZnJhbWVfZGlnIDAKICAgIGI8CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NjktNDcyCiAgICAvLyB3aGlsZSAoeSA8IHgpIHsKICAgIC8vICAgeCA9IHk7CiAgICAvLyAgIHkgPSAoeCArIG4gLyB4KSAvIDJuOwogICAgLy8gfQogICAgYnogc3FydF9hZnRlcl93aGlsZUA3CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NzEKICAgIC8vIHkgPSAoeCArIG4gLyB4KSAvIDJuOwogICAgZnJhbWVfZGlnIC0xCiAgICBmcmFtZV9kaWcgMQogICAgZHVwCiAgICBjb3ZlciAyCiAgICBiLwogICAgZGlnIDEKICAgIGIrCiAgICBieXRlYyAxNyAvLyAweDAyCiAgICBiLwogICAgZnJhbWVfYnVyeSAxCiAgICBmcmFtZV9idXJ5IDAKICAgIGIgc3FydF93aGlsZV90b3BANQoKc3FydF9hZnRlcl93aGlsZUA3OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDczCiAgICAvLyByZXR1cm4geDsKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLmNicnQobjogYnl0ZXMpIC0+IHVpbnQ2NDoKY2JydDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ3NgogICAgLy8gcHJpdmF0ZSBjYnJ0KG46IGJpZ3VpbnQpOiB1aW50NjQgewogICAgcHJvdG8gMSAxCiAgICBpbnRjXzAgLy8gMAogICAgZHVwbiAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NzcKICAgIC8vIGlmIChuID09PSAwbikgcmV0dXJuIDA7CiAgICBmcmFtZV9kaWcgLTEKICAgIHB1c2hieXRlcyAweAogICAgYj09CiAgICBieiBjYnJ0X2FmdGVyX2lmX2Vsc2VAMgogICAgaW50Y18wIC8vIDAKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgpjYnJ0X2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ3OAogICAgLy8gaWYgKG4gPCA4bikgcmV0dXJuIDE7CiAgICBmcmFtZV9kaWcgLTEKICAgIHB1c2hieXRlcyAweDA4CiAgICBiPAogICAgYnogY2JydF9hZnRlcl9pZl9lbHNlQDQKICAgIGludGNfMSAvLyAxCiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1YgoKY2JydF9hZnRlcl9pZl9lbHNlQDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0ODEKICAgIC8vIGNvbnN0IGJsID0gYml0TGVuZ3RoKEJ5dGVzKG4pKTsKICAgIGZyYW1lX2RpZyAtMQogICAgYml0bGVuCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0ODIKICAgIC8vIGxldCB3aWRlID0gZXhwdygyLCAoYmwgKyAyKSAvIDMpOwogICAgcHVzaGludCAyIC8vIDIKICAgICsKICAgIHB1c2hpbnQgMyAvLyAzCiAgICAvCiAgICBwdXNoaW50IDIgLy8gMgogICAgc3dhcAogICAgZXhwdwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDgzCiAgICAvLyBjb25zdCBoaSA9IEJpZ1VpbnQod2lkZVswXSk7CiAgICBzd2FwCiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0ODQKICAgIC8vIGNvbnN0IGxvID0gQmlnVWludCh3aWRlWzFdKTsKICAgIHN3YXAKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ4NQogICAgLy8gbGV0IHg6IGJpZ3VpbnQgPSBoaSAqIFNISUZUNjQgKyBsbzsKICAgIHN3YXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIyCiAgICAvLyBjb25zdCBTSElGVDY0OiBiaWd1aW50ID0gMTg0NDY3NDQwNzM3MDk1NTE2MTZuOyAvLyAyXjY0CiAgICBieXRlYyAyNyAvLyAweDAxMDAwMDAwMDAwMDAwMDAwMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDg1CiAgICAvLyBsZXQgeDogYmlndWludCA9IGhpICogU0hJRlQ2NCArIGxvOwogICAgYioKICAgIGIrCiAgICBmcmFtZV9idXJ5IDEKCmNicnRfd2hpbGVfdG9wQDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0ODkKICAgIC8vIGNvbnN0IHgyOiBiaWd1aW50ID0geCAqIHg7CiAgICBmcmFtZV9kaWcgMQogICAgZHVwCiAgICBiKgogICAgZHVwCiAgICBmcmFtZV9idXJ5IDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ5MAogICAgLy8gaWYgKHgyID09PSAwbikgYnJlYWs7IC8vIHNob3VsZCBub3QgaGFwcGVuIGZvciB4PjAKICAgIHB1c2hieXRlcyAweAogICAgYj09CiAgICBibnogY2JydF93aGlsZV90b3BAMTQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ5MQogICAgLy8gY29uc3QgbmV4dDogYmlndWludCA9ICgybiAqIHggKyBuIC8geDIpIC8gM247CiAgICBieXRlYyAxNyAvLyAweDAyCiAgICBmcmFtZV9kaWcgMQogICAgZHVwCiAgICBjb3ZlciAyCiAgICBiKgogICAgZnJhbWVfZGlnIC0xCiAgICBmcmFtZV9kaWcgMwogICAgYi8KICAgIGIrCiAgICBieXRlYyAyNiAvLyAweDAzCiAgICBiLwogICAgZHVwCiAgICBmcmFtZV9idXJ5IDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ5MgogICAgLy8gaWYgKG5leHQgPT09IHggfHwgbmV4dCA9PT0geCAtIDFuKSB7CiAgICBiPT0KICAgIGJueiBjYnJ0X2lmX2JvZHlAMTAKICAgIGZyYW1lX2RpZyAxCiAgICBieXRlYyAxMCAvLyAweDAxCiAgICBiLQogICAgZnJhbWVfZGlnIDAKICAgIGI9PQogICAgYnogY2JydF9hZnRlcl9pZl9lbHNlQDExCgpjYnJ0X2lmX2JvZHlAMTA6CiAgICBmcmFtZV9kaWcgMAogICAgZnJhbWVfYnVyeSAxCgpjYnJ0X3doaWxlX3RvcEAxNDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUwMAogICAgLy8gd2hpbGUgKCh4ICsgMW4pICogKHggKyAxbikgKiAoeCArIDFuKSA8PSBuKSB4ICs9IDFuOwogICAgZnJhbWVfZGlnIDEKICAgIGJ5dGVjIDEwIC8vIDB4MDEKICAgIGIrCiAgICBkdXAKICAgIGZyYW1lX2J1cnkgMgogICAgZHVwCiAgICBkaWcgMQogICAgYioKICAgIGIqCiAgICBmcmFtZV9kaWcgLTEKICAgIGI8PQogICAgYnogY2JydF93aGlsZV90b3BAMTcKICAgIGZyYW1lX2RpZyAyCiAgICBmcmFtZV9idXJ5IDEKICAgIGIgY2JydF93aGlsZV90b3BAMTQKCmNicnRfd2hpbGVfdG9wQDE3OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTAxCiAgICAvLyB3aGlsZSAoeCAqIHggKiB4ID4gbikgeCAtPSAxbjsKICAgIGZyYW1lX2RpZyAxCiAgICBkdXAKICAgIGRpZyAxCiAgICBiKgogICAgYioKICAgIGZyYW1lX2RpZyAtMQogICAgYj4KICAgIGJ6IGNicnRfYWZ0ZXJfd2hpbGVAMTkKICAgIGZyYW1lX2RpZyAxCiAgICBieXRlYyAxMCAvLyAweDAxCiAgICBiLQogICAgZnJhbWVfYnVyeSAxCiAgICBiIGNicnRfd2hpbGVfdG9wQDE3CgpjYnJ0X2FmdGVyX3doaWxlQDE5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTAyCiAgICAvLyByZXR1cm4gYmlndWludFRvVWludDY0TW9kdWxvKHgpOwogICAgZnJhbWVfZGlnIDEKICAgIGNhbGxzdWIgYmlndWludFRvVWludDY0TW9kdWxvCiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1YgoKY2JydF9hZnRlcl9pZl9lbHNlQDExOgogICAgZnJhbWVfZGlnIDAKICAgIGZyYW1lX2J1cnkgMQogICAgYiBjYnJ0X3doaWxlX3RvcEA1CgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjpSZXdhcmRNYW5hZ2VyLmNsYWltUmV3YXJkcygpIC0+IHZvaWQ6CmNsYWltUmV3YXJkczoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo1MC01MQogICAgLy8gQGFiaW1ldGhvZCgpCiAgICAvLyBjbGFpbVJld2FyZHMoKTogdm9pZCB7CiAgICBwcm90byAwIDAKICAgIHB1c2hieXRlcyAiIgogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NTIKICAgIC8vIGNvbnN0IHVzZXIgPSBUeG4uc2VuZGVyOwogICAgdHhuIFNlbmRlcgogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NTMKICAgIC8vIGNvbnN0IHVzZXJMcEFtb3VudCA9IHRoaXMuYmFsYW5jZSh1c2VyKS52YWx1ZTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzMKICAgIC8vIGJhbGFuY2UgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDQgLy8gImJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NTMKICAgIC8vIGNvbnN0IHVzZXJMcEFtb3VudCA9IHRoaXMuYmFsYW5jZSh1c2VyKS52YWx1ZTsKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIHN3YXAKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo1NAogICAgLy8gaWYgKHVzZXJMcEFtb3VudCA+IDApIHsKICAgIGJ6IGNsYWltUmV3YXJkc19hZnRlcl9pZl9lbHNlQDUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo1NQogICAgLy8gY29uc3QgcmV3YXJkcyA9IGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbyhCaWdVaW50KHVzZXJMcEFtb3VudCkgKiB0aGlzLmFjY1Jld2FyZFBlclNoYXJlUC52YWx1ZSAvIFBfU0NBTEUpOwogICAgZnJhbWVfZGlnIDMKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMAogICAgLy8gYWNjUmV3YXJkUGVyU2hhcmVQID0gR2xvYmFsU3RhdGU8YmlndWludD4oeyBpbml0aWFsVmFsdWU6IDBuIH0pOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDggLy8gImFjY1Jld2FyZFBlclNoYXJlUCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NTUKICAgIC8vIGNvbnN0IHJld2FyZHMgPSBiaWd1aW50VG9VaW50NjRNb2R1bG8oQmlnVWludCh1c2VyTHBBbW91bnQpICogdGhpcy5hY2NSZXdhcmRQZXJTaGFyZVAudmFsdWUgLyBQX1NDQUxFKTsKICAgIGIqCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjAKICAgIC8vIGNvbnN0IFBfU0NBTEU6IGJpZ3VpbnQgPSBCaWdVaW50KDEgPDwgUCk7CiAgICBieXRlYyA5IC8vIDB4MDEwMDAwMDAwMDAwMDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo1NQogICAgLy8gY29uc3QgcmV3YXJkcyA9IGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbyhCaWdVaW50KHVzZXJMcEFtb3VudCkgKiB0aGlzLmFjY1Jld2FyZFBlclNoYXJlUC52YWx1ZSAvIFBfU0NBTEUpOwogICAgYi8KICAgIGNhbGxzdWIgYmlndWludFRvVWludDY0TW9kdWxvCiAgICBkdXAKICAgIGZyYW1lX2J1cnkgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjU2CiAgICAvLyBjb25zdCBwZW5kaW5nOiB1aW50NjQgPSByZXdhcmRzIC0gdGhpcy51c2VyUmV3YXJkRGVidCh1c2VyKS52YWx1ZTsKICAgIGZyYW1lX2RpZyAyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjM0CiAgICAvLyB1c2VyUmV3YXJkRGVidCA9IExvY2FsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgNSAvLyAidXNlclJld2FyZERlYnQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NTYKICAgIC8vIGNvbnN0IHBlbmRpbmc6IHVpbnQ2NCA9IHJld2FyZHMgLSB0aGlzLnVzZXJSZXdhcmREZWJ0KHVzZXIpLnZhbHVlOwogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICAtCiAgICBkdXAKICAgIGZyYW1lX2J1cnkgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjU3CiAgICAvLyBpZiAocGVuZGluZyA+IDApIHsKICAgIGJ6IGNsYWltUmV3YXJkc19hZnRlcl9pZl9lbHNlQDUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo1OAogICAgLy8gdGhpcy51c2VyUmV3YXJkRGVidCh1c2VyKS52YWx1ZSA9IHJld2FyZHM7CiAgICBmcmFtZV9kaWcgMgogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzQKICAgIC8vIHVzZXJSZXdhcmREZWJ0ID0gTG9jYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlYyA1IC8vICJ1c2VyUmV3YXJkRGVidCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo1OAogICAgLy8gdGhpcy51c2VyUmV3YXJkRGVidCh1c2VyKS52YWx1ZSA9IHJld2FyZHM7CiAgICBmcmFtZV9kaWcgMQogICAgYXBwX2xvY2FsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjU5CiAgICAvLyBhc3NldFRyYW5zZmVyKHsgeGZlckFzc2V0OiB0aGlzLmFzc2V0LnZhbHVlLCBhc3NldEFtb3VudDogcGVuZGluZywgYXNzZXRSZWNlaXZlcjogdXNlciB9KS5zdWJtaXQoKTsKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyNwogICAgLy8gYXNzZXQgPSBHbG9iYWxTdGF0ZTxBc3NldD4oKTsKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18yIC8vICJhc3NldCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBkaWcgMQogICAgaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCiAgICBmcmFtZV9kaWcgMAogICAgZHVwCiAgICBjb3ZlciAyCiAgICBpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjU5CiAgICAvLyBhc3NldFRyYW5zZmVyKHsgeGZlckFzc2V0OiB0aGlzLmFzc2V0LnZhbHVlLCBhc3NldEFtb3VudDogcGVuZGluZywgYXNzZXRSZWNlaXZlcjogdXNlciB9KS5zdWJtaXQoKTsKICAgIGludGNfMyAvLyA0CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NjAKICAgIC8vIGVtaXQ8UmV3YXJkc0NsYWltZWQ+KHsgdXNlcjogbmV3IEFkZHJlc3ModXNlciksIHBlbmRpbmcgfSk7CiAgICBpdG9iCiAgICBjb25jYXQKICAgIGJ5dGVjIDI1IC8vIG1ldGhvZCAiUmV3YXJkc0NsYWltZWQoYWRkcmVzcyx1aW50NjQpIgogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKCmNsYWltUmV3YXJkc19hZnRlcl9pZl9lbHNlQDU6CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6OlJld2FyZE1hbmFnZXIuc2V0QWRtaW5GZWVTaGFyZShhZG1pbkZlZVNoYXJlQlA6IHVpbnQ2NCkgLT4gdm9pZDoKc2V0QWRtaW5GZWVTaGFyZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo2NS02NgogICAgLy8gQGFiaW1ldGhvZCgpCiAgICAvLyBzZXRBZG1pbkZlZVNoYXJlKGFkbWluRmVlU2hhcmVCUDogdWludDY0KTogdm9pZCB7CiAgICBwcm90byAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo2NwogICAgLy8gdGhpcy5vbmx5T3duZXIoKTsKICAgIGNhbGxzdWIgb25seU93bmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NjgKICAgIC8vIGFzc2VydChhZG1pbkZlZVNoYXJlQlAgPD0gQlAsICdSZXdhcmRNYW5hZ2VyOiB0b28gaGlnaCcpOwogICAgZnJhbWVfZGlnIC0xCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTkKICAgIC8vIGV4cG9ydCBjb25zdCBCUDogdWludDY0ID0gMTBfMDAwOwogICAgaW50YyA0IC8vIDEwMDAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NjgKICAgIC8vIGFzc2VydChhZG1pbkZlZVNoYXJlQlAgPD0gQlAsICdSZXdhcmRNYW5hZ2VyOiB0b28gaGlnaCcpOwogICAgPD0KICAgIGFzc2VydCAvLyBSZXdhcmRNYW5hZ2VyOiB0b28gaGlnaAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjI4CiAgICAvLyBhZG1pbkZlZVNoYXJlQlAgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiBCUCAvIDUgfSk7IC8vIERlZmF1bHQgYWRtaW4gZmVlIGlzIDIwJQogICAgYnl0ZWMgMTggLy8gImFkbWluRmVlU2hhcmVCUCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo2OQogICAgLy8gdGhpcy5hZG1pbkZlZVNoYXJlQlAudmFsdWUgPSBhZG1pbkZlZVNoYXJlQlA7CiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6OlJld2FyZE1hbmFnZXIuY2xhaW1BZG1pbkZlZSgpIC0+IHZvaWQ6CmNsYWltQWRtaW5GZWU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NzItNzMKICAgIC8vIEBhYmltZXRob2QoKQogICAgLy8gY2xhaW1BZG1pbkZlZSgpOiB2b2lkIHsKICAgIHByb3RvIDAgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjc0CiAgICAvLyB0aGlzLm9ubHlPd25lcigpOwogICAgY2FsbHN1YiBvbmx5T3duZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMQogICAgLy8gYWRtaW5GZWVBbW91bnQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDExIC8vICJhZG1pbkZlZUFtb3VudCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBzd2FwCiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjc2CiAgICAvLyBpZiAoYWRtaW5GZWVBbW91bnQgPiAwKSB7CiAgICBieiBjbGFpbUFkbWluRmVlX2FmdGVyX2lmX2Vsc2VAMwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjc3LTgxCiAgICAvLyBhc3NldFRyYW5zZmVyKHsKICAgIC8vICAgeGZlckFzc2V0OiB0aGlzLmFzc2V0LnZhbHVlLAogICAgLy8gICBhc3NldEFtb3VudDogYWRtaW5GZWVBbW91bnQsCiAgICAvLyAgIGFzc2V0UmVjZWl2ZXI6IHRoaXMub3duZXIudmFsdWUuYnl0ZXMsCiAgICAvLyB9KS5zdWJtaXQoKTsKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyNwogICAgLy8gYXNzZXQgPSBHbG9iYWxTdGF0ZTxBc3NldD4oKTsKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18yIC8vICJhc3NldCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czo2CiAgICAvLyBwcm90ZWN0ZWQgb3duZXIgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPigpOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDE0IC8vICJvd25lciIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIGZyYW1lX2RpZyAwCiAgICBpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjc3LTgxCiAgICAvLyBhc3NldFRyYW5zZmVyKHsKICAgIC8vICAgeGZlckFzc2V0OiB0aGlzLmFzc2V0LnZhbHVlLAogICAgLy8gICBhc3NldEFtb3VudDogYWRtaW5GZWVBbW91bnQsCiAgICAvLyAgIGFzc2V0UmVjZWl2ZXI6IHRoaXMub3duZXIudmFsdWUuYnl0ZXMsCiAgICAvLyB9KS5zdWJtaXQoKTsKICAgIGludGNfMyAvLyA0CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzEKICAgIC8vIGFkbWluRmVlQW1vdW50ID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjIDExIC8vICJhZG1pbkZlZUFtb3VudCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo4MgogICAgLy8gdGhpcy5hZG1pbkZlZUFtb3VudC52YWx1ZSA9IDA7CiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKCmNsYWltQWRtaW5GZWVfYWZ0ZXJfaWZfZWxzZUAzOgogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjpSZXdhcmRNYW5hZ2VyLnBlbmRpbmdSZXdhcmQodXNlcjogYnl0ZXMpIC0+IHVpbnQ2NDoKcGVuZGluZ1Jld2FyZDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo4Ni04NwogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICAvLyBwZW5kaW5nUmV3YXJkKHVzZXI6IEFjY291bnQpOiB1aW50NjQgewogICAgcHJvdG8gMSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6ODgKICAgIC8vIHJldHVybiBiaWd1aW50VG9VaW50NjRNb2R1bG8oKEJpZ1VpbnQodGhpcy5iYWxhbmNlKHVzZXIpLnZhbHVlKSAqIHRoaXMuYWNjUmV3YXJkUGVyU2hhcmVQLnZhbHVlKSAvIFBfU0NBTEUpIC0gdGhpcy51c2VyUmV3YXJkRGVidCh1c2VyKS52YWx1ZTsKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMwogICAgLy8gYmFsYW5jZSA9IExvY2FsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgNCAvLyAiYmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo4OAogICAgLy8gcmV0dXJuIGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbygoQmlnVWludCh0aGlzLmJhbGFuY2UodXNlcikudmFsdWUpICogdGhpcy5hY2NSZXdhcmRQZXJTaGFyZVAudmFsdWUpIC8gUF9TQ0FMRSkgLSB0aGlzLnVzZXJSZXdhcmREZWJ0KHVzZXIpLnZhbHVlOwogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzAKICAgIC8vIGFjY1Jld2FyZFBlclNoYXJlUCA9IEdsb2JhbFN0YXRlPGJpZ3VpbnQ+KHsgaW5pdGlhbFZhbHVlOiAwbiB9KTsKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA4IC8vICJhY2NSZXdhcmRQZXJTaGFyZVAiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjg4CiAgICAvLyByZXR1cm4gYmlndWludFRvVWludDY0TW9kdWxvKChCaWdVaW50KHRoaXMuYmFsYW5jZSh1c2VyKS52YWx1ZSkgKiB0aGlzLmFjY1Jld2FyZFBlclNoYXJlUC52YWx1ZSkgLyBQX1NDQUxFKSAtIHRoaXMudXNlclJld2FyZERlYnQodXNlcikudmFsdWU7CiAgICBiKgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjIwCiAgICAvLyBjb25zdCBQX1NDQUxFOiBiaWd1aW50ID0gQmlnVWludCgxIDw8IFApOwogICAgYnl0ZWMgOSAvLyAweDAxMDAwMDAwMDAwMDAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6ODgKICAgIC8vIHJldHVybiBiaWd1aW50VG9VaW50NjRNb2R1bG8oKEJpZ1VpbnQodGhpcy5iYWxhbmNlKHVzZXIpLnZhbHVlKSAqIHRoaXMuYWNjUmV3YXJkUGVyU2hhcmVQLnZhbHVlKSAvIFBfU0NBTEUpIC0gdGhpcy51c2VyUmV3YXJkRGVidCh1c2VyKS52YWx1ZTsKICAgIGIvCiAgICBjYWxsc3ViIGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbwogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjM0CiAgICAvLyB1c2VyUmV3YXJkRGVidCA9IExvY2FsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgNSAvLyAidXNlclJld2FyZERlYnQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6ODgKICAgIC8vIHJldHVybiBiaWd1aW50VG9VaW50NjRNb2R1bG8oKEJpZ1VpbnQodGhpcy5iYWxhbmNlKHVzZXIpLnZhbHVlKSAqIHRoaXMuYWNjUmV3YXJkUGVyU2hhcmVQLnZhbHVlKSAvIFBfU0NBTEUpIC0gdGhpcy51c2VyUmV3YXJkRGVidCh1c2VyKS52YWx1ZTsKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBMb2NhbFN0YXRlIGV4aXN0cwogICAgLQogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjpSZXdhcmRNYW5hZ2VyLmFkZFJld2FyZHMocmV3YXJkQW1vdW50OiB1aW50NjQpIC0+IHZvaWQ6CmFkZFJld2FyZHM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6OTYKICAgIC8vIHByb3RlY3RlZCBhZGRSZXdhcmRzKHJld2FyZEFtb3VudDogdWludDY0KTogdm9pZCB7CiAgICBwcm90byAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyOQogICAgLy8gdG90YWxTdXBwbHkgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDcgLy8gInRvdGFsU3VwcGx5IgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHN3YXAKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6OTgKICAgIC8vIGlmICh0b3RhbFN1cHBseSA+IDApIHsKICAgIGJ6IGFkZFJld2FyZHNfYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjgKICAgIC8vIGFkbWluRmVlU2hhcmVCUCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IEJQIC8gNSB9KTsgLy8gRGVmYXVsdCBhZG1pbiBmZWUgaXMgMjAlCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMTggLy8gImFkbWluRmVlU2hhcmVCUCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6OTkKICAgIC8vIGNvbnN0IGFkbWluRmVlUmV3YXJkczogdWludDY0ID0gKHJld2FyZEFtb3VudCAqIHRoaXMuYWRtaW5GZWVTaGFyZUJQLnZhbHVlKSAvIEJQOwogICAgZnJhbWVfZGlnIC0xCiAgICAqCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTkKICAgIC8vIGV4cG9ydCBjb25zdCBCUDogdWludDY0ID0gMTBfMDAwOwogICAgaW50YyA0IC8vIDEwMDAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6OTkKICAgIC8vIGNvbnN0IGFkbWluRmVlUmV3YXJkczogdWludDY0ID0gKHJld2FyZEFtb3VudCAqIHRoaXMuYWRtaW5GZWVTaGFyZUJQLnZhbHVlKSAvIEJQOwogICAgLwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEwMAogICAgLy8gcmV3YXJkQW1vdW50IC09IGFkbWluRmVlUmV3YXJkczsKICAgIGZyYW1lX2RpZyAtMQogICAgZGlnIDEKICAgIC0KICAgIGZyYW1lX2J1cnkgLTEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMAogICAgLy8gYWNjUmV3YXJkUGVyU2hhcmVQID0gR2xvYmFsU3RhdGU8YmlndWludD4oeyBpbml0aWFsVmFsdWU6IDBuIH0pOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDggLy8gImFjY1Jld2FyZFBlclNoYXJlUCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTAxCiAgICAvLyB0aGlzLmFjY1Jld2FyZFBlclNoYXJlUC52YWx1ZSArPSBCaWdVaW50KHJld2FyZEFtb3VudCkgKiBQX1NDQUxFIC8gQmlnVWludCh0b3RhbFN1cHBseSk7CiAgICBmcmFtZV9kaWcgLTEKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyMAogICAgLy8gY29uc3QgUF9TQ0FMRTogYmlndWludCA9IEJpZ1VpbnQoMSA8PCBQKTsKICAgIGJ5dGVjIDkgLy8gMHgwMTAwMDAwMDAwMDAwMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEwMQogICAgLy8gdGhpcy5hY2NSZXdhcmRQZXJTaGFyZVAudmFsdWUgKz0gQmlnVWludChyZXdhcmRBbW91bnQpICogUF9TQ0FMRSAvIEJpZ1VpbnQodG90YWxTdXBwbHkpOwogICAgYioKICAgIGZyYW1lX2RpZyAwCiAgICBpdG9iCiAgICBiLwogICAgYisKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMAogICAgLy8gYWNjUmV3YXJkUGVyU2hhcmVQID0gR2xvYmFsU3RhdGU8YmlndWludD4oeyBpbml0aWFsVmFsdWU6IDBuIH0pOwogICAgYnl0ZWMgOCAvLyAiYWNjUmV3YXJkUGVyU2hhcmVQIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEwMQogICAgLy8gdGhpcy5hY2NSZXdhcmRQZXJTaGFyZVAudmFsdWUgKz0gQmlnVWludChyZXdhcmRBbW91bnQpICogUF9TQ0FMRSAvIEJpZ1VpbnQodG90YWxTdXBwbHkpOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMQogICAgLy8gYWRtaW5GZWVBbW91bnQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDExIC8vICJhZG1pbkZlZUFtb3VudCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTAyCiAgICAvLyB0aGlzLmFkbWluRmVlQW1vdW50LnZhbHVlICs9IGFkbWluRmVlUmV3YXJkczsKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMQogICAgLy8gYWRtaW5GZWVBbW91bnQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgMTEgLy8gImFkbWluRmVlQW1vdW50IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEwMgogICAgLy8gdGhpcy5hZG1pbkZlZUFtb3VudC52YWx1ZSArPSBhZG1pbkZlZVJld2FyZHM7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAoKYWRkUmV3YXJkc19hZnRlcl9pZl9lbHNlQDI6CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6OlJld2FyZE1hbmFnZXIuZGVwb3NpdExwKHRvOiBieXRlcywgbHBBbW91bnQ6IHVpbnQ2NCkgLT4gdm9pZDoKZGVwb3NpdExwOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEwNgogICAgLy8gcHJvdGVjdGVkIGRlcG9zaXRMcCh0bzogQWNjb3VudCwgbHBBbW91bnQ6IHVpbnQ2NCk6IHZvaWQgewogICAgcHJvdG8gMiAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzAKICAgIC8vIGFjY1Jld2FyZFBlclNoYXJlUCA9IEdsb2JhbFN0YXRlPGJpZ3VpbnQ+KHsgaW5pdGlhbFZhbHVlOiAwbiB9KTsKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA4IC8vICJhY2NSZXdhcmRQZXJTaGFyZVAiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEwOAogICAgLy8gbGV0IHBlbmRpbmc6IHVpbnQ2NCA9IDA7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEwOQogICAgLy8gbGV0IHVzZXJMcEFtb3VudCA9IHRoaXMuYmFsYW5jZSh0bykudmFsdWU7CiAgICBmcmFtZV9kaWcgLTIKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzMKICAgIC8vIGJhbGFuY2UgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDQgLy8gImJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTA5CiAgICAvLyBsZXQgdXNlckxwQW1vdW50ID0gdGhpcy5iYWxhbmNlKHRvKS52YWx1ZTsKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIHN3YXAKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMTAKICAgIC8vIGlmICh1c2VyTHBBbW91bnQgPiAwKSB7CiAgICBieiBkZXBvc2l0THBfYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTExCiAgICAvLyBwZW5kaW5nID0gYmlndWludFRvVWludDY0TW9kdWxvKEJpZ1VpbnQodXNlckxwQW1vdW50KSAqIGFjY1Jld2FyZFBlclNoYXJlUCAvIFBfU0NBTEUpIC0gdGhpcy51c2VyUmV3YXJkRGVidCh0bykudmFsdWU7CiAgICBmcmFtZV9kaWcgMgogICAgaXRvYgogICAgZnJhbWVfZGlnIDAKICAgIGIqCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjAKICAgIC8vIGNvbnN0IFBfU0NBTEU6IGJpZ3VpbnQgPSBCaWdVaW50KDEgPDwgUCk7CiAgICBieXRlYyA5IC8vIDB4MDEwMDAwMDAwMDAwMDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMTEKICAgIC8vIHBlbmRpbmcgPSBiaWd1aW50VG9VaW50NjRNb2R1bG8oQmlnVWludCh1c2VyTHBBbW91bnQpICogYWNjUmV3YXJkUGVyU2hhcmVQIC8gUF9TQ0FMRSkgLSB0aGlzLnVzZXJSZXdhcmREZWJ0KHRvKS52YWx1ZTsKICAgIGIvCiAgICBjYWxsc3ViIGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbwogICAgZnJhbWVfZGlnIC0yCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjM0CiAgICAvLyB1c2VyUmV3YXJkRGVidCA9IExvY2FsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgNSAvLyAidXNlclJld2FyZERlYnQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTExCiAgICAvLyBwZW5kaW5nID0gYmlndWludFRvVWludDY0TW9kdWxvKEJpZ1VpbnQodXNlckxwQW1vdW50KSAqIGFjY1Jld2FyZFBlclNoYXJlUCAvIFBfU0NBTEUpIC0gdGhpcy51c2VyUmV3YXJkRGVidCh0bykudmFsdWU7CiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIC0KICAgIGZyYW1lX2J1cnkgMQoKZGVwb3NpdExwX2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMTMKICAgIC8vIHVzZXJMcEFtb3VudCArPSBscEFtb3VudDsKICAgIGZyYW1lX2RpZyAyCiAgICBmcmFtZV9kaWcgLTEKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMTQKICAgIC8vIHRoaXMuYmFsYW5jZSh0bykudmFsdWUgKz0gbHBBbW91bnQ7CiAgICBmcmFtZV9kaWcgLTIKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzMKICAgIC8vIGJhbGFuY2UgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDQgLy8gImJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTE0CiAgICAvLyB0aGlzLmJhbGFuY2UodG8pLnZhbHVlICs9IGxwQW1vdW50OwogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTEKICAgICsKICAgIGZyYW1lX2RpZyAtMgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMzCiAgICAvLyBiYWxhbmNlID0gTG9jYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlYyA0IC8vICJiYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjExNAogICAgLy8gdGhpcy5iYWxhbmNlKHRvKS52YWx1ZSArPSBscEFtb3VudDsKICAgIHVuY292ZXIgMgogICAgYXBwX2xvY2FsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjI5CiAgICAvLyB0b3RhbFN1cHBseSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNyAvLyAidG90YWxTdXBwbHkiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjExNQogICAgLy8gdGhpcy50b3RhbFN1cHBseS52YWx1ZSArPSBscEFtb3VudDsKICAgIGZyYW1lX2RpZyAtMQogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjI5CiAgICAvLyB0b3RhbFN1cHBseSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyA3IC8vICJ0b3RhbFN1cHBseSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMTUKICAgIC8vIHRoaXMudG90YWxTdXBwbHkudmFsdWUgKz0gbHBBbW91bnQ7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjExNwogICAgLy8gdGhpcy51c2VyUmV3YXJkRGVidCh0bykudmFsdWUgPSBiaWd1aW50VG9VaW50NjRNb2R1bG8oKEJpZ1VpbnQodXNlckxwQW1vdW50KSAqIGFjY1Jld2FyZFBlclNoYXJlUCkgLyBQX1NDQUxFKTsKICAgIGl0b2IKICAgIGZyYW1lX2RpZyAwCiAgICBiKgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjIwCiAgICAvLyBjb25zdCBQX1NDQUxFOiBiaWd1aW50ID0gQmlnVWludCgxIDw8IFApOwogICAgYnl0ZWMgOSAvLyAweDAxMDAwMDAwMDAwMDAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTE3CiAgICAvLyB0aGlzLnVzZXJSZXdhcmREZWJ0KHRvKS52YWx1ZSA9IGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbygoQmlnVWludCh1c2VyTHBBbW91bnQpICogYWNjUmV3YXJkUGVyU2hhcmVQKSAvIFBfU0NBTEUpOwogICAgYi8KICAgIGNhbGxzdWIgYmlndWludFRvVWludDY0TW9kdWxvCiAgICBmcmFtZV9kaWcgLTIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozNAogICAgLy8gdXNlclJld2FyZERlYnQgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDUgLy8gInVzZXJSZXdhcmREZWJ0IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjExNwogICAgLy8gdGhpcy51c2VyUmV3YXJkRGVidCh0bykudmFsdWUgPSBiaWd1aW50VG9VaW50NjRNb2R1bG8oKEJpZ1VpbnQodXNlckxwQW1vdW50KSAqIGFjY1Jld2FyZFBlclNoYXJlUCkgLyBQX1NDQUxFKTsKICAgIHVuY292ZXIgMgogICAgYXBwX2xvY2FsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjExOAogICAgLy8gaWYgKHBlbmRpbmcgPiAwKSB7CiAgICBmcmFtZV9kaWcgMQogICAgYnogZGVwb3NpdExwX2FmdGVyX2lmX2Vsc2VANQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjExOQogICAgLy8gYXNzZXRUcmFuc2Zlcih7IHhmZXJBc3NldDogdGhpcy5hc3NldC52YWx1ZSwgYXNzZXRBbW91bnQ6IHBlbmRpbmcsIGFzc2V0UmVjZWl2ZXI6IHRvIH0pLnN1Ym1pdCgpOwogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjI3CiAgICAvLyBhc3NldCA9IEdsb2JhbFN0YXRlPEFzc2V0PigpOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzIgLy8gImFzc2V0IgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGZyYW1lX2RpZyAtMgogICAgaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCiAgICBmcmFtZV9kaWcgMQogICAgZHVwCiAgICBjb3ZlciAyCiAgICBpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjExOQogICAgLy8gYXNzZXRUcmFuc2Zlcih7IHhmZXJBc3NldDogdGhpcy5hc3NldC52YWx1ZSwgYXNzZXRBbW91bnQ6IHBlbmRpbmcsIGFzc2V0UmVjZWl2ZXI6IHRvIH0pLnN1Ym1pdCgpOwogICAgaW50Y18zIC8vIDQKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMjAKICAgIC8vIGVtaXQ8UmV3YXJkc0NsYWltZWQ+KHsgdXNlcjogbmV3IEFkZHJlc3ModG8pLCBwZW5kaW5nIH0pOwogICAgaXRvYgogICAgZnJhbWVfZGlnIC0yCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjIDI1IC8vIG1ldGhvZCAiUmV3YXJkc0NsYWltZWQoYWRkcmVzcyx1aW50NjQpIgogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKCmRlcG9zaXRMcF9hZnRlcl9pZl9lbHNlQDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTIyCiAgICAvLyBlbWl0PERlcG9zaXQ+KHsgdG86IG5ldyBBZGRyZXNzKHRvKSwgbHBBbW91bnQgfSk7CiAgICBmcmFtZV9kaWcgLTEKICAgIGl0b2IKICAgIGZyYW1lX2RpZyAtMgogICAgc3dhcAogICAgY29uY2F0CiAgICBwdXNoYnl0ZXMgMHhjZmFiODcyMyAvLyBtZXRob2QgIkRlcG9zaXQoYWRkcmVzcyx1aW50NjQpIgogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjpPd25hYmxlLm9ubHlPd25lcigpIC0+IHZvaWQ6Cm9ubHlPd25lcjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjEzCiAgICAvLyBhc3NlcnQob3AuVHhuLnNlbmRlci5ieXRlcyA9PT0gdGhpcy5vd25lci52YWx1ZS5ieXRlcywgJ09ubHkgb3duZXInKTsKICAgIHR4biBTZW5kZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjYKICAgIC8vIHByb3RlY3RlZCBvd25lciA9IEdsb2JhbFN0YXRlPEFkZHJlc3M+KCk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMTQgLy8gIm93bmVyIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjEzCiAgICAvLyBhc3NlcnQob3AuVHhuLnNlbmRlci5ieXRlcyA9PT0gdGhpcy5vd25lci52YWx1ZS5ieXRlcywgJ09ubHkgb3duZXInKTsKICAgID09CiAgICBhc3NlcnQgLy8gT25seSBvd25lcgogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6Ok93bmFibGUudHJhbnNmZXJPd25lcnNoaXAobmV3T3duZXI6IGJ5dGVzKSAtPiB2b2lkOgp0cmFuc2Zlck93bmVyc2hpcDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjE2LTE3CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB0cmFuc2Zlck93bmVyc2hpcChuZXdPd25lcjogQWRkcmVzcyk6IHZvaWQgewogICAgcHJvdG8gMSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czoxOAogICAgLy8gdGhpcy5vbmx5T3duZXIoKTsKICAgIGNhbGxzdWIgb25seU93bmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czo2CiAgICAvLyBwcm90ZWN0ZWQgb3duZXIgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPigpOwogICAgYnl0ZWMgMTQgLy8gIm93bmVyIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6MTkKICAgIC8vIHRoaXMub3duZXIudmFsdWUgPSBuZXdPd25lcjsKICAgIGZyYW1lX2RpZyAtMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1Ygo=",clear:"I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg=="},byteCode:{approval:"CiAFAAEIBJBOJhwMdG9rZW5CYWxhbmNlC3ZVc2RCYWxhbmNlBWFzc2V0CHJlc2VydmVzB2JhbGFuY2UOdXNlclJld2FyZERlYnQBZAt0b3RhbFN1cHBseRJhY2NSZXdhcmRQZXJTaGFyZVAHAQAAAAAAAAEBDmFkbWluRmVlQW1vdW50CmNhbkRlcG9zaXQLY2FuV2l0aGRyYXcFb3duZXIKZmVlU2hhcmVCUBFiYWxhbmNlUmF0aW9NaW5CUAECD2FkbWluRmVlU2hhcmVCUAQVH3x1AWEGcm91dGVyDXN0b3BBdXRob3JpdHkRdG9rZW5BbW91bnRSZWR1Y2UTdG9rZW5BbW91bnRJbmNyZWFzZQS6gYB2AQMJAQAAAAAAAAAAMRhAACgnEoHQD2cnByJnJwiAAGcnCyJnKCJnKSJnKyJnJwYiZycMI2cnDSNnMRtBAKiCFwRRbTR7BAGjo/8EdhCkYAToOoerBJLgOxwEIfHd/wTZeK0UBA0bTAYEdb+aKAT0k9ftBI1ctt8E/gSlzgQCjghZBEH8lm4Eq/IAFAQEsWHxBGZZHM8Epa5r0QSgTFvEBDYbYVkEMruwEQS4d57nBOF7r7Q2GgCOFwFhAVQBSAE/ATMBIwEFAOMA0wDHALcAqwCfAJMAhwB4AGkAXQBNAEEAKQARAAIiQzEZFEQxGEQ2GgGICuAjQzEZFEQxGESADBUffHUAAAAAAAAAA7AjQzEZFEQxGEQ2GgEXwByICbMWJxNMULAjQzEZFEQxGESICXEjQzEZFEQxGEQ2GgEXiAlPI0MxGRREMRhEiAjlI0MxGRREMRhENhoBiAY/I0MxGRREMRhENhoBiAYkI0MxGRREMRhEiAYQI0MxGRREMRhEiAX8I0MxGRREMRhEiAXoI0MxGRREMRhEiAXUI0MxGRREMRhENhoBF4gFsiNDMRkURDEYRIgFfSNDMRkURDEYRDYaAReIBVsjQzEZFEQxGEQ2GgE2GgIXNhoDFzYaBCJTiAR7FicTTFCwI0MxGRREMRhENhoBNhoCFzYaAyJTiAO+FicTTFCwI0MxGRREMRhENhoBF4gCcCNDMRkURDEYRIgBfiNDMRkURDEYRCNDMRkURDEYRIgA4iNDMRkjEkQxGESIAK4jQzEZFEQxGBRENhoBNhoCNhoDFzYaBBc2GgUXNhoGF4gAKiNDigEBi/8VSSQNQQAYiwAkCUmLAElOAw9LAkxNi/9MTwJSF0yJIkL/6IoGACcOi/pnKov9ZycUi/xnJxWL+2cnFov6ZycPi/5nJxCL/2ciKmVEcQFMSU8CRIEDDUEAJ4sAgQMJgQpMlCcXTGeLAIEDDEEADoEDiwAJgQpMlCcYTGeJIkL/9yJC/96KAAAxAEkiJwRjRQFAAAaLACcEImaLACInBWNFAUAABosAJwUiZomICK6xIiplRDIKshQishKyESWyECKyAbOAFlBvb2w6IG9wdC1pbiBjb21wbGV0ZWSwiTEAIicVZUQSRIkxACInFmVEEkSJigAAIihlTElPAkQiKWVMSU4CTgNEDUEAEIsBIQQLiwAKIicQZUQPRImLAIsBDEH/94sAIQQLiwEKIicQZUQPRImKAAAiJwxlREQiJwZlTElPAkQiKmVEMRZEMRYjCUk4ECUSREk4FDIKEkRJOBFPAhJESTggMgMSREk4FTIDEkQ4EogE2klOAklEIitlRAgrTGciKGVMSU4CTgNEIillTElOAk4ERAhMQQAFiwRAADSLASORIihlREsBCChMZyIpZUQIKUxniAQiMQAiJwZlRIsACYgG/CIoZUSBgICAgIAgDESJIihlRIsBFosCFksBo4sEFkxLAaJJFSQORCSvTEsBqxdPBAgoTGciKWVEiwMWTwSjTwOiSRUkDkRPAqsXCClMZ0L/n4oBACInDWVERCInBmVEMQBJIicEY0xJTwJESYv/D0QiJwhlTE4CRCJMQQAWiwIWiwOjJwmiiP2riwEiJwVjRAmMBIsCi/8JiwFJIicEY0SL/wlLAScETwJmIicHZUSL/wknB0xnTBaLA6MnCaKI/XMnBUxmiwRBACOxIiplRIsBSU4CshSLBElOArISshElshAisgGzFlAnGUxQsIv/FosBSwFQgATTr6TxTFCwIihlRCIpZURKCCIoZURPAxZLBKNLAhZMSwGiSRUkDkQkr0xLAasXTwNMCShMZyIpZURPBBZPBaNPA6JJFSQORE8CqxcJKUxnIihlRCIpZUQIDUQiK2VEi/8PRCIrZUSL/wkrTGeIAq8iJwZlRIsADESxIiplRIv/iANBMQCyFLISshElshAisgGziYoDAYAAiP2FIkcDi/5BAGGL/0AADSInD2VEi/4LIQQKjAKL/osCCYgC1kmIAwOL/kwJjAIiKGVESwEIKExnIitlRAgrTGciKGVEiAGbSYwAIillRAxBAAkiKWVEiwAJjAEpiwBniwJJiATIjAOLAYwEiwOLBCIqZUQWi/4WSwIWTwQWi/1PBFBPA1BPAlBMUIAEK7vso0xQsIj9BYwAiYoEAYAASYj85SJHBIv9QQCFIillRIv9CClMZyIpZUSIASdJjAAiKGVMSU4CjAFEDEEADYsBiwAJSYwCiAJUjAMiK2VEiwJJTwIORCIrZURMCStMZ4v/QAANIicPZUSLAwshBAqMBIsDiwRJTgIJKIsAZ0mL/g9EsSIqZUSL/LIUSwGyErIRJbIQIrIBs0sBiAQCjAaMBYsFiwYiKmVEFov9FksCFk8EFov8TwRQTwNQTwJQTFCABNPx1UJMULCI/EGMAImKAQCIBKOL/yEEDkQnD4v/Z4mKAACIBJEiJwZlTElPAkQiJwdlTElOAk4DRA1BAAoxAIsAiwEJiAPWiYoBAIgEaIv/IQQORCcQi/9niYj75CcMImeJiARRJwwjZ4mI+9QnDSJniYgEQScNI2eJigEAiAQ2JxaL/2eJigEAiAQqJxWL/2eJigEBIkmL/xZJIicGZUQWSU4CIicUZUSBApAWSU4DJxGjTgKmSUEAdIsDiwKhiwSjjACLBkEAWosAiwOnQQBHiwCLA6GMASOLBIsDSU4Co0sBo6OLAUmjiwJJTwKjTwKgo4gBFkxBABWLAosBo6CLBYsCo6InCqCI+kmMAImLAosBo6FC/+iLA4sAoYwBIkL/tosAiwOgjAEiQv+riwKLA6FC/4mKAAAiKGVEFiIpZUQWSqMiJxRlRBZJSwKjTwRPBKCjSU4CTgOAAQSjJwqhTwKjJxqiSwFLAqNLAUsCo08Co6CIAJRJTgJKoIgA8k4DpEEAFYsAoYgA5osBTAmMAYsBI5AnBkxniYsATKGIANCLAQiMAUL/6IoBASInF2VMSU8CRCInGGVMTgJEQQAIi/+LAAqMAImLAUEACIv/iwELjACJi/+MAImKAQEiJxdlTElPAkQiJxhlTE4CREEACIv/iwALjACJiwFBAAiL/4sBCowAiYv/jACJigEBIkmL/4AApUSL/4AAqEEABYAAjACJi/8nGqZBAAUnCowAiYv/kyMIgQIKgQJMlUwWTBZMJxujoEmMAIv/SwGioCcRoowBiwGLAKRBABWL/4sBSU4CoksBoCcRoowBjABC/+OJigEBIkcDi/+AAKhBAAQijACJi/+AAQikQQAEI4wAiYv/k4ECCIEDCoECTJVMFkwWTCcbo6CMAYsBSaNJjAOAAKhAACcnEYsBSU4Co4v/iwOioCcaokmMAKhAAAuLAScKoYsAqEEAPYsAjAGLAScKoEmMAklLAaOji/+mQQAHiwKMAUL/5osBSUsBo6OL/6VBAAqLAScKoYwBQv/piwGI+EKMAImLAIwBQv+MigAAgABJMQBJIicEY0xJTwJEQQBIiwMWIicIZUSjJwmiiPgUSYwBiwIiJwVjRAlJjABBACiLAkknBYsBZrEiKmVESwGyFIsASU4CshKyESWyECKyAbMWUCcZTFCwiYoBAIgBNYv/IQQORCcSi/9niYoAAIgBIyInC2VMSU8CREEAHbEiKmVEIicOZUSyFIsAshKyESWyECKyAbMnCyJniYoBAYv/IicEY0QWIicIZUSjJwmiiPeBi/8iJwVjRAmJigEAIicHZUxJTwJEQQAwIicSZUSL/wshBAqL/0sBCYz/IicIZUSL/xYnCaOLABaioCcITGciJwtlRAgnC0xniYoCACInCGVEIov+IicEY0xJTwJEQQAWiwIWiwCjJwmiiPcVi/4iJwVjRAmMAYsCi/8Ii/4iJwRjRIv/CIv+JwRPAmYiJwdlRIv/CCcHTGcWiwCjJwmiiPbfi/4nBU8CZosBQQAjsSIqZUSL/rIUiwFJTgKyErIRJbIQIrIBsxaL/kxQJxlMULCL/xaL/kxQgATPq4cjTFCwiTEAIicOZUQSRImKAQCI//AnDov/Z4k=",clear:"CoEBQw=="},events:[{name:"RewardsClaimed",args:[{type:"address",name:"user"},{type:"uint64",name:"pending"}]},{name:"Deposit",args:[{type:"address",name:"to"},{type:"uint64",name:"lpAmount"}]},{name:"Withdraw",args:[{type:"address",name:"from"},{type:"uint64",name:"lpAmount"}]},{name:"SwappedToVUsd",args:[{type:"address",name:"user"},{type:"uint64",name:"asset"},{type:"uint64",name:"amount"},{type:"uint64",name:"result"},{type:"uint64",name:"fee"}]},{name:"SwappedFromVUsd",args:[{type:"address",name:"user"},{type:"uint64",name:"asset"},{type:"uint64",name:"amount"},{type:"uint64",name:"result"},{type:"uint64",name:"fee"}]}],templateVariables:{}},za=class{constructor(n){this.value=n}asByteArray(){return this.value}asString(){return this.value!==void 0?Buffer.from(this.value).toString("utf-8"):void 0}},F=class a{static get create(){return{_resolveByMethod(n){switch(n.method){case"createApplication":case"createApplication(address,address,uint64,uint64,uint64,uint64)void":return a.create.createApplication(n)}throw new Error("Unknown ' + verb + ' method")},createApplication(n){return{...n,method:"createApplication(address,address,uint64,uint64,uint64,uint64)void",args:Array.isArray(n.args)?n.args:[n.args.owner,n.args.router,n.args.a,n.args.assetId,n.args.feeShareBp,n.args.balanceRatioMinBp]}}}}static get optIn(){return{optInToApplication(n){return{...n,method:"optInToApplication()void",args:Array.isArray(n.args)?n.args:[]}}}}static optInAsset(n){return{...n,method:"optInAsset()void",args:Array.isArray(n.args)?n.args:[]}}static noop(n){return{...n,method:"noop()void",args:Array.isArray(n.args)?n.args:[]}}static deposit(n){return{...n,method:"deposit()void",args:Array.isArray(n.args)?n.args:[]}}static withdraw(n){return{...n,method:"withdraw(uint64)void",args:Array.isArray(n.args)?n.args:[n.args.amountLp]}}static swapToVUsd(n){return{...n,method:"swapToVUsd(address,uint64,bool)uint64",args:Array.isArray(n.args)?n.args:[n.args.user,n.args.amount,n.args.zeroFee]}}static swapFromVUsd(n){return{...n,method:"swapFromVUsd(address,uint64,uint64,bool)uint64",args:Array.isArray(n.args)?n.args:[n.args.user,n.args.amount,n.args.receiveAmountMin,n.args.zeroFee]}}static setFeeShare(n){return{...n,method:"setFeeShare(uint64)void",args:Array.isArray(n.args)?n.args:[n.args.feeShareBp]}}static adjustTotalLpAmount(n){return{...n,method:"adjustTotalLpAmount()void",args:Array.isArray(n.args)?n.args:[]}}static setBalanceRatioMinBp(n){return{...n,method:"setBalanceRatioMinBP(uint64)void",args:Array.isArray(n.args)?n.args:[n.args.balanceRatioMinBp]}}static stopDeposit(n){return{...n,method:"stopDeposit()void",args:Array.isArray(n.args)?n.args:[]}}static startDeposit(n){return{...n,method:"startDeposit()void",args:Array.isArray(n.args)?n.args:[]}}static stopWithdraw(n){return{...n,method:"stopWithdraw()void",args:Array.isArray(n.args)?n.args:[]}}static startWithdraw(n){return{...n,method:"startWithdraw()void",args:Array.isArray(n.args)?n.args:[]}}static setStopAuthority(n){return{...n,method:"setStopAuthority(address)void",args:Array.isArray(n.args)?n.args:[n.args.stopAuthority]}}static setRouter(n){return{...n,method:"setRouter(address)void",args:Array.isArray(n.args)?n.args:[n.args.router]}}static claimRewards(n){return{...n,method:"claimRewards()void",args:Array.isArray(n.args)?n.args:[]}}static setAdminFeeShare(n){return{...n,method:"setAdminFeeShare(uint64)void",args:Array.isArray(n.args)?n.args:[n.args.adminFeeShareBp]}}static claimAdminFee(n){return{...n,method:"claimAdminFee()void",args:Array.isArray(n.args)?n.args:[]}}static pendingReward(n){return{...n,method:"pendingReward(account)uint64",args:Array.isArray(n.args)?n.args:[n.args.user]}}static decimals(n){return{...n,method:"decimals()uint64",args:Array.isArray(n.args)?n.args:[]}}static transferOwnership(n){return{...n,method:"transferOwnership(address)void",args:Array.isArray(n.args)?n.args:[n.args.newOwner]}}};var xa=class a{appClient;constructor(n){this.appClient=n instanceof Li.AppClient?n:new Li.AppClient({...n,appSpec:ka})}decodeReturnValue(n,i){return i!==void 0?(0,tc.getArc56ReturnValue)(i,this.appClient.getABIMethod(n),ka.structs):void 0}static async fromCreatorAndName(n){return new a(await Li.AppClient.fromCreatorAndName({...n,appSpec:ka}))}static async fromNetwork(n){return new a(await Li.AppClient.fromNetwork({...n,appSpec:ka}))}get appId(){return this.appClient.appId}get appAddress(){return this.appClient.appAddress}get appName(){return this.appClient.appName}get appSpec(){return this.appClient.appSpec}get algorand(){return this.appClient.algorand}params={optIn:{optInToApplication:(n={args:[]})=>this.appClient.params.optIn(F.optIn.optInToApplication(n))},clearState:n=>this.appClient.params.bare.clearState(n),optInAsset:(n={args:[]})=>this.appClient.params.call(F.optInAsset(n)),noop:(n={args:[]})=>this.appClient.params.call(F.noop(n)),deposit:(n={args:[]})=>this.appClient.params.call(F.deposit(n)),withdraw:n=>this.appClient.params.call(F.withdraw(n)),swapToVUsd:n=>this.appClient.params.call(F.swapToVUsd(n)),swapFromVUsd:n=>this.appClient.params.call(F.swapFromVUsd(n)),setFeeShare:n=>this.appClient.params.call(F.setFeeShare(n)),adjustTotalLpAmount:(n={args:[]})=>this.appClient.params.call(F.adjustTotalLpAmount(n)),setBalanceRatioMinBp:n=>this.appClient.params.call(F.setBalanceRatioMinBp(n)),stopDeposit:(n={args:[]})=>this.appClient.params.call(F.stopDeposit(n)),startDeposit:(n={args:[]})=>this.appClient.params.call(F.startDeposit(n)),stopWithdraw:(n={args:[]})=>this.appClient.params.call(F.stopWithdraw(n)),startWithdraw:(n={args:[]})=>this.appClient.params.call(F.startWithdraw(n)),setStopAuthority:n=>this.appClient.params.call(F.setStopAuthority(n)),setRouter:n=>this.appClient.params.call(F.setRouter(n)),claimRewards:(n={args:[]})=>this.appClient.params.call(F.claimRewards(n)),setAdminFeeShare:n=>this.appClient.params.call(F.setAdminFeeShare(n)),claimAdminFee:(n={args:[]})=>this.appClient.params.call(F.claimAdminFee(n)),pendingReward:n=>this.appClient.params.call(F.pendingReward(n)),decimals:(n={args:[]})=>this.appClient.params.call(F.decimals(n)),transferOwnership:n=>this.appClient.params.call(F.transferOwnership(n))};createTransaction={optIn:{optInToApplication:(n={args:[]})=>this.appClient.createTransaction.optIn(F.optIn.optInToApplication(n))},clearState:n=>this.appClient.createTransaction.bare.clearState(n),optInAsset:(n={args:[]})=>this.appClient.createTransaction.call(F.optInAsset(n)),noop:(n={args:[]})=>this.appClient.createTransaction.call(F.noop(n)),deposit:(n={args:[]})=>this.appClient.createTransaction.call(F.deposit(n)),withdraw:n=>this.appClient.createTransaction.call(F.withdraw(n)),swapToVUsd:n=>this.appClient.createTransaction.call(F.swapToVUsd(n)),swapFromVUsd:n=>this.appClient.createTransaction.call(F.swapFromVUsd(n)),setFeeShare:n=>this.appClient.createTransaction.call(F.setFeeShare(n)),adjustTotalLpAmount:(n={args:[]})=>this.appClient.createTransaction.call(F.adjustTotalLpAmount(n)),setBalanceRatioMinBp:n=>this.appClient.createTransaction.call(F.setBalanceRatioMinBp(n)),stopDeposit:(n={args:[]})=>this.appClient.createTransaction.call(F.stopDeposit(n)),startDeposit:(n={args:[]})=>this.appClient.createTransaction.call(F.startDeposit(n)),stopWithdraw:(n={args:[]})=>this.appClient.createTransaction.call(F.stopWithdraw(n)),startWithdraw:(n={args:[]})=>this.appClient.createTransaction.call(F.startWithdraw(n)),setStopAuthority:n=>this.appClient.createTransaction.call(F.setStopAuthority(n)),setRouter:n=>this.appClient.createTransaction.call(F.setRouter(n)),claimRewards:(n={args:[]})=>this.appClient.createTransaction.call(F.claimRewards(n)),setAdminFeeShare:n=>this.appClient.createTransaction.call(F.setAdminFeeShare(n)),claimAdminFee:(n={args:[]})=>this.appClient.createTransaction.call(F.claimAdminFee(n)),pendingReward:n=>this.appClient.createTransaction.call(F.pendingReward(n)),decimals:(n={args:[]})=>this.appClient.createTransaction.call(F.decimals(n)),transferOwnership:n=>this.appClient.createTransaction.call(F.transferOwnership(n))};send={optIn:{optInToApplication:async(n={args:[]})=>{let i=await this.appClient.send.optIn(F.optIn.optInToApplication(n));return{...i,return:i.return}}},clearState:n=>this.appClient.send.bare.clearState(n),optInAsset:async(n={args:[]})=>{let i=await this.appClient.send.call(F.optInAsset(n));return{...i,return:i.return}},noop:async(n={args:[]})=>{let i=await this.appClient.send.call(F.noop(n));return{...i,return:i.return}},deposit:async(n={args:[]})=>{let i=await this.appClient.send.call(F.deposit(n));return{...i,return:i.return}},withdraw:async n=>{let i=await this.appClient.send.call(F.withdraw(n));return{...i,return:i.return}},swapToVUsd:async n=>{let i=await this.appClient.send.call(F.swapToVUsd(n));return{...i,return:i.return}},swapFromVUsd:async n=>{let i=await this.appClient.send.call(F.swapFromVUsd(n));return{...i,return:i.return}},setFeeShare:async n=>{let i=await this.appClient.send.call(F.setFeeShare(n));return{...i,return:i.return}},adjustTotalLpAmount:async(n={args:[]})=>{let i=await this.appClient.send.call(F.adjustTotalLpAmount(n));return{...i,return:i.return}},setBalanceRatioMinBp:async n=>{let i=await this.appClient.send.call(F.setBalanceRatioMinBp(n));return{...i,return:i.return}},stopDeposit:async(n={args:[]})=>{let i=await this.appClient.send.call(F.stopDeposit(n));return{...i,return:i.return}},startDeposit:async(n={args:[]})=>{let i=await this.appClient.send.call(F.startDeposit(n));return{...i,return:i.return}},stopWithdraw:async(n={args:[]})=>{let i=await this.appClient.send.call(F.stopWithdraw(n));return{...i,return:i.return}},startWithdraw:async(n={args:[]})=>{let i=await this.appClient.send.call(F.startWithdraw(n));return{...i,return:i.return}},setStopAuthority:async n=>{let i=await this.appClient.send.call(F.setStopAuthority(n));return{...i,return:i.return}},setRouter:async n=>{let i=await this.appClient.send.call(F.setRouter(n));return{...i,return:i.return}},claimRewards:async(n={args:[]})=>{let i=await this.appClient.send.call(F.claimRewards(n));return{...i,return:i.return}},setAdminFeeShare:async n=>{let i=await this.appClient.send.call(F.setAdminFeeShare(n));return{...i,return:i.return}},claimAdminFee:async(n={args:[]})=>{let i=await this.appClient.send.call(F.claimAdminFee(n));return{...i,return:i.return}},pendingReward:async n=>{let i=await this.appClient.send.call(F.pendingReward(n));return{...i,return:i.return}},decimals:async(n={args:[]})=>{let i=await this.appClient.send.call(F.decimals(n));return{...i,return:i.return}},transferOwnership:async n=>{let i=await this.appClient.send.call(F.transferOwnership(n));return{...i,return:i.return}}};clone(n){return new a(this.appClient.clone(n))}async pendingReward(n){return(await this.appClient.send.call(F.pendingReward(n))).return}async decimals(n={args:[]}){return(await this.appClient.send.call(F.decimals(n))).return}state={global:{getAll:async()=>{let n=await this.appClient.state.global.getAll();return{feeShareBp:n.feeShareBP,router:n.router,tokenBalance:n.tokenBalance,vUsdBalance:n.vUsdBalance,balanceRatioMinBp:n.balanceRatioMinBP,reserves:n.reserves,a:n.a,d:n.d,tokenAmountReduce:n.tokenAmountReduce,tokenAmountIncrease:n.tokenAmountIncrease,stopAuthority:n.stopAuthority,canDeposit:n.canDeposit,canWithdraw:n.canWithdraw,asset:n.asset,adminFeeShareBp:n.adminFeeShareBP,totalSupply:n.totalSupply,accRewardPerShareP:new za(n.accRewardPerShareP),adminFeeAmount:n.adminFeeAmount,owner:n.owner}},feeShareBp:async()=>await this.appClient.state.global.getValue("feeShareBP"),router:async()=>await this.appClient.state.global.getValue("router"),tokenBalance:async()=>await this.appClient.state.global.getValue("tokenBalance"),vUsdBalance:async()=>await this.appClient.state.global.getValue("vUsdBalance"),balanceRatioMinBp:async()=>await this.appClient.state.global.getValue("balanceRatioMinBP"),reserves:async()=>await this.appClient.state.global.getValue("reserves"),a:async()=>await this.appClient.state.global.getValue("a"),d:async()=>await this.appClient.state.global.getValue("d"),tokenAmountReduce:async()=>await this.appClient.state.global.getValue("tokenAmountReduce"),tokenAmountIncrease:async()=>await this.appClient.state.global.getValue("tokenAmountIncrease"),stopAuthority:async()=>await this.appClient.state.global.getValue("stopAuthority"),canDeposit:async()=>await this.appClient.state.global.getValue("canDeposit"),canWithdraw:async()=>await this.appClient.state.global.getValue("canWithdraw"),asset:async()=>await this.appClient.state.global.getValue("asset"),adminFeeShareBp:async()=>await this.appClient.state.global.getValue("adminFeeShareBP"),totalSupply:async()=>await this.appClient.state.global.getValue("totalSupply"),accRewardPerShareP:async()=>new za(await this.appClient.state.global.getValue("accRewardPerShareP")),adminFeeAmount:async()=>await this.appClient.state.global.getValue("adminFeeAmount"),owner:async()=>await this.appClient.state.global.getValue("owner")},local:n=>{let i=typeof n=="string"?n:(0,nc.encodeAddress)(n.publicKey);return{getAll:async()=>{let o=await this.appClient.state.local(i).getAll();return{balance:o.balance,userRewardDebt:o.userRewardDebt}},balance:async()=>await this.appClient.state.local(i).getValue("balance"),userRewardDebt:async()=>await this.appClient.state.local(i).getValue("userRewardDebt")}}};newGroup(){let n=this,i=this.algorand.newGroup(),o=Promise.resolve(),r=[];return{optInAsset(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.optInAsset(s))),r.push(void 0),this},noop(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.noop(s))),r.push(void 0),this},deposit(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.deposit(s))),r.push(void 0),this},withdraw(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.withdraw(s))),r.push(void 0),this},swapToVUsd(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.swapToVUsd(s))),r.push(d=>n.decodeReturnValue("swapToVUsd(address,uint64,bool)uint64",d)),this},swapFromVUsd(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.swapFromVUsd(s))),r.push(d=>n.decodeReturnValue("swapFromVUsd(address,uint64,uint64,bool)uint64",d)),this},setFeeShare(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.setFeeShare(s))),r.push(void 0),this},adjustTotalLpAmount(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.adjustTotalLpAmount(s))),r.push(void 0),this},setBalanceRatioMinBp(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.setBalanceRatioMinBp(s))),r.push(void 0),this},stopDeposit(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.stopDeposit(s))),r.push(void 0),this},startDeposit(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.startDeposit(s))),r.push(void 0),this},stopWithdraw(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.stopWithdraw(s))),r.push(void 0),this},startWithdraw(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.startWithdraw(s))),r.push(void 0),this},setStopAuthority(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.setStopAuthority(s))),r.push(void 0),this},setRouter(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.setRouter(s))),r.push(void 0),this},claimRewards(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.claimRewards(s))),r.push(void 0),this},setAdminFeeShare(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.setAdminFeeShare(s))),r.push(void 0),this},claimAdminFee(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.claimAdminFee(s))),r.push(void 0),this},pendingReward(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.pendingReward(s))),r.push(d=>n.decodeReturnValue("pendingReward(account)uint64",d)),this},decimals(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.decimals(s))),r.push(d=>n.decodeReturnValue("decimals()uint64",d)),this},transferOwnership(s){return o=o.then(async()=>i.addAppCallMethodCall(await n.params.transferOwnership(s))),r.push(void 0),this},get optIn(){return{optInToApplication:s=>(o=o.then(async()=>i.addAppCallMethodCall(await n.params.optIn.optInToApplication(s))),r.push(void 0),this)}},clearState(s){return o=o.then(()=>i.addAppCall(n.params.clearState(s))),this},addTransaction(s,d){return o=o.then(()=>i.addTransaction(s,d)),this},async composer(){return await o,i},async simulate(s){await o;let d=await(s?i.simulate(s):i.simulate());return{...d,returns:d.returns?.map((c,A)=>r[A]!==void 0?r[A](c):c.returnValue)}},async send(s){await o;let d=await i.send(s);return{...d,returns:d.returns?.map((c,A)=>r[A]!==void 0?r[A](c):c.returnValue)}}}}};var pe=class{lpAmount;rewardDebt;constructor(n){this.lpAmount=n.lpAmount,this.rewardDebt=n.rewardDebt}get userLiquidity(){return S(this.lpAmount,3).toFixed()}earned(n,i){let o=As(this.lpAmount,this.rewardDebt,n.accRewardPerShareP,n.p);return i?S(o,i).toFixed():o}};var Ne=class{};var Hi=class extends Ne{constructor(i,o){super();this.algorand=i;this.api=o}chainType="ALG";P=48;async buildRawTransactionClaimRewards(i){let o=i.accountAddress,r=BigInt(i.token.tokenAddress),s=BigInt(i.token.poolAddress),d=this.getPool(s),c=this.algorand.newGroup();c.addAppCallMethodCall(await d.params.claimRewards({args:[],sender:o,extraFee:on(1),assetReferences:[r]}));let{transactions:A}=await c.buildTransactions();return Qt(...A)}async buildRawTransactionDeposit(i){let o=i.accountAddress,r=BigInt(i.amount),s=BigInt(i.token.tokenAddress),d=BigInt(i.token.poolAddress),c=this.getPool(d),A=await oa(d,o,this.algorand),g=this.algorand.newGroup();A||g.addAppCallMethodCall(await c.params.optIn.optInToApplication({args:[],sender:o})),g.addAssetTransfer({assetId:s,amount:r,sender:o,receiver:c.appAddress}),g.addAppCallMethodCall(await c.params.deposit({args:[],sender:o,extraFee:on(1)})),Gn({composer:g,appId:d,sender:o,count:4});let{transactions:l}=await g.buildTransactions();return Qt(...l)}async buildRawTransactionWithdraw(i){let o=i.accountAddress,r=BigInt(i.amount),s=BigInt(i.token.tokenAddress),d=BigInt(i.token.poolAddress),c=this.getPool(d),A=this.algorand.newGroup();A.addAppCallMethodCall(await c.params.withdraw({args:{amountLp:r},sender:o,extraFee:on(1),assetReferences:[s]})),Gn({composer:A,appId:d,sender:o,count:4});let{transactions:g}=await A.buildTransactions();return Qt(...g)}async getPoolInfoFromChain(i){let r=await this.getPool(BigInt(i.poolAddress)).state.global.getAll(),s=r.a?.toString(),d=r.d?.toString(),c=r.tokenBalance?.toString(),A=r.vUsdBalance?.toString(),g=r.totalSupply?.toString(),l=(0,ic.bytesToBigInt)(r.accRewardPerShareP?.asByteArray()??Uint8Array.from([])).toString();if(s&&d&&c&&A&&g&&l){let m=be({tokenBalance:c,vUsdBalance:A});return{aValue:s,dValue:d,tokenBalance:c,vUsdBalance:A,totalLpAmount:g,accRewardPerShareP:l,p:this.P,imbalance:m}}throw new B("Unable to pool info from chain")}async getUserBalanceInfo(i,o){let r=BigInt(o.poolAddress),s=this.getPool(r);try{let{balance:d,userRewardDebt:c}=await s.state.local(i).getAll();if(d!==void 0&&c!==void 0)return new pe({lpAmount:d.toString(),rewardDebt:c.toString()})}catch{let A=(await this.algorand.account.getInformation(i)).appsLocalState;if(A&&!A.find(({id:l})=>l===r))return new pe({lpAmount:"0",rewardDebt:"0"})}throw new B("Unable to get user balance")}getPool(i){return this.algorand.client.getTypedAppClientById(xa,{appId:i})}};var zt=require("web3");var Jg={abi:[{inputs:[{internalType:"address",name:"_router",type:"address"},{internalType:"uint256",name:"_a",type:"uint256"},{internalType:"contract ERC20",name:"_token",type:"address"},{internalType:"uint16",name:"_feeShareBP",type:"uint16"},{internalType:"uint256",name:"_balanceRatioMinBP",type:"uint256"},{internalType:"string",name:"lpName",type:"string"},{internalType:"string",name:"lpSymbol",type:"string"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"Deposit",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"RewardsClaimed",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"address",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"vUsdAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"fee",type:"uint256"}],name:"SwappedFromVUsd",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"address",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"vUsdAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"fee",type:"uint256"}],name:"SwappedToVUsd",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"Withdraw",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[],name:"a",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"accRewardPerShareP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"adjustTotalLpAmount",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"adminFeeAmount",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"adminFeeShareBP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"balanceRatioMinBP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"canDeposit",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"canWithdraw",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"claimAdminFee",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"claimRewards",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"d",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"pure",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"subtractedValue",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"deposit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"feeShareBP",outputs:[{internalType:"uint16",name:"",type:"uint16"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPrice",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"x",type:"uint256"}],name:"getY",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"}],name:"pendingReward",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"reserves",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"router",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"_adminFeeShareBP",type:"uint256"}],name:"setAdminFeeShare",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"_balanceRatioMinBP",type:"uint256"}],name:"setBalanceRatioMinBP",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint16",name:"_feeShareBP",type:"uint16"}],name:"setFeeShare",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_router",type:"address"}],name:"setRouter",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_stopAuthority",type:"address"}],name:"setStopAuthority",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"startDeposit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"startWithdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"stopDeposit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"stopWithdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"receiveAmountMin",type:"uint256"},{internalType:"bool",name:"zeroFee",type:"bool"}],name:"swapFromVUsd",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bool",name:"zeroFee",type:"bool"}],name:"swapToVUsd",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"token",outputs:[{internalType:"contract ERC20",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"tokenBalance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"}],name:"userRewardDebt",outputs:[{internalType:"uint256",name:"amount",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"vUsdBalance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amountLp",type:"uint256"}],name:"withdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}]},Ji=Jg;var ki=class extends Ne{constructor(i,o){super();this.web3=i;this.api=o}chainType="EVM";P=52;async getUserBalanceInfo(i,o){let r;try{r=await na(this.getUserBalanceInfoByBatch(i,o),`Cannot get UserBalanceInfo for ${o.name} on ${o.chainSymbol}`,5e3)}catch{r=await Ro(()=>this.getUserBalanceInfoPerProperty(i,o),`Cannot get UserBalanceInfo for ${o.name} on ${o.chainSymbol}`,5,2e3)}return r}async getPoolInfoFromChain(i){let o;try{o=await na(this.getPoolInfoByBatch(i),`Cannot get PoolInfo for ${i.name} on ${i.chainSymbol}`,5e3)}catch{o=await Ro(()=>this.getPoolInfoPerProperty(i),`Cannot get PoolInfo for ${i.name} on ${i.chainSymbol}`,5,2e3)}return o}async getUserBalanceInfoByBatch(i,o){let r=new this.web3.eth.BatchRequest,s=this.getPoolContract(o.poolAddress),d=s.methods.userRewardDebt(i).encodeABI(),c=s.methods.balanceOf(i).encodeABI();r.add({method:"eth_call",params:[{to:o.poolAddress,data:d},"latest"]}),r.add({method:"eth_call",params:[{to:o.poolAddress,data:c},"latest"]});let[A,g]=await r.execute();if(A&&g&&!A.error&&!g.error)return new pe({lpAmount:zt.Web3.utils.toBigInt(g.result).toString(),rewardDebt:zt.Web3.utils.toBigInt(A.result).toString()});throw new Error("Batched failed")}async getUserBalanceInfoPerProperty(i,o){let r=(await this.getPoolContract(o.poolAddress).methods.userRewardDebt(i).call()).toString(),s=(await this.getPoolContract(o.poolAddress).methods.balanceOf(i).call()).toString();return new pe({lpAmount:s,rewardDebt:r})}async getPoolInfoByBatch(i){let o=new this.web3.eth.BatchRequest,r=this.getPoolContract(i.poolAddress),s=r.methods.a().encodeABI(),d=r.methods.d().encodeABI(),c=r.methods.tokenBalance().encodeABI(),A=r.methods.vUsdBalance().encodeABI(),g=r.methods.totalSupply().encodeABI(),l=r.methods.accRewardPerShareP().encodeABI();o.add({method:"eth_call",params:[{to:i.poolAddress,data:s},"latest"]}),o.add({method:"eth_call",params:[{to:i.poolAddress,data:d},"latest"]}),o.add({method:"eth_call",params:[{to:i.poolAddress,data:c},"latest"]}),o.add({method:"eth_call",params:[{to:i.poolAddress,data:A},"latest"]}),o.add({method:"eth_call",params:[{to:i.poolAddress,data:g},"latest"]}),o.add({method:"eth_call",params:[{to:i.poolAddress,data:l},"latest"]});let[m,I,h,W,Y,f]=await o.execute();if(m&&I&&h&&W&&Y&&f&&!m.error&&!I.error&&!h.error&&!W.error&&!Y.error&&!f.error){let T=zt.Web3.utils.toBigInt(h.result).toString(),G=zt.Web3.utils.toBigInt(W.result).toString(),Z=be({tokenBalance:T,vUsdBalance:G});return{aValue:zt.Web3.utils.toBigInt(m.result).toString(),dValue:zt.Web3.utils.toBigInt(I.result).toString(),tokenBalance:T,vUsdBalance:G,totalLpAmount:zt.Web3.utils.toBigInt(Y.result).toString(),accRewardPerShareP:zt.Web3.utils.toBigInt(f.result).toString(),p:this.P,imbalance:Z}}throw new Error("Batched failed")}async getPoolInfoPerProperty(i){let o=this.getPoolContract(i.poolAddress),r=(await o.methods.a().call()).toString(),s=(await o.methods.d().call()).toString(),d=(await o.methods.tokenBalance().call()).toString(),c=(await o.methods.vUsdBalance().call()).toString(),A=(await o.methods.totalSupply().call()).toString(),g=(await o.methods.accRewardPerShareP().call()).toString(),l=be({tokenBalance:d,vUsdBalance:c});return{aValue:r,dValue:s,tokenBalance:d,vUsdBalance:c,totalLpAmount:A,accRewardPerShareP:g,p:this.P,imbalance:l}}async buildRawTransactionDeposit(i){return Promise.resolve({...this.buildTxParams(i),data:this.getPoolContract(i.token.poolAddress).methods.deposit(i.amount).encodeABI()})}async buildRawTransactionWithdraw(i){return Promise.resolve({...this.buildTxParams(i),data:this.getPoolContract(i.token.poolAddress).methods.withdraw(i.amount).encodeABI()})}async buildRawTransactionClaimRewards(i){return Promise.resolve({...this.buildTxParams(i),data:this.getPoolContract(i.token.poolAddress).methods.claimRewards().encodeABI()})}buildTxParams(i){return{from:i.accountAddress,to:i.token.poolAddress,value:"0"}}getPoolContract(i){return new this.web3.eth.Contract(Ji.abi,i)}};var Oa=class{constructor(n,i,o,r){this.api=n;this.nodeRpcUrlsConfig=i;this.params=o;this.tokenService=r}async approve(n,i){if(i){let o=n,r=i;return this.tokenService.buildRawTransactionApprove({...r,spender:r.token.poolAddress},o)}else{let o=n;return this.tokenService.buildRawTransactionApprove({...o,spender:o.token.poolAddress})}}async deposit(n,i){return H(n.amount),z("amount",n.amount,n.token.decimals),n.amount=V(n.amount,n.token.decimals).toFixed(),xn(n.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,i).buildRawTransactionDeposit(n)}async withdraw(n,i){return H(n.amount),z("amount",n.amount,n.token.decimals),n.amount=V(n.amount,3).toFixed(),xn(n.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,i).buildRawTransactionWithdraw(n)}async claimRewards(n,i){return xn(n.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,i).buildRawTransactionClaimRewards(n)}};var pt=require("@project-serum/anchor"),mt=require("@solana/web3.js");var Qa=class extends Ne{constructor(i,o){super();this.solanaRpcUrl=i;this.api=o}chainType="SOLANA";P=48;async getUserBalanceInfo(i,o){let r=this.buildAnchorProvider(i),s=this.getBridge(o.bridgeAddress,r),d=new mt.PublicKey(o.poolAddress),c=await s.account.pool.fetch(d);try{let A=await Zo(new mt.PublicKey(i),c.mint,s.programId),{lpAmount:g,rewardDebt:l}=await s.account.userDeposit.fetch(A);return new pe({lpAmount:g.toString(),rewardDebt:l.toString()})}catch{return new pe({lpAmount:"0",rewardDebt:"0"})}}async getPoolInfoFromChain(i){let o=this.buildAnchorProvider(i.bridgeAddress),r=await this.getBridge(i.bridgeAddress,o).account.pool.fetch(i.poolAddress),s=r.vUsdBalance.toString(),d=r.tokenBalance.toString(),c=be({tokenBalance:d,vUsdBalance:s});return{dValue:r.d.toString(),aValue:r.a.toString(),totalLpAmount:r.totalLpAmount.toString(),vUsdBalance:s,tokenBalance:d,accRewardPerShareP:r.accRewardPerShareP.toString(),p:this.P,imbalance:c}}async buildRawTransactionDeposit(i){let{bridge:o,accounts:r,preInstructions:s}=await this.prepareDataForTransaction(i),d=await o.methods.deposit(new pt.BN(i.amount)).accounts(r).preInstructions(s).transaction();return d.recentBlockhash=(await this.buildAnchorProvider(i.accountAddress).connection.getLatestBlockhash()).blockhash,d.feePayer=new mt.PublicKey(i.accountAddress),await Sn(d,i.txFeeParams,this.solanaRpcUrl),d}async buildRawTransactionWithdraw(i){let{bridge:o,accounts:r,preInstructions:s}=await this.prepareDataForTransaction(i),d=await o.methods.withdraw(new pt.BN(i.amount)).accounts(r).preInstructions(s).transaction();return d.recentBlockhash=(await this.buildAnchorProvider(i.accountAddress).connection.getLatestBlockhash()).blockhash,d.feePayer=new mt.PublicKey(i.accountAddress),await Sn(d,i.txFeeParams,this.solanaRpcUrl),d}async buildRawTransactionClaimRewards(i){let{bridge:o,accounts:r,preInstructions:s}=await this.prepareDataForTransaction(i),d=await o.methods.claimRewards().accounts(r).preInstructions(s).transaction();return d.recentBlockhash=(await this.buildAnchorProvider(i.accountAddress).connection.getLatestBlockhash()).blockhash,d.feePayer=new mt.PublicKey(i.accountAddress),await Sn(d,i.txFeeParams,this.solanaRpcUrl),d}async prepareDataForTransaction(i){let o=this.buildAnchorProvider(i.accountAddress),r=this.getBridge(i.token.bridgeAddress,o),{accounts:s,preInstructions:d}=await this._getLPTransactionData(r,i.token.poolAddress,i.accountAddress,o);return{bridge:r,accounts:s,preInstructions:d}}getBridge(i,o){return new pt.Program(vi,i,o)}buildAnchorProvider(i){let o=new mt.Connection(this.solanaRpcUrl,"confirmed"),r=new mt.PublicKey(i);return new pt.AnchorProvider(o,{publicKey:r},{preflightCommitment:"confirmed",commitment:"confirmed"})}async _getLPTransactionData(i,o,r,s){let d=new mt.PublicKey(r),c=await Kt(i.programId),A=await Tn(i.programId),g=new mt.PublicKey(o),m=(await i.account.pool.fetch(g)).mint,I=await at(d,m),h=await Zn(m,i.programId),W=await Zo(d,m,i.programId),Y=[pt.web3.ComputeBudgetProgram.setComputeUnitLimit({units:1e6})];try{await wn(I,s)}catch{let Z=await pt.Spl.associatedToken(s).methods.create().accounts({mint:m,owner:d,associatedAccount:I}).instruction();Y.push(Z)}try{await i.account.userDeposit.fetch(W)}catch{let G=await i.methods.initDepositAccount().accounts({mint:m,user:d,userDeposit:W}).instruction();Y.push(G)}return{accounts:{mint:m,user:d,config:c,pool:g,bridgeAuthority:A,userDeposit:W,userToken:I,bridgeToken:h},preInstructions:Y}}};var Hh=require("@stellar/stellar-sdk");var e=require("@stellar/stellar-sdk"),kg=e.contract.Spec,zg=e.contract.Client;var Ka=class extends zg{constructor(i){super(new kg(["AAAAAAAAAAAAAAAKaW5pdGlhbGl6ZQAAAAAABwAAAAAAAAAFYWRtaW4AAAAAAAATAAAAAAAAAAZicmlkZ2UAAAAAABMAAAAAAAAAAWEAAAAAAAAKAAAAAAAAAAV0b2tlbgAAAAAAABMAAAAAAAAADGZlZV9zaGFyZV9icAAAAAoAAAAAAAAAFGJhbGFuY2VfcmF0aW9fbWluX2JwAAAACgAAAAAAAAASYWRtaW5fZmVlX3NoYXJlX2JwAAAAAAAKAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAHZGVwb3NpdAAAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAABmFtb3VudAAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAId2l0aGRyYXcAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAACWFtb3VudF9scAAAAAAAAAoAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAANc3dhcF90b192X3VzZAAAAAAAAAMAAAAAAAAABHVzZXIAAAATAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAACHplcm9fZmVlAAAAAQAAAAEAAAPpAAAACgAAAAM=","AAAAAAAAAAAAAAAPc3dhcF9mcm9tX3ZfdXNkAAAAAAQAAAAAAAAABHVzZXIAAAATAAAAAAAAAAt2dXNkX2Ftb3VudAAAAAAKAAAAAAAAABJyZWNlaXZlX2Ftb3VudF9taW4AAAAAAAoAAAAAAAAACHplcm9fZmVlAAAAAQAAAAEAAAPpAAAACgAAAAM=","AAAAAAAAAAAAAAANY2xhaW1fcmV3YXJkcwAAAAAAAAEAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAdgYWRtaW5gAAAAAA1zZXRfZmVlX3NoYXJlAAAAAAAAAQAAAAAAAAAMZmVlX3NoYXJlX2JwAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAWYWRqdXN0X3RvdGFsX2xwX2Ftb3VudAAAAAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAYc2V0X2JhbGFuY2VfcmF0aW9fbWluX2JwAAAAAQAAAAAAAAAUYmFsYW5jZV9yYXRpb19taW5fYnAAAAAKAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAMc3RvcF9kZXBvc2l0AAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAANc3RhcnRfZGVwb3NpdAAAAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAANc3RvcF93aXRoZHJhdwAAAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAAOc3RhcnRfd2l0aGRyYXcAAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAASc2V0X3N0b3BfYXV0aG9yaXR5AAAAAAABAAAAAAAAAA5zdG9wX2F1dGhvcml0eQAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAKc2V0X2JyaWRnZQAAAAAAAQAAAAAAAAAGYnJpZGdlAAAAAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAJc2V0X2FkbWluAAAAAAAAAQAAAAAAAAAJbmV3X2FkbWluAAAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAATc2V0X2FkbWluX2ZlZV9zaGFyZQAAAAABAAAAAAAAABJhZG1pbl9mZWVfc2hhcmVfYnAAAAAAAAoAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAAPY2xhaW1fYWRtaW5fZmVlAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAZgdmlld2AAAAAAAA5wZW5kaW5nX3Jld2FyZAAAAAAAAQAAAAAAAAAEdXNlcgAAABMAAAABAAAD6QAAAAoAAAAD","AAAAAAAAAAAAAAAIZ2V0X3Bvb2wAAAAAAAAAAQAAA+kAAAfQAAAABFBvb2wAAAAD","AAAAAAAAAAAAAAAJZ2V0X2FkbWluAAAAAAAAAAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAASZ2V0X3N0b3BfYXV0aG9yaXR5AAAAAAAAAAAAAQAAA+kAAAATAAAAAw==","AAAAAAAAAAAAAAAKZ2V0X2JyaWRnZQAAAAAAAAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAAQZ2V0X3VzZXJfZGVwb3NpdAAAAAEAAAAAAAAABHVzZXIAAAATAAAAAQAAA+kAAAfQAAAAC1VzZXJEZXBvc2l0AAAAAAM=","AAAAAAAAAAAAAAAHdXBncmFkZQAAAAABAAAAAAAAAA1uZXdfd2FzbV9oYXNoAAAAAAAD7gAAACAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAQAAAAAAAAAAAAAAD1N3YXBwZWRGcm9tVlVzZAAAAAAFAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAAA2ZlZQAAAAAKAAAAAAAAAAlyZWNpcGllbnQAAAAAAAATAAAAAAAAAAV0b2tlbgAAAAAAABMAAAAAAAAAC3Z1c2RfYW1vdW50AAAAAAo=","AAAAAQAAAAAAAAAAAAAADVN3YXBwZWRUb1ZVc2QAAAAAAAAFAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAAA2ZlZQAAAAAKAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAABXRva2VuAAAAAAAAEwAAAAAAAAALdnVzZF9hbW91bnQAAAAACg==","AAAAAQAAAAAAAAAAAAAAB0RlcG9zaXQAAAAAAgAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAR1c2VyAAAAEw==","AAAAAQAAAAAAAAAAAAAACFdpdGhkcmF3AAAAAgAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAR1c2VyAAAAEw==","AAAAAQAAAAAAAAAAAAAADlJld2FyZHNDbGFpbWVkAAAAAAACAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAABHVzZXIAAAAT","AAAAAQAAAAAAAAAAAAAABkJyaWRnZQAAAAAAAQAAAAAAAAABMAAAAAAAABM=","AAAAAgAAAAAAAAAAAAAAB0RhdGFLZXkAAAAAAQAAAAEAAAAAAAAAC1VzZXJEZXBvc2l0AAAAAAEAAAAT","AAAAAQAAAAAAAAAAAAAABFBvb2wAAAAPAAAAAAAAAAFhAAAAAAAACgAAAAAAAAAWYWNjX3Jld2FyZF9wZXJfc2hhcmVfcAAAAAAACgAAAAAAAAAQYWRtaW5fZmVlX2Ftb3VudAAAAAoAAAAAAAAAEmFkbWluX2ZlZV9zaGFyZV9icAAAAAAACgAAAAAAAAAUYmFsYW5jZV9yYXRpb19taW5fYnAAAAAKAAAAAAAAAAtjYW5fZGVwb3NpdAAAAAABAAAAAAAAAAxjYW5fd2l0aGRyYXcAAAABAAAAAAAAAAFkAAAAAAAACgAAAAAAAAAIZGVjaW1hbHMAAAAEAAAAAAAAAAxmZWVfc2hhcmVfYnAAAAAKAAAAAAAAAAhyZXNlcnZlcwAAAAoAAAAAAAAABXRva2VuAAAAAAAAEwAAAAAAAAANdG9rZW5fYmFsYW5jZQAAAAAAAAoAAAAAAAAAD3RvdGFsX2xwX2Ftb3VudAAAAAAKAAAAAAAAAA12X3VzZF9iYWxhbmNlAAAAAAAACg==","AAAAAQAAAAAAAAAAAAAAC1VzZXJEZXBvc2l0AAAAAAIAAAAAAAAACWxwX2Ftb3VudAAAAAAAAAoAAAAAAAAAC3Jld2FyZF9kZWJ0AAAAAAo=","AAAAAQAAAAAAAAAAAAAABUFkbWluAAAAAAAAAQAAAAAAAAABMAAAAAAAABM=","AAAAAQAAAAAAAAAAAAAAEEdhc09yYWNsZUFkZHJlc3MAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAAAQAAAAAAAAAAAAAACEdhc1VzYWdlAAAAAQAAAAAAAAABMAAAAAAAA+wAAAAEAAAACg==","AAAAAQAAAAAAAAAAAAAAC05hdGl2ZVRva2VuAAAAAAEAAAAAAAAAATAAAAAAAAAT","AAAAAQAAAAAAAAAAAAAADVN0b3BBdXRob3JpdHkAAAAAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAABAAAAAAAAAAAAAAABUVycm9yAAAAAAAAKAAAAAAAAAANVW5pbXBsZW1lbnRlZAAAAAAAAAAAAAAAAAAAC0luaXRpYWxpemVkAAAAAAEAAAAAAAAADVVuaW5pdGlhbGl6ZWQAAAAAAAACAAAAAAAAAAxVbmF1dGhvcml6ZWQAAAADAAAAAAAAAApJbnZhbGlkQXJnAAAAAAAEAAAAAAAAAA5JbnZhbGlkQ2hhaW5JZAAAAAAABQAAAAAAAAATSW52YWxpZE90aGVyQ2hhaW5JZAAAAAAGAAAAAAAAAA5HYXNVc2FnZU5vdFNldAAAAAAABwAAAAAAAAANQnJva2VuQWRkcmVzcwAAAAAAAAgAAAAAAAAACE5vdEZvdW5kAAAACQAAAAAAAAAYVG9rZW5JbnN1ZmZpY2llbnRCYWxhbmNlAAAACgAAAAAAAAAKQ2FzdEZhaWxlZAAAAAAACwAAAAAAAAAMVTI1Nk92ZXJmbG93AAAADAAAAAAAAAAKWmVyb0Ftb3VudAAAAAAAZwAAAAAAAAAMUG9vbE92ZXJmbG93AAAAaAAAAAAAAAALWmVyb0NoYW5nZXMAAAAAaQAAAAAAAAARUmVzZXJ2ZXNFeGhhdXN0ZWQAAAAAAABqAAAAAAAAABpJbnN1ZmZpY2llbnRSZWNlaXZlZEFtb3VudAAAAAAAawAAAAAAAAAUQmFsYW5jZVJhdGlvRXhjZWVkZWQAAABsAAAAAAAAAAlGb3JiaWRkZW4AAAAAAABtAAAAAAAAABlVbmF1dGhvcml6ZWRTdG9wQXV0aG9yaXR5AAAAAAAAywAAAAAAAAAOU3dhcFByb2hpYml0ZWQAAAAAAMwAAAAAAAAAEkFtb3VudFRvb0xvd0ZvckZlZQAAAAAAzQAAAAAAAAAWQnJpZGdlVG9UaGVaZXJvQWRkcmVzcwAAAAAAzgAAAAAAAAAORW1wdHlSZWNpcGllbnQAAAAAAM8AAAAAAAAAE1NvdXJjZU5vdFJlZ2lzdGVyZWQAAAAA0AAAAAAAAAAVV3JvbmdEZXN0aW5hdGlvbkNoYWluAAAAAAAA0QAAAAAAAAATVW5rbm93bkFub3RoZXJDaGFpbgAAAADSAAAAAAAAABFUb2tlbnNBbHJlYWR5U2VudAAAAAAAANMAAAAAAAAAEE1lc3NhZ2VQcm9jZXNzZWQAAADUAAAAAAAAAAxOb3RFbm91Z2hGZWUAAADWAAAAAAAAAAlOb01lc3NhZ2UAAAAAAADXAAAAAAAAAA1Ob1JlY2VpdmVQb29sAAAAAAAA2AAAAAAAAAAGTm9Qb29sAAAAAADZAAAAAAAAABNVbmtub3duQW5vdGhlclRva2VuAAAAANoAAAAAAAAAD1dyb25nQnl0ZUxlbmd0aAAAAAEsAAAAAAAAAApIYXNNZXNzYWdlAAAAAAEtAAAAAAAAABdJbnZhbGlkUHJpbWFyeVNpZ25hdHVyZQAAAAEuAAAAAAAAABlJbnZhbGlkU2Vjb25kYXJ5U2lnbmF0dXJlAAAAAAABLwAAAAAAAAARTm9HYXNEYXRhRm9yQ2hhaW4AAAAAAAGQ"]),i);this.options=i}fromJSON={initialize:this.txFromJSON,deposit:this.txFromJSON,withdraw:this.txFromJSON,swap_to_v_usd:this.txFromJSON,swap_from_v_usd:this.txFromJSON,claim_rewards:this.txFromJSON,set_fee_share:this.txFromJSON,adjust_total_lp_amount:this.txFromJSON,set_balance_ratio_min_bp:this.txFromJSON,stop_deposit:this.txFromJSON,start_deposit:this.txFromJSON,stop_withdraw:this.txFromJSON,start_withdraw:this.txFromJSON,set_stop_authority:this.txFromJSON,set_bridge:this.txFromJSON,set_admin:this.txFromJSON,set_admin_fee_share:this.txFromJSON,claim_admin_fee:this.txFromJSON,pending_reward:this.txFromJSON,get_pool:this.txFromJSON,get_admin:this.txFromJSON,get_stop_authority:this.txFromJSON,get_bridge:this.txFromJSON,get_user_deposit:this.txFromJSON,upgrade:this.txFromJSON}};var zr=require("@stellar/stellar-sdk"),ac=zr.rpc.Api;function On(a){let{simulation:n,options:i}=a;if(!n)throw new Error("Soroban assembled transaction does not have simulation");if(ac.isSimulationSuccess(n))return n.result==null?void 0:i.parseResultXdr(n.result.retval);throw new Error(n.error)}function Qn(a){let{simulation:n}=a;if(!n)throw new Error("Soroban assembled transaction does not have simulation");return ac.isSimulationError(n)}var Ua=class extends Ne{constructor(i,o,r){super();this.nodeRpcUrlsConfig=i;this.params=o;this.api=r}chainType="SRB";P=48;async getUserBalanceInfo(i,o){let s=await this.getContract(o.poolAddress).get_user_deposit({user:i});if(Qn(s))throw new B;let d=On(s);if(!d)throw new B;let c=d.unwrap();return new pe({lpAmount:c.lp_amount.toString(),rewardDebt:c.reward_debt.toString()})}async getPoolInfoFromChain(i){let r=await this.getContract(i.poolAddress).get_pool();if(Qn(r))throw new B;let s=On(r);if(!s)throw new B;let d=s.unwrap();return{aValue:d.a.toString(),accRewardPerShareP:d.acc_reward_per_share_p.toString(),dValue:d.d.toString(),tokenBalance:d.token_balance.toString(),p:this.P,totalLpAmount:d.total_lp_amount.toString(),vUsdBalance:d.v_usd_balance.toString(),imbalance:be({tokenBalance:d.token_balance.toString(),vUsdBalance:d.v_usd_balance.toString()})}}async buildRawTransactionDeposit(i){return(await this.getContract(i.token.poolAddress,i.accountAddress).deposit({sender:i.accountAddress,amount:BigInt(i.amount)})).toXDR()}async buildRawTransactionWithdraw(i){return(await this.getContract(i.token.poolAddress,i.accountAddress).withdraw({sender:i.accountAddress,amount_lp:BigInt(i.amount)})).toXDR()}async buildRawTransactionClaimRewards(i){return(await this.getContract(i.token.poolAddress,i.accountAddress).claim_rewards({sender:i.accountAddress})).toXDR()}getContract(i,o){let r={publicKey:o,contractId:i,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new Ka(r)}};var Kn=ge(en());ye();ye();Ie();function Da(a){return a=w(a),a.startsWith(`${tn}::balance::Balance<`)}var fe=class a{__StructClass=!0;static get $typeName(){return`${tn}::balance::Balance`}static $numTypeParams=1;static $isPhantom=[!0];$typeName=a.$typeName;$fullTypeName;$typeArgs;$isPhantom=a.$isPhantom;value;constructor(n,i){this.$fullTypeName=D(a.$typeName,...n),this.$typeArgs=n,this.value=i.value}static reified(n){return{typeName:a.$typeName,fullTypeName:D(a.$typeName,M(n)),typeArgs:[M(n)],isPhantom:a.$isPhantom,reifiedTypeArgs:[n],fromFields:i=>a.fromFields(n,i),fromFieldsWithTypes:i=>a.fromFieldsWithTypes(n,i),fromBcs:i=>a.fromBcs(n,i),bcs:a.bcs,fromJSONField:i=>a.fromJSONField(n,i),fromJSON:i=>a.fromJSON(n,i),fromSuiParsedData:i=>a.fromSuiParsedData(n,i),fromSuiObjectData:i=>a.fromSuiObjectData(n,i),fetch:async(i,o)=>a.fetch(i,n,o),new:i=>new a([M(n)],i),kind:"StructClassReified"}}static get r(){return a.reified}static phantom(n){return ce(a.reified(n))}static get p(){return a.phantom}static get bcs(){return y.struct("Balance",{value:y.u64()})}static fromFields(n,i){return a.reified(n).new({value:O("u64",i.value)})}static fromFieldsWithTypes(n,i){if(!Da(i.type))throw new Error("not a Balance type");return Gt(i,[n]),a.reified(n).new({value:J("u64",i.fields.value)})}static fromBcs(n,i){return a.fromFields(n,a.bcs.parse(i))}toJSONField(){return{value:this.value.toString()}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(n,i){return a.reified(n).new({value:k("u64",i.value)})}static fromJSON(n,i){if(i.$typeName!==a.$typeName)throw new Error("not a WithTwoGenerics json object");return lt(D(a.$typeName,M(n)),i.$typeArgs,[n]),a.fromJSONField(n,i)}static fromSuiParsedData(n,i){if(i.dataType!=="moveObject")throw new Error("not an object");if(!Da(i.type))throw new Error(`object at ${i.fields.id} is not a Balance object`);return a.fromFieldsWithTypes(n,i)}static fromSuiObjectData(n,i){if(i.bcs){if(i.bcs.dataType!=="moveObject"||!Da(i.bcs.type))throw new Error("object at is not a Balance object");let o=We(i.bcs.type).typeArgs;if(o.length!==1)throw new Error(`type argument mismatch: expected 1 type argument but got '${o.length}'`);let r=w(o[0]),s=w(M(n));if(r!==w(M(n)))throw new Error(`type argument mismatch: expected '${s}' but got '${r}'`);return a.fromBcs(n,(0,K.fromB64)(i.bcs.bcsBytes))}if(i.content)return a.fromSuiParsedData(n,i.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(n,i,o){let r=await n.getObject({id:o,options:{showBcs:!0}});if(r.error)throw new Error(`error fetching Balance object at id ${o}: ${r.error.code}`);if(r.data?.bcs?.dataType!=="moveObject"||!Da(r.data.bcs.type))throw new Error(`object at id ${o} is not a Balance object`);return a.fromSuiObjectData(i,r.data)}};var Qr=ge(en());ye();var xr=ge(en());Ie();function Ea(a){return a=w(a),a.startsWith(`${xr.PKG_V1}::pool_rewards::PoolRewards<`)}var yn=class a{__StructClass=!0;static get $typeName(){return`${xr.PKG_V1}::pool_rewards::PoolRewards`}static $numTypeParams=1;static $isPhantom=[!0];$typeName=a.$typeName;$fullTypeName;$typeArgs;$isPhantom=a.$isPhantom;accRewardPerShareP;adminFeeShareBp;adminFee;rewards;lpSupply;constructor(n,i){this.$fullTypeName=D(a.$typeName,...n),this.$typeArgs=n,this.accRewardPerShareP=i.accRewardPerShareP,this.adminFeeShareBp=i.adminFeeShareBp,this.adminFee=i.adminFee,this.rewards=i.rewards,this.lpSupply=i.lpSupply}static reified(n){return{typeName:a.$typeName,fullTypeName:D(a.$typeName,M(n)),typeArgs:[M(n)],isPhantom:a.$isPhantom,reifiedTypeArgs:[n],fromFields:i=>a.fromFields(n,i),fromFieldsWithTypes:i=>a.fromFieldsWithTypes(n,i),fromBcs:i=>a.fromBcs(n,i),bcs:a.bcs,fromJSONField:i=>a.fromJSONField(n,i),fromJSON:i=>a.fromJSON(n,i),fromSuiParsedData:i=>a.fromSuiParsedData(n,i),fromSuiObjectData:i=>a.fromSuiObjectData(n,i),fetch:async(i,o)=>a.fetch(i,n,o),new:i=>new a([M(n)],i),kind:"StructClassReified"}}static get r(){return a.reified}static phantom(n){return ce(a.reified(n))}static get p(){return a.phantom}static get bcs(){return y.struct("PoolRewards",{acc_reward_per_share_p:y.u128(),admin_fee_share_bp:y.u64(),admin_fee:fe.bcs,rewards:fe.bcs,lp_supply:y.u64()})}static fromFields(n,i){return a.reified(n).new({accRewardPerShareP:O("u128",i.acc_reward_per_share_p),adminFeeShareBp:O("u64",i.admin_fee_share_bp),adminFee:O(fe.reified(n),i.admin_fee),rewards:O(fe.reified(n),i.rewards),lpSupply:O("u64",i.lp_supply)})}static fromFieldsWithTypes(n,i){if(!Ea(i.type))throw new Error("not a PoolRewards type");return Gt(i,[n]),a.reified(n).new({accRewardPerShareP:J("u128",i.fields.acc_reward_per_share_p),adminFeeShareBp:J("u64",i.fields.admin_fee_share_bp),adminFee:J(fe.reified(n),i.fields.admin_fee),rewards:J(fe.reified(n),i.fields.rewards),lpSupply:J("u64",i.fields.lp_supply)})}static fromBcs(n,i){return a.fromFields(n,a.bcs.parse(i))}toJSONField(){return{accRewardPerShareP:this.accRewardPerShareP.toString(),adminFeeShareBp:this.adminFeeShareBp.toString(),adminFee:this.adminFee.toJSONField(),rewards:this.rewards.toJSONField(),lpSupply:this.lpSupply.toString()}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(n,i){return a.reified(n).new({accRewardPerShareP:k("u128",i.accRewardPerShareP),adminFeeShareBp:k("u64",i.adminFeeShareBp),adminFee:k(fe.reified(n),i.adminFee),rewards:k(fe.reified(n),i.rewards),lpSupply:k("u64",i.lpSupply)})}static fromJSON(n,i){if(i.$typeName!==a.$typeName)throw new Error("not a WithTwoGenerics json object");return lt(D(a.$typeName,M(n)),i.$typeArgs,[n]),a.fromJSONField(n,i)}static fromSuiParsedData(n,i){if(i.dataType!=="moveObject")throw new Error("not an object");if(!Ea(i.type))throw new Error(`object at ${i.fields.id} is not a PoolRewards object`);return a.fromFieldsWithTypes(n,i)}static fromSuiObjectData(n,i){if(i.bcs){if(i.bcs.dataType!=="moveObject"||!Ea(i.bcs.type))throw new Error("object at is not a PoolRewards object");let o=We(i.bcs.type).typeArgs;if(o.length!==1)throw new Error(`type argument mismatch: expected 1 type argument but got '${o.length}'`);let r=w(o[0]),s=w(M(n));if(r!==w(M(n)))throw new Error(`type argument mismatch: expected '${s}' but got '${r}'`);return a.fromBcs(n,(0,K.fromB64)(i.bcs.bcsBytes))}if(i.content)return a.fromSuiParsedData(n,i.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(n,i,o){let r=await n.getObject({id:o,options:{showBcs:!0}});if(r.error)throw new Error(`error fetching PoolRewards object at id ${o}: ${r.error.code}`);if(r.data?.bcs?.dataType!=="moveObject"||!Ea(r.data.bcs.type))throw new Error(`object at id ${o} is not a PoolRewards object`);return a.fromSuiObjectData(i,r.data)}};ye();var Or=ge(en());Ie();function _a(a){return a=w(a),a.startsWith(`${Or.PKG_V1}::pool_state::PoolState<`)}var hn=class a{__StructClass=!0;static get $typeName(){return`${Or.PKG_V1}::pool_state::PoolState`}static $numTypeParams=1;static $isPhantom=[!0];$typeName=a.$typeName;$fullTypeName;$typeArgs;$isPhantom=a.$isPhantom;tokenBalance;vusdBalance;d;a;balanceRatioMinBp;constructor(n,i){this.$fullTypeName=D(a.$typeName,...n),this.$typeArgs=n,this.tokenBalance=i.tokenBalance,this.vusdBalance=i.vusdBalance,this.d=i.d,this.a=i.a,this.balanceRatioMinBp=i.balanceRatioMinBp}static reified(n){return{typeName:a.$typeName,fullTypeName:D(a.$typeName,M(n)),typeArgs:[M(n)],isPhantom:a.$isPhantom,reifiedTypeArgs:[n],fromFields:i=>a.fromFields(n,i),fromFieldsWithTypes:i=>a.fromFieldsWithTypes(n,i),fromBcs:i=>a.fromBcs(n,i),bcs:a.bcs,fromJSONField:i=>a.fromJSONField(n,i),fromJSON:i=>a.fromJSON(n,i),fromSuiParsedData:i=>a.fromSuiParsedData(n,i),fromSuiObjectData:i=>a.fromSuiObjectData(n,i),fetch:async(i,o)=>a.fetch(i,n,o),new:i=>new a([M(n)],i),kind:"StructClassReified"}}static get r(){return a.reified}static phantom(n){return ce(a.reified(n))}static get p(){return a.phantom}static get bcs(){return y.struct("PoolState",{token_balance:y.u64(),vusd_balance:y.u64(),d:y.u64(),a:y.u64(),balance_ratio_min_bp:y.u64()})}static fromFields(n,i){return a.reified(n).new({tokenBalance:O("u64",i.token_balance),vusdBalance:O("u64",i.vusd_balance),d:O("u64",i.d),a:O("u64",i.a),balanceRatioMinBp:O("u64",i.balance_ratio_min_bp)})}static fromFieldsWithTypes(n,i){if(!_a(i.type))throw new Error("not a PoolState type");return Gt(i,[n]),a.reified(n).new({tokenBalance:J("u64",i.fields.token_balance),vusdBalance:J("u64",i.fields.vusd_balance),d:J("u64",i.fields.d),a:J("u64",i.fields.a),balanceRatioMinBp:J("u64",i.fields.balance_ratio_min_bp)})}static fromBcs(n,i){return a.fromFields(n,a.bcs.parse(i))}toJSONField(){return{tokenBalance:this.tokenBalance.toString(),vusdBalance:this.vusdBalance.toString(),d:this.d.toString(),a:this.a.toString(),balanceRatioMinBp:this.balanceRatioMinBp.toString()}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(n,i){return a.reified(n).new({tokenBalance:k("u64",i.tokenBalance),vusdBalance:k("u64",i.vusdBalance),d:k("u64",i.d),a:k("u64",i.a),balanceRatioMinBp:k("u64",i.balanceRatioMinBp)})}static fromJSON(n,i){if(i.$typeName!==a.$typeName)throw new Error("not a WithTwoGenerics json object");return lt(D(a.$typeName,M(n)),i.$typeArgs,[n]),a.fromJSONField(n,i)}static fromSuiParsedData(n,i){if(i.dataType!=="moveObject")throw new Error("not an object");if(!_a(i.type))throw new Error(`object at ${i.fields.id} is not a PoolState object`);return a.fromFieldsWithTypes(n,i)}static fromSuiObjectData(n,i){if(i.bcs){if(i.bcs.dataType!=="moveObject"||!_a(i.bcs.type))throw new Error("object at is not a PoolState object");let o=We(i.bcs.type).typeArgs;if(o.length!==1)throw new Error(`type argument mismatch: expected 1 type argument but got '${o.length}'`);let r=w(o[0]),s=w(M(n));if(r!==w(M(n)))throw new Error(`type argument mismatch: expected '${s}' but got '${r}'`);return a.fromBcs(n,(0,K.fromB64)(i.bcs.bcsBytes))}if(i.content)return a.fromSuiParsedData(n,i.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(n,i,o){let r=await n.getObject({id:o,options:{showBcs:!0}});if(r.error)throw new Error(`error fetching PoolState object at id ${o}: ${r.error.code}`);if(r.data?.bcs?.dataType!=="moveObject"||!_a(r.data.bcs.type))throw new Error(`object at id ${o} is not a PoolState object`);return a.fromSuiObjectData(i,r.data)}};Ie();function $a(a){return a=w(a),a.startsWith(`${Qr.PKG_V1}::pool::Pool<`)}var qa=class a{__StructClass=!0;static get $typeName(){return`${Qr.PKG_V1}::pool::Pool`}static $numTypeParams=1;static $isPhantom=[!0];$typeName=a.$typeName;$fullTypeName;$typeArgs;$isPhantom=a.$isPhantom;id;state;rewards;feeShareBp;canDeposit;canWithdraw;decimals;balance;constructor(n,i){this.$fullTypeName=D(a.$typeName,...n),this.$typeArgs=n,this.id=i.id,this.state=i.state,this.rewards=i.rewards,this.feeShareBp=i.feeShareBp,this.canDeposit=i.canDeposit,this.canWithdraw=i.canWithdraw,this.decimals=i.decimals,this.balance=i.balance}static reified(n){return{typeName:a.$typeName,fullTypeName:D(a.$typeName,M(n)),typeArgs:[M(n)],isPhantom:a.$isPhantom,reifiedTypeArgs:[n],fromFields:i=>a.fromFields(n,i),fromFieldsWithTypes:i=>a.fromFieldsWithTypes(n,i),fromBcs:i=>a.fromBcs(n,i),bcs:a.bcs,fromJSONField:i=>a.fromJSONField(n,i),fromJSON:i=>a.fromJSON(n,i),fromSuiParsedData:i=>a.fromSuiParsedData(n,i),fromSuiObjectData:i=>a.fromSuiObjectData(n,i),fetch:async(i,o)=>a.fetch(i,n,o),new:i=>new a([M(n)],i),kind:"StructClassReified"}}static get r(){return a.reified}static phantom(n){return ce(a.reified(n))}static get p(){return a.phantom}static get bcs(){return y.struct("Pool",{id:qe.bcs,state:hn.bcs,rewards:yn.bcs,fee_share_bp:y.u64(),can_deposit:y.bool(),can_withdraw:y.bool(),decimals:y.u8(),balance:fe.bcs})}static fromFields(n,i){return a.reified(n).new({id:O(qe.reified(),i.id),state:O(hn.reified(n),i.state),rewards:O(yn.reified(n),i.rewards),feeShareBp:O("u64",i.fee_share_bp),canDeposit:O("bool",i.can_deposit),canWithdraw:O("bool",i.can_withdraw),decimals:O("u8",i.decimals),balance:O(fe.reified(n),i.balance)})}static fromFieldsWithTypes(n,i){if(!$a(i.type))throw new Error("not a Pool type");return Gt(i,[n]),a.reified(n).new({id:J(qe.reified(),i.fields.id),state:J(hn.reified(n),i.fields.state),rewards:J(yn.reified(n),i.fields.rewards),feeShareBp:J("u64",i.fields.fee_share_bp),canDeposit:J("bool",i.fields.can_deposit),canWithdraw:J("bool",i.fields.can_withdraw),decimals:J("u8",i.fields.decimals),balance:J(fe.reified(n),i.fields.balance)})}static fromBcs(n,i){return a.fromFields(n,a.bcs.parse(i))}toJSONField(){return{id:this.id,state:this.state.toJSONField(),rewards:this.rewards.toJSONField(),feeShareBp:this.feeShareBp.toString(),canDeposit:this.canDeposit,canWithdraw:this.canWithdraw,decimals:this.decimals,balance:this.balance.toJSONField()}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(n,i){return a.reified(n).new({id:k(qe.reified(),i.id),state:k(hn.reified(n),i.state),rewards:k(yn.reified(n),i.rewards),feeShareBp:k("u64",i.feeShareBp),canDeposit:k("bool",i.canDeposit),canWithdraw:k("bool",i.canWithdraw),decimals:k("u8",i.decimals),balance:k(fe.reified(n),i.balance)})}static fromJSON(n,i){if(i.$typeName!==a.$typeName)throw new Error("not a WithTwoGenerics json object");return lt(D(a.$typeName,M(n)),i.$typeArgs,[n]),a.fromJSONField(n,i)}static fromSuiParsedData(n,i){if(i.dataType!=="moveObject")throw new Error("not an object");if(!$a(i.type))throw new Error(`object at ${i.fields.id} is not a Pool object`);return a.fromFieldsWithTypes(n,i)}static fromSuiObjectData(n,i){if(i.bcs){if(i.bcs.dataType!=="moveObject"||!$a(i.bcs.type))throw new Error("object at is not a Pool object");let o=We(i.bcs.type).typeArgs;if(o.length!==1)throw new Error(`type argument mismatch: expected 1 type argument but got '${o.length}'`);let r=w(o[0]),s=w(M(n));if(r!==w(M(n)))throw new Error(`type argument mismatch: expected '${s}' but got '${r}'`);return a.fromBcs(n,(0,K.fromB64)(i.bcs.bcsBytes))}if(i.content)return a.fromSuiParsedData(n,i.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(n,i,o){let r=await n.getObject({id:o,options:{showBcs:!0}});if(r.error)throw new Error(`error fetching Pool object at id ${o}: ${r.error.code}`);if(r.data?.bcs?.dataType!=="moveObject"||!$a(r.data.bcs.type))throw new Error(`object at id ${o} is not a Pool object`);return a.fromSuiObjectData(i,r.data)}};ye();var Kr=ge(en());Ie();function eo(a){return a=w(a),a.startsWith(`${Kr.PKG_V1}::user_deposit::UserDeposit<`)}var to=class a{__StructClass=!0;static get $typeName(){return`${Kr.PKG_V1}::user_deposit::UserDeposit`}static $numTypeParams=1;static $isPhantom=[!0];$typeName=a.$typeName;$fullTypeName;$typeArgs;$isPhantom=a.$isPhantom;id;lpAmount;rewardDebt;constructor(n,i){this.$fullTypeName=D(a.$typeName,...n),this.$typeArgs=n,this.id=i.id,this.lpAmount=i.lpAmount,this.rewardDebt=i.rewardDebt}static reified(n){return{typeName:a.$typeName,fullTypeName:D(a.$typeName,M(n)),typeArgs:[M(n)],isPhantom:a.$isPhantom,reifiedTypeArgs:[n],fromFields:i=>a.fromFields(n,i),fromFieldsWithTypes:i=>a.fromFieldsWithTypes(n,i),fromBcs:i=>a.fromBcs(n,i),bcs:a.bcs,fromJSONField:i=>a.fromJSONField(n,i),fromJSON:i=>a.fromJSON(n,i),fromSuiParsedData:i=>a.fromSuiParsedData(n,i),fromSuiObjectData:i=>a.fromSuiObjectData(n,i),fetch:async(i,o)=>a.fetch(i,n,o),new:i=>new a([M(n)],i),kind:"StructClassReified"}}static get r(){return a.reified}static phantom(n){return ce(a.reified(n))}static get p(){return a.phantom}static get bcs(){return y.struct("UserDeposit",{id:qe.bcs,lp_amount:y.u64(),reward_debt:y.u64()})}static fromFields(n,i){return a.reified(n).new({id:O(qe.reified(),i.id),lpAmount:O("u64",i.lp_amount),rewardDebt:O("u64",i.reward_debt)})}static fromFieldsWithTypes(n,i){if(!eo(i.type))throw new Error("not a UserDeposit type");return Gt(i,[n]),a.reified(n).new({id:J(qe.reified(),i.fields.id),lpAmount:J("u64",i.fields.lp_amount),rewardDebt:J("u64",i.fields.reward_debt)})}static fromBcs(n,i){return a.fromFields(n,a.bcs.parse(i))}toJSONField(){return{id:this.id,lpAmount:this.lpAmount.toString(),rewardDebt:this.rewardDebt.toString()}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(n,i){return a.reified(n).new({id:k(qe.reified(),i.id),lpAmount:k("u64",i.lpAmount),rewardDebt:k("u64",i.rewardDebt)})}static fromJSON(n,i){if(i.$typeName!==a.$typeName)throw new Error("not a WithTwoGenerics json object");return lt(D(a.$typeName,M(n)),i.$typeArgs,[n]),a.fromJSONField(n,i)}static fromSuiParsedData(n,i){if(i.dataType!=="moveObject")throw new Error("not an object");if(!eo(i.type))throw new Error(`object at ${i.fields.id} is not a UserDeposit object`);return a.fromFieldsWithTypes(n,i)}static fromSuiObjectData(n,i){if(i.bcs){if(i.bcs.dataType!=="moveObject"||!eo(i.bcs.type))throw new Error("object at is not a UserDeposit object");let o=We(i.bcs.type).typeArgs;if(o.length!==1)throw new Error(`type argument mismatch: expected 1 type argument but got '${o.length}'`);let r=w(o[0]),s=w(M(n));if(r!==w(M(n)))throw new Error(`type argument mismatch: expected '${s}' but got '${r}'`);return a.fromBcs(n,(0,K.fromB64)(i.bcs.bcsBytes))}if(i.content)return a.fromSuiParsedData(n,i.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(n,i,o){let r=await n.getObject({id:o,options:{showBcs:!0}});if(r.error)throw new Error(`error fetching UserDeposit object at id ${o}: ${r.error.code}`);if(r.data?.bcs?.dataType!=="moveObject"||!eo(r.data.bcs.type))throw new Error(`object at id ${o} is not a UserDeposit object`);return a.fromSuiObjectData(i,r.data)}};function rc(a,n,i){if(n.length===0||!n[0])return[];let o=n[0],r=a.reduce((c,A)=>c+BigInt(A),BigInt(0)),s=BigInt(o.balance),d=[];for(let c of n.slice(1)){if(s>r)return oc(i,o,d,a);s+=BigInt(c.balance),d.push(c)}return s>=r?oc(i,o,d,a):[]}function oc(a,n,i,o){let r=o.map(s=>a.pure.u64(s));return i.length>0&&a.mergeCoins(n.coinObjectId,i.map(s=>s.coinObjectId)),a.splitCoins(n.coinObjectId,r)}var xg="0x0000000000000000000000000000000000000000000000000000000000000000";async function sc(a,n,i){let o=await a.devInspectTransactionBlock({sender:xg,transactionBlock:n});if(o.effects.status.status!=="success")throw new Error(`inspectionResult failed. ${JSON.stringify(o,null,2)}`);let r=o.results?.pop()?.returnValues?.pop();if(!r)throw new Error(`Something with inspectionResult went wrong. ${JSON.stringify(o,null,2)}`);let[s,d]=r;return typeof i=="object"?i.fromBcs(Uint8Array.from(s)).toJSONField():ji(i).parse(Uint8Array.from(s))}var no=class extends Ne{constructor(i,o){super();this.suiRpcUrl=i;this.api=o;this.client=new Ht({url:i})}chainType="SUI";client;async getUserBalanceInfo(i,o){if(!o.originTokenAddress)throw new B("SUI token must contain 'originTokenAddress'");let r=o.suiAddresses;if(!r)throw new B("SUI token must contain 'suiAddresses'");(0,Kn.setAddress)(r.bridgeAddress,r.bridgeAddressOrigin);let d=(await this.fetchDeposits(i,o.originTokenAddress)).reduce((c,A)=>{if(A.data)return c.lpAmount+=BigInt(A.data.content.fields.lp_amount),c.rewardDebt+=BigInt(A.data.content.fields.reward_debt),c;throw new B("Deposits fetch failed")},{lpAmount:BigInt(0),rewardDebt:BigInt(0)});return new pe({lpAmount:d.lpAmount.toString(),rewardDebt:d.rewardDebt.toString()})}async fetchDeposits(i,o){return await Ft(r=>this.client.getOwnedObjects({owner:i,filter:{StructType:to.phantom(ce(o)).phantomType},options:{showContent:!0},cursor:r}))}async getPoolInfoFromChain(i){let o=i.suiAddresses;if(!o)throw new B("SUI token must contain 'suiAddresses'");if((0,Kn.setAddress)(o.bridgeAddress,o.bridgeAddressOrigin),!i.originTokenAddress)throw new B("SUI token must contain 'originTokenAddress'");let r=48,s=new ft;Pd(s,i.originTokenAddress,o.bridgeObjectAddress);let d=await sc(this.client,s,qa.reified(ce(i.originTokenAddress))),c=d.state.tokenBalance,A=d.state.vusdBalance,g=be({tokenBalance:c,vUsdBalance:A});return{dValue:d.state.d,aValue:d.state.a,totalLpAmount:d.rewards.lpSupply,vUsdBalance:A,tokenBalance:c,accRewardPerShareP:d.rewards.accRewardPerShareP,p:r,imbalance:g}}async buildRawTransactionDeposit(i){let o=i.token.suiAddresses;if(!o)throw new B("SUI token must contain 'suiAddresses'");if((0,Kn.setAddress)(o.bridgeAddress,o.bridgeAddressOrigin),!i.token.originTokenAddress)throw new B("SUI token must contain 'originTokenAddress'");let r=await Ft(m=>this.client.getCoins({owner:i.accountAddress,coinType:i.token.originTokenAddress,cursor:m}));if(r.length===0||!r[0])throw new ht("No coins to deposit");let s=r[0],d=new ft;d.setSender(i.accountAddress);let{depositObj:c,isNewDeposit:A}=await this.getDepositObject(i.accountAddress,i.token.originTokenAddress,d),[g]=rc([i.amount],r,d);if(!g)throw new ht("No coins to deposit");if(!i.token.originTokenAddress)throw new B("SUI token must contain 'originTokenAddress'");let l=Xd(d,i.token.originTokenAddress,{bridge:o.bridgeObjectAddress,userDeposit:c,coin:g});return d.mergeCoins(s.coinObjectId,[l]),A&&d.transferObjects([c],i.accountAddress),await d.toJSON({client:this.client})}async getDepositObject(i,o,r){let s=await this.fetchDeposits(i,o);if(s.length===0||!s[0]){let d=ce(o).phantomType;return{depositObj:Ld(r,d),isNewDeposit:!0}}else{if(s[0].data?.objectId)return{depositObj:s[0].data.objectId,isNewDeposit:!1};throw new B("Something went wrong while deposit")}}async buildRawTransactionWithdraw(i){let o=i.token.suiAddresses;if(!o)throw new B("SUI token must contain 'suiAddresses'");if((0,Kn.setAddress)(o.bridgeAddress,o.bridgeAddressOrigin),!i.token.originTokenAddress)throw new B("SUI token must contain 'originTokenAddress'");let r=ce(i.token.originTokenAddress).phantomType,s=new ft;s.setSender(i.accountAddress);let{depositObj:d,isNewDeposit:c}=await this.getDepositObject(i.accountAddress,i.token.originTokenAddress,s);if(c)throw new ht("No deposit found");let A=Md(s,r,{bridge:o.bridgeObjectAddress,userDeposit:d,amountLp:BigInt(i.amount)}),g=await Ft(l=>this.client.getCoins({owner:i.accountAddress,coinType:i.token.originTokenAddress,cursor:l}));if(!A[0]||!A[1])throw new B("No rewards found");return g[0]?s.mergeCoins(g[0].coinObjectId,[A[0],A[1]]):(s.mergeCoins(A[0],[A[1]]),s.transferObjects([A[0]],i.accountAddress)),await s.toJSON({client:this.client})}async buildRawTransactionClaimRewards(i){let o=i.token.suiAddresses;if(!o)throw new B("SUI token must contain 'suiAddresses'");if((0,Kn.setAddress)(o.bridgeAddress,o.bridgeAddressOrigin),!i.token.originTokenAddress)throw new B("SUI token must contain 'originTokenAddress'");let r=ce(i.token.originTokenAddress).phantomType,s=new ft;s.setSender(i.accountAddress);let{depositObj:d,isNewDeposit:c}=await this.getDepositObject(i.accountAddress,i.token.originTokenAddress,s);if(c)throw new ht("No deposit found");let A=jd(s,r,{bridge:o.bridgeObjectAddress,userDeposit:d}),g=await Ft(l=>this.client.getCoins({owner:i.accountAddress,coinType:i.token.originTokenAddress,cursor:l}));return g[0]?s.mergeCoins(g[0].coinObjectId,[A]):s.transferObjects([A],i.accountAddress),await s.toJSON({client:this.client})}};var zi=require("web3"),dc=require("web3-eth-abi");var xi=class extends Ne{constructor(i,o,r){super();this.tronWeb=i;this.api=o;this.tronJsonRpc=r}chainType="TRX";P=52;async getUserBalanceInfo(i,o){let r;if(this.tronJsonRpc)try{r=await this.getUserBalanceInfoByBatch(this.tronJsonRpc,i,o)}catch{r=await this.getUserBalanceInfoPerProperty(i,o)}else r=await this.getUserBalanceInfoPerProperty(i,o);return r}async getUserBalanceInfoByBatch(i,o,r){let s=pi(r.poolAddress),d=pi(o),c=[{jsonrpc:"2.0",id:1,method:"eth_call",params:[{to:s,data:this.getFunctionAbi("userRewardDebt",d)},"latest"]},{jsonrpc:"2.0",id:2,method:"eth_call",params:[{to:s,data:this.getFunctionAbi("balanceOf",d)},"latest"]}],g=await(await fetch(i,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(c)})).json();if(Array.isArray(g)&&g.length===2){let l=m=>{let I=g.find(h=>h.id===m);if(!I||!I.result)throw new Error(`Missing or invalid result for id ${m}`);return zi.Web3.utils.toBigInt(I.result).toString()};return new pe({lpAmount:zi.Web3.utils.toBigInt(l(2)).toString(),rewardDebt:zi.Web3.utils.toBigInt(l(1)).toString()})}throw new Error("Batched HTTP call failed")}async getUserBalanceInfoPerProperty(i,o){this.tronWeb.defaultAddress.base58||this.tronWeb.setAddress(i);let r=this.getContract(o.poolAddress),s=(await r.methods.userRewardDebt(i).call()).toString(),d=(await r.methods.balanceOf(i).call()).toString();return new pe({lpAmount:d,rewardDebt:s})}async getPoolInfoFromChain(i){let o;if(this.tronJsonRpc)try{o=await this.getPoolInfoByBatch(this.tronJsonRpc,i)}catch{o=await this.getPoolInfoPerProperty(i)}else o=await this.getPoolInfoPerProperty(i);return o}async getPoolInfoByBatch(i,o){let r=pi(o.poolAddress),s=[{jsonrpc:"2.0",id:1,method:"eth_call",params:[{to:r,data:this.getFunctionAbi("a")},"latest"]},{jsonrpc:"2.0",id:2,method:"eth_call",params:[{to:r,data:this.getFunctionAbi("d")},"latest"]},{jsonrpc:"2.0",id:3,method:"eth_call",params:[{to:r,data:this.getFunctionAbi("tokenBalance")},"latest"]},{jsonrpc:"2.0",id:4,method:"eth_call",params:[{to:r,data:this.getFunctionAbi("vUsdBalance")},"latest"]},{jsonrpc:"2.0",id:5,method:"eth_call",params:[{to:r,data:this.getFunctionAbi("totalSupply")},"latest"]},{jsonrpc:"2.0",id:6,method:"eth_call",params:[{to:r,data:this.getFunctionAbi("accRewardPerShareP")},"latest"]}],c=await(await fetch(i,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(s)})).json();if(Array.isArray(c)&&c.length===6){let A=I=>{let h=c.find(W=>W.id===I);if(!h||!h.result)throw new Error(`Missing or invalid result for id ${I}`);return zi.Web3.utils.toBigInt(h.result).toString()},g=A(3),l=A(4),m=be({tokenBalance:g,vUsdBalance:l});return{aValue:A(1),dValue:A(2),tokenBalance:g,vUsdBalance:l,totalLpAmount:A(5),accRewardPerShareP:A(6),p:this.P,imbalance:m}}throw new Error("Batched pool info call failed")}async getPoolInfoPerProperty(i){this.tronWeb.defaultAddress.base58||this.tronWeb.setAddress(i.poolAddress);let o=this.getContract(i.poolAddress),[r,s,d,c,A,g]=await Promise.all([o.methods.a().call(),o.methods.d().call(),o.methods.tokenBalance().call(),o.methods.vUsdBalance().call(),o.methods.totalSupply().call(),o.methods.accRewardPerShareP().call()]),l=d.toString(),m=c.toString(),I=be({tokenBalance:l,vUsdBalance:m});return{aValue:r.toString(),dValue:s.toString(),tokenBalance:l,vUsdBalance:m,totalLpAmount:A.toString(),accRewardPerShareP:g.toString(),p:this.P,imbalance:I}}buildRawTransactionDeposit(i){let{amount:o,accountAddress:r}=i,s=[{type:"uint256",value:o}];return this.buildRawTransaction(i.token.poolAddress,"deposit(uint256)",s,"0",r)}buildRawTransactionWithdraw(i){let{amount:o,accountAddress:r}=i,s=[{type:"uint256",value:o}];return this.buildRawTransaction(i.token.poolAddress,"withdraw(uint256)",s,"0",r)}buildRawTransactionClaimRewards(i){let{accountAddress:o}=i,r=[];return this.buildRawTransaction(i.token.poolAddress,"claimRewards()",r,"0",o)}async buildRawTransaction(i,o,r,s,d){let c=await this.tronWeb.transactionBuilder.triggerSmartContract(i,o,{callValue:+s},r,d);if(!c?.result?.result)throw new B("Unknown error: "+JSON.stringify(c,null,2));return c.transaction}getContract(i){return this.tronWeb.contract(Ji.abi,i)}getFunctionAbi(i,...o){let r=Ji.abi.find(s=>s.type==="function"&&"name"in s&&s.name===i);if(!r)throw new Error(`${i} method not found in Pool ABI`);return(0,dc.encodeFunctionCall)(r,o)}};var io=class{constructor(n,i,o,r){this.api=n;this.nodeRpcUrlsConfig=i;this.params=o;this.tokenService=r;this.rawTxBuilder=new Oa(n,i,this.params,r);let s=o.cachePoolInfoChainSec>0?o.cachePoolInfoChainSec*1e3:20*1e3;this.cache=new kt({defaultTtl:s})}rawTxBuilder;cache;async getAllowance(n,i){if(i){let o=n,r=i;return await this.tokenService.getAllowance({...r,spender:r.token.poolAddress},o)}else{let o=n;return await this.tokenService.getAllowance({...o,spender:o.token.poolAddress})}}async checkAllowance(n,i){if(i){let o=n,r=i;return this.tokenService.checkAllowance({...r,spender:r.token.poolAddress},o)}else{let o=n;return this.tokenService.checkAllowance({...o,spender:o.token.poolAddress})}}async approve(n,i){return this.tokenService.approve(n,{...i,spender:i.token.poolAddress})}async getAmountToBeDeposited(n,i,o){H(n),z("amount",n,i.decimals);let r=await this.getPoolInfoFromChain(i,o),{vUsdBalance:s,tokenBalance:d,aValue:c,dValue:A}=r,g=qd(n,c,A,d,s);return S(g,3).toFixed()}async getAmountToBeWithdrawn(n,i,o,r){H(n),z("amount",n,o.decimals);let s=await this.getPoolInfoFromChain(o,r),d=ec(n),c=Je(d,o.decimals),g=(await this.getUserBalanceInfo(i,o,r)).earned(s)||"0",l=(0,cc.Big)(c).plus(g).toFixed();return S(l,o.decimals).toFixed()}async getUserBalanceInfo(n,i,o){return xn(i.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,o).getUserBalanceInfo(n,i)}async getPoolInfoFromChain(n,i){let o={chainSymbol:n.chainSymbol,poolAddress:n.poolAddress},r=this.cache.get(o);if(r)return r;{let s=await xn(n.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,i).getPoolInfoFromChain(n);return this.cache.put(o,s),this.api.cachePut({chainSymbol:n.chainSymbol,poolAddress:n.poolAddress},s),s}}};function xn(a,n,i,o,r){switch(L.getChainProperty(a).chainType){case"EVM":{if(r)return new ki(r,n);{let s=i.getNodeRpcUrl(a),d=new Un.Web3(s);return d.defaultReturnFormat={number:Un.FMT_NUMBER.STR,bytes:Un.FMT_BYTES.HEX},new ki(d,n)}}case"TRX":{let s=i.getNodeRpcUrl(a),d=o.tronJsonRpc;if(r)return new xi(r,n,d);{let c=new Ac.TronWeb({fullHost:s});return new xi(c,n,d)}}case"SOLANA":{let s=i.getNodeRpcUrl(a);return new Qa(s,n)}case"SRB":return new Ua(i,o,n);case"SUI":return new no(i.getNodeRpcUrl(a),n);case"ALG":if(r){let s=r,d=Ur.AlgorandClient.fromClients({algod:s});return new Hi(d,n)}else{let s=i.getNodeRpcUrl(a),d=Ur.AlgorandClient.fromConfig({algodConfig:{server:s}});return new Hi(d,n)}}}var lc=require("tronweb"),En=require("web3");var Og={abi:[{inputs:[{internalType:"string",name:"tokenName_",type:"string"},{internalType:"string",name:"tokenSymbol_",type:"string"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"address",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"lpAmount",type:"uint256"}],name:"Deposited",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"address",name:"token",type:"address"}],name:"DepositedRewards",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256[4]",name:"values",type:"uint256[4]"}],name:"MultiTransfer",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"address",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"Withdrawn",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[],name:"NUM_TOKENS",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"pure",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"subtractedValue",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"index",type:"uint256"},{internalType:"uint256",name:"minVirtualAmount",type:"uint256"}],name:"deposit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"depositRewards",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"index",type:"uint256"}],name:"getEstimatedAmountOnDeposit",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"index",type:"uint256"}],name:"getRewardsAmount",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"},{internalType:"uint256",name:"virtualAmount",type:"uint256"}],name:"getWithdrawProportionAmount",outputs:[{internalType:"uint256[4]",name:"",type:"uint256[4]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"",type:"uint256"}],name:"pools",outputs:[{internalType:"contract IPool",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"index",type:"uint256"},{internalType:"contract IPool",name:"pool",type:"address"}],name:"setPool",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"},{internalType:"uint256",name:"index",type:"uint256"}],name:"subBalanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"index",type:"uint256"}],name:"subDepositRewards",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"index",type:"uint256"}],name:"subTotalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"index",type:"uint256"}],name:"subTransfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"index",type:"uint256"}],name:"subTransferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"virtualAmount",type:"uint256"},{internalType:"uint256",name:"index",type:"uint256"}],name:"subWithdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"",type:"uint256"}],name:"tokens",outputs:[{internalType:"contract IERC20",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"virtualAmount",type:"uint256"}],name:"withdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}]},ao=Og;var vn=class{};var Oi=class extends vn{constructor(i,o){super();this.web3=i;this.api=o}chainType="EVM";async balanceOf(i){let o=(await this.getYieldContract(i.token.yieldAddress).methods.balanceOf(i.owner).call()).toString();return S(o,3).toFixed()}async getEstimatedAmountOnDeposit(i){let o=V(i.amount,i.token.decimals).toFixed(),r=(await this.getYieldContract(i.token.yieldAddress).methods.getEstimatedAmountOnDeposit(o,i.token.yieldId).call()).toString();return S(r,3).toFixed()}async getWithdrawProportionAmount(i){let o=V(i.amount,3).toFixed();return await this.getYieldContract(i.cydToken.yieldAddress).methods.getWithdrawProportionAmount(i.owner,o).call()}async buildRawTransactionDeposit(i){return Promise.resolve({...this.buildTxParams({owner:i.owner,yieldAddress:i.token.yieldAddress}),data:this.getYieldContract(i.token.yieldAddress).methods.deposit(i.amount,i.token.yieldId,i.minVirtualAmount).encodeABI()})}async buildRawTransactionWithdraw(i){return Promise.resolve({...this.buildTxParams({owner:i.owner,yieldAddress:i.token.yieldAddress}),data:this.getYieldContract(i.token.yieldAddress).methods.withdraw(i.amount).encodeABI()})}buildTxParams(i){return{from:i.owner,to:i.yieldAddress,value:"0"}}getYieldContract(i){return new this.web3.eth.Contract(ao.abi,i)}};var oo=class{constructor(n,i,o,r){this.api=n;this.nodeRpcUrlsConfig=i;this.params=o;this.tokenService=r}async approve(n,i){return this.tokenService.buildRawTransactionApprove({...n,spender:n.token.yieldAddress},i)}async deposit(n,i){return H(n.amount),z("amount",n.amount,n.token.decimals),H(n.minVirtualAmount),z("minVirtualAmount",n.minVirtualAmount,3),n.amount=V(n.amount,n.token.decimals).toFixed(),n.minVirtualAmount=V(n.minVirtualAmount,3).toFixed(),Dn(n.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,n.owner,i).buildRawTransactionDeposit(n)}async withdraw(n,i){return H(n.amount),z("amount",n.amount,3),n.amount=V(n.amount,3).toFixed(),Dn(n.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,n.owner,i).buildRawTransactionWithdraw(n)}};var Qi=class extends vn{constructor(i,o){super();this.tronWeb=i;this.api=o}chainType="TRX";async balanceOf(i){let o=(await(await this.getContract(i.token.yieldAddress)).methods.balanceOf(i.owner).call()).toString();return S(o,3).toFixed()}async getEstimatedAmountOnDeposit(i){let o=V(i.amount,i.token.decimals).toFixed(),r=(await(await this.getContract(i.token.yieldAddress)).methods.getEstimatedAmountOnDeposit(o,i.token.yieldId).call()).toString();return S(r,3).toFixed()}async getWithdrawProportionAmount(i){let o=V(i.amount,3).toFixed();return(await(await this.getContract(i.cydToken.yieldAddress)).methods.getWithdrawProportionAmount(i.owner,o).call()).toString().split(",")}async buildRawTransactionDeposit(i){let{amount:o,owner:r,token:s,minVirtualAmount:d}=i,c=[{type:"uint256",value:o},{type:"uint256",value:s.yieldId},{type:"uint256",value:d}];return this.buildRawTransaction(i.token.yieldAddress,"deposit(uint256,uint256,uint256)",c,"0",r)}async buildRawTransactionWithdraw(i){let{amount:o,owner:r}=i,s=[{type:"uint256",value:o}];return this.buildRawTransaction(i.token.yieldAddress,"withdraw(uint256)",s,"0",r)}async buildRawTransaction(i,o,r,s,d){let c=await this.tronWeb.transactionBuilder.triggerSmartContract(i,o,{callValue:+s},r,d);if(!c?.result?.result)throw new B("Unknown error: "+JSON.stringify(c,null,2));return c.transaction}getContract(i){return this.tronWeb.contract(ao.abi,i)}};function gc(a){if(!Ki(a))throw new Ai("Token does not support Yield")}function Ki(a){return!!a.yieldAddress&&a.yieldId!==void 0}var ro=class{constructor(n,i,o,r){this.api=n;this.nodeRpcUrlsConfig=i;this.params=o;this.tokenService=r;this.rawTxBuilder=new oo(n,i,o,r)}rawTxBuilder;async getCYDTokens(){let n=[],i=await this.api.getChainDetailsMap("pool");return Object.values(i).forEach(o=>{if(o.yieldAddress){let r=o.tokens.find(d=>d.tokenAddress===o.yieldAddress),s=o.tokens.filter(Ki);if(s.length>0){let d=r??{allbridgeChainId:o.allbridgeChainId,apr:"",apr30d:"",apr7d:"",bridgeId:o.bridgeId,bridgeAddress:o.bridgeAddress,chainId:o.chainId,chainName:o.name,chainSymbol:o.chainSymbol,chainType:o.chainType,confirmations:o.confirmations,decimals:3,feeShare:"",lpRate:"",name:"Core Yield",poolAddress:"",symbol:"CYD",tokenAddress:o.yieldAddress,transferTime:{},txCostAmount:{maxAmount:"0",swap:"0",transfer:"0"},yieldAddress:o.yieldAddress};n.push({...d,yieldAddress:o.yieldAddress,tokens:s})}}}),n}async getAllowance(n,i){return await this.tokenService.getAllowance({...n,spender:n.token.yieldAddress},i)}async checkAllowance(n,i){return this.tokenService.checkAllowance({...n,spender:n.token.yieldAddress},i)}async balanceOf(n,i){return Dn(n.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,n.owner,i).balanceOf(n)}async getEstimatedAmountOnDeposit(n,i){return H(n.amount),z("amount",n.amount,n.token.decimals),Dn(n.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,n.token.yieldAddress,i).getEstimatedAmountOnDeposit(n)}async getWithdrawAmounts(n,i){H(n.amount),z("amount",n.amount,3);let o=await Dn(n.cydToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,n.owner,i).getWithdrawProportionAmount(n);return n.cydToken.tokens.filter(r=>o[r.yieldId]!==void 0).map(r=>({amount:S(o[r.yieldId],r.decimals).toFixed(),token:r}))}};function Dn(a,n,i,o,r){switch(L.getChainProperty(a).chainType){case"EVM":{if(r)return new Oi(r,n);{let s=i.getNodeRpcUrl(a),d=new En.Web3(s);return d.defaultReturnFormat={number:En.FMT_NUMBER.STR,bytes:En.FMT_BYTES.HEX},new Oi(d,n)}}case"TRX":{if(r)return new Qi(r,n);{let s=i.getNodeRpcUrl(a),d=new lc.TronWeb({fullHost:s});return d.setAddress(o),new Qi(d,n)}}case"SOLANA":throw new _;case"SRB":throw new _;case"SUI":throw new _;case"ALG":throw new _}}var Ae=require("big.js");function pc(a,n,i){let o=Qg(a,{decimals:n.decimals,feeShare:n.feeShare},n.poolInfo),r=Kg(o.amountIncludingCommissionInSystemPrecision,{decimals:i.decimals,feeShare:i.feeShare},i.poolInfo);return{swapToVUsdCalcResult:o,swapFromVUsdCalcResult:r}}function Cc(a,n,i){let o=Ug(a,{decimals:i.decimals,feeShare:i.feeShare},i.poolInfo),r=Dg(o.amountIncludingCommissionInSystemPrecision,{decimals:n.decimals,feeShare:n.feeShare},n.poolInfo);return{swapToVUsdCalcResult:o,swapFromVUsdCalcResult:r}}function Qg(a,{feeShare:n,decimals:i},o){let r=(0,Ae.Big)(a),s=r.times(n),d=r.minus(s);return{bridgeFeeInTokenPrecision:s.round().toFixed(),amountIncludingCommissionInSystemPrecision:uc(rn(d,i),o),amountExcludingCommissionInSystemPrecision:uc(rn(r,i),o)}}function uc(a,n){if(a.eq(0))return"0";let i=(0,Ae.Big)(n.tokenBalance).plus(a),o=Bt(i.toFixed(),n.aValue,n.dValue);return(0,Ae.Big)(n.vUsdBalance).minus(o).round().toFixed()}function Kg(a,{feeShare:n,decimals:i},o){if((0,Ae.Big)(a).eq(0))return{bridgeFeeInTokenPrecision:"0",amountIncludingCommissionInTokenPrecision:"0",amountExcludingCommissionInTokenPrecision:"0"};let s=(0,Ae.Big)(a).plus(o.vUsdBalance),d=Bt(s,o.aValue,o.dValue),c=Je((0,Ae.Big)(o.tokenBalance).minus(d),i),A=(0,Ae.Big)(c).times(n),g=(0,Ae.Big)(c).minus(A).round();return{bridgeFeeInTokenPrecision:A.round().toFixed(),amountIncludingCommissionInTokenPrecision:g.toFixed(),amountExcludingCommissionInTokenPrecision:c.toFixed()}}function Ug(a,{feeShare:n,decimals:i},o){let r=(0,Ae.Big)(n).div((0,Ae.Big)(1).minus(n)),s=(0,Ae.Big)(a).times(r),d=(0,Ae.Big)(a).plus(s);return{bridgeFeeInTokenPrecision:s.round().toFixed(),amountIncludingCommissionInSystemPrecision:mc(rn(d,i),o),amountExcludingCommissionInSystemPrecision:mc(rn(a,i),o)}}function mc(a,n){let i=(0,Ae.Big)(n.tokenBalance).minus(a),o=Bt(i.toFixed(),n.aValue,n.dValue);return(0,Ae.Big)(o).minus(n.vUsdBalance).round().toFixed()}function Dg(a,{feeShare:n,decimals:i},o){if((0,Ae.Big)(a).eq(0))return{bridgeFeeInTokenPrecision:"0",amountIncludingCommissionInTokenPrecision:"0",amountExcludingCommissionInTokenPrecision:"0"};let r=(0,Ae.Big)(o.vUsdBalance).minus(a),s=Bt(r.toFixed(),o.aValue,o.dValue),d=(0,Ae.Big)(s).minus(o.tokenBalance),c=Je(d.toFixed(),i),A=(0,Ae.Big)(n).div((0,Ae.Big)(1).minus(n)),g=(0,Ae.Big)(c).times(A),l=(0,Ae.Big)(c).plus(g);return{bridgeFeeInTokenPrecision:g.round().toFixed(),amountIncludingCommissionInTokenPrecision:l.round().toFixed(),amountExcludingCommissionInTokenPrecision:c.toFixed()}}var xt=require("big.js");function bc(a,n,i,o,r){let s=Rt(a,n,i),d=Je(s,n.decimals),c=mi(s,o,r),A=(0,xt.Big)(a).times(n.feeShare),g=(0,xt.Big)(c).div((0,xt.Big)(1).minus(o.feeShare)).minus(c);return{sourceLPSwap:{fee:S(A,n.decimals).neg().round(n.decimals,xt.Big.roundUp).toFixed(),swap:S((0,xt.Big)(a).minus(d).minus(A),n.decimals).neg().round(n.decimals,xt.Big.roundUp).toFixed()},destLPSwap:{fee:S(g,o.decimals).neg().round(o.decimals,xt.Big.roundUp).toFixed(),swap:S(Je(s,o.decimals).minus(c).minus(g),o.decimals).neg().round(o.decimals,xt.Big.roundUp).toFixed()}}}var Dr=require("@algorandfoundation/algokit-utils"),co=require("algosdk");var so=class{constructor(n){this.nodeRpcUrlsConfig=n}async checkAssetOptIn(n,i,o){let r=this.getAlgorand(o);typeof n=="string"&&(n=BigInt(n));let d=(await r.account.getInformation(i)).assets;return d?d.find(({assetId:A})=>A===n)!==void 0:!1}async buildRawTransactionAssetOptIn(n,i,o){let r=this.getAlgorand(o);typeof n=="string"&&(n=BigInt(n));let s=await r.createTransaction.assetOptIn({assetId:n,sender:i});return Qt(s)}async checkAppOptIn(n,i,o){let r=this.getAlgorand(o);return oa(n,i,r)}async buildRawTransactionAppOptIn(n,i,o){let r=this.getAlgorand(o);typeof n=="string"&&(n=BigInt(n));let s=r.newGroup(),d=r.account.random();s.addAppCallMethodCall({appId:n,method:new co.ABIMethod({name:"optInToApplication",desc:void 0,args:[],returns:{type:"void",desc:void 0},events:[],readonly:!1}),args:[],sender:i,signer:d,onComplete:co.OnApplicationComplete.OptInOC});let{transactions:c}=await s.buildTransactions();return Qt(...c)}getAlgorand(n){if(n)return Dr.AlgorandClient.fromClients({algod:n});{let i=this.nodeRpcUrlsConfig.getNodeRpcUrl("ALG");return Dr.AlgorandClient.fromConfig({algodConfig:{server:i}})}}};var Bc=ge(require("axios"));var Ic="3.26.0-alpha.4";function yc(a){return Object.entries(a).reduce((n,i)=>{let o=i[0],r=i[1],s=el(o,r);return s&&(n[o]=s),n},{})}function hc(a){let n={};for(let[i,o]of Object.entries(a)){let r=i;for(let s of o.tokens){let d=_n({chainSymbol:r,poolAddress:s.poolAddress}),c=be(s.poolInfo);n[d]={...s.poolInfo,imbalance:c}}}return n}function Eg(a,n){let{name:i,...o}=a,{poolInfo:r,...s}=n;return{...s,...o,chainName:i}}function _g(a){switch(a){case"allbridge":return 1;case"wormhole":return 2;case"cctp":return 3;case"cctpV2":return 4;case"oft":return 5}}function $g(a){return Object.entries(a).reduce((n,[i,o])=>(n[i]=qg(o),n),{})}function qg(a){return Object.entries(a).reduce((n,[i,o])=>{let r=_g(i);return r&&o!=null&&(n[r]=o),n},{})}function el(a,n){let i=L.getChainsProperties()[a];if(!i)return null;let o={...i,allbridgeChainId:n.chainId,bridgeId:n.bridgeId,bridgeAddress:n.bridgeAddress,oftBridgeAddress:n.oftBridgeAddress,yieldAddress:n.yieldAddress,transferTime:$g(n.transferTime),txCostAmount:n.txCostAmount,confirmations:n.confirmations,suiAddresses:n.suiAddresses};return{...o,tokens:n.tokens.map(r=>Eg(o,r))}}function _n(a){return a.chainSymbol+"_"+a.poolAddress}function vc(a){let n=[];for(let[i,o]of Object.entries(a)){let r=i;for(let s of o.tokens)n.push({chainSymbol:r,poolAddress:s.poolAddress})}return n}function Rc(a){let n={};for(let[i,o]of Object.entries(a)){let r=i;for(let[s,d]of Object.entries(o))d.imbalance=be(d),n[_n({chainSymbol:r,poolAddress:s})]=d}return n}var $n=class{api;constructor(n){this.api=Bc.default.create({baseURL:n.coreApiUrl,headers:{Accept:"application/json",...n.coreApiHeaders,"x-Sdk-Agent":"AllbridgeCoreSDK/"+Ic},params:n.coreApiQueryParams})}async getTokenInfo(){let{data:n}=await this.api.get("/token-info",{params:{filter:"all"}});return{chainDetailsMap:yc(n),poolInfoMap:hc(n)}}async getPendingInfo(){let{data:n}=await this.api.get("/pending-info");return n}async getGasBalance(n,i){let{data:o}=await this.api.get(`/check/${n}/${i}`);return o}async getTransferStatus(n,i){let{data:o}=await this.api.get(`/chain/${n}/${i}`);return o}async getReceiveTransactionCost(n){if(n.messenger===5&&!n.sourceToken)throw new ri("For OFT sourceToken required");let{data:i}=await this.api.post("/receive-fee",n,{headers:{"Content-Type":"application/json"}});return{exchangeRate:i.exchangeRate,fee:i.fee,sourceNativeTokenPrice:i.sourceNativeTokenPrice,adminFeeShareWithExtras:i.adminFeeShareWithExtras}}async getPoolInfoMap(n){let i=n instanceof Array?n:[n],{data:o}=await this.api.post("/pool-info",{pools:i},{headers:{"Content-Type":"application/json"}});return Rc(o)}};var Er=20*1e3,tl=55*1e3,qn=class{constructor(n){this.apiClient=n;this.tokenInfoCache=new kt({defaultTtl:tl}),this.receivedTransactionCache=new kt({defaultTtl:Er}),this.pendingInfoCache=new kt({defaultTtl:Er}),this.gasBalanceCache=new kt({defaultTtl:Er})}tokenInfoCache;pendingInfoCache;gasBalanceCache;receivedTransactionCache;getTokenInfo(){let n="TOKEN_INFO_CACHE_KEY",i=this.tokenInfoCache.get(n);if(i)return i;let o=this.apiClient.getTokenInfo();return this.tokenInfoCache.put(n,o),o}async getGasBalance(n,i){let o=`GAS_BALANCE_${n}_${i}`,r=this.gasBalanceCache.get(o);if(r)return r;let s=this.apiClient.getGasBalance(n,i);return this.gasBalanceCache.put(o,s),s}async getPendingInfo(){let n="PENDING_INFO_CACHE_KEY",i=this.pendingInfoCache.get(n);if(i)return i;let o=this.apiClient.getPendingInfo();return this.pendingInfoCache.put(n,o),o}async getReceiveTransactionCost(n){let i=`RECEIVE_TX_COST_${n.sourceChainId}_${n.destinationChainId}_${n.messenger}${n.sourceToken?"_"+n.sourceToken:""}`,o=this.receivedTransactionCache.get(i);if(o)return o;let r=await this.apiClient.getReceiveTransactionCost(n);return this.receivedTransactionCache.put(i,r),r}async getTransferStatus(n,i){return this.apiClient.getTransferStatus(n,i)}async getPoolInfoMap(n){return this.apiClient.getPoolInfoMap(n)}};var ei=class{constructor(n){this.apiClient=n}async getChainDetailsMap(){return(await this.apiClient.getTokenInfo()).chainDetailsMap}async tokens(){let n=await this.getChainDetailsMap();return Object.values(n).flatMap(i=>i.tokens)}async getPendingInfo(){return this.apiClient.getPendingInfo()}async getGasBalance(n,i){return this.apiClient.getGasBalance(n,i)}async getChainDetailsMapAndPoolInfoMap(){return await this.apiClient.getTokenInfo()}async getTransferStatus(n,i){return await this.apiClient.getTransferStatus(n,i)}async getReceiveTransactionCost(n){return await this.apiClient.getReceiveTransactionCost(n)}async getPoolInfoMap(n){return await this.apiClient.getPoolInfoMap(n)}};var ti=class{constructor(n,i){this.client=n;this.isStaging=i.coreApiQueryParams?.staging==="true"}isStaging;async getChainDetailsMap(n){let i=await this.client.getChainDetailsMap(),o={};for(let r in i){let s=i[r];s&&(o[r]={...s,tokens:Yc(s.tokens,n,this.isStaging)})}return o}async tokens(n){return Yc(await this.client.tokens(),n,this.isStaging)}async getPendingInfo(){return this.client.getPendingInfo()}async getGasBalance(n,i){return this.client.getGasBalance(n,i)}async getTransferStatus(n,i){return await this.client.getTransferStatus(n,i)}async getReceiveTransactionCost(n){return await this.client.getReceiveTransactionCost(n)}cachePut(n,i){return this.client.cachePut(n,i)}getPoolInfoByKey(n){return this.client.getPoolInfoByKey(n)}refreshPoolInfo(n){return this.client.refreshPoolInfo(n)}};function Yc(a,n,i){return a.filter(o=>i?!0:o.flags[n]).map(nl)}function nl(a){let{flags:n,...i}=a;return i}var il=55*1e3,ni=class{constructor(n){this.client=n;this.poolInfoCache=new _r}poolInfoCache;async getChainDetailsMap(){return(await this.client.getChainDetailsMapAndPoolInfoMap()).chainDetailsMap}async tokens(){return await this.client.tokens()}getTransferStatus(n,i){return this.client.getTransferStatus(n,i)}getReceiveTransactionCost(n){return this.client.getReceiveTransactionCost(n)}getPendingInfo(){return this.client.getPendingInfo()}getGasBalance(n,i){return this.client.getGasBalance(n,i)}async getPoolInfoByKey(n){this.poolInfoCache.putAllIfNotExists((await this.client.getChainDetailsMapAndPoolInfoMap()).poolInfoMap);let i=this.poolInfoCache.get(n);if(i)return i;{let o=await this.client.getPoolInfoMap(n);this.poolInfoCache.putAll(o);let r=o[_n(n)];if(r)return r;throw new B("Cannot find pool info for "+n.poolAddress+" on chain "+n.chainSymbol)}}async refreshPoolInfo(n){let i;if(n)this.poolInfoCache.putAllIfNotExists((await this.client.getChainDetailsMapAndPoolInfoMap()).poolInfoMap),i=await this.client.getPoolInfoMap(n);else{let o=await this.client.getChainDetailsMapAndPoolInfoMap();i=await this.client.getPoolInfoMap(vc(o.chainDetailsMap))}this.poolInfoCache.putAll(i)}cachePut(n,i){this.poolInfoCache.put(_n(n),i)}},_r=class{cache;constructor(){this.cache=new kt({defaultTtl:il})}putAll(n){for(let[i,o]of Object.entries(n))this.cache.put(i,o)}putAllIfNotExists(n){for(let[i,o]of Object.entries(n))this.cache.get(i)||this.cache.put(i,o)}put(n,i){this.cache.put(n,i)}get(n){let i=_n(n);return this.cache.get(i)}};var es=require("@algorandfoundation/algokit-utils"),fc=require("big.js"),Gc=require("tronweb"),Fc=require("web3");var $r=require("big.js"),Te=class{async checkAllowance(n){let i=await this.getAllowance(n);return(0,$r.Big)(i).gte((0,$r.Big)(n.amount))}};var Ui=class extends Te{constructor(i,o){super();this.algorand=i;this.api=o}chainType="SUI";approve(i){throw new _}buildRawTransactionApprove(i){throw new _}getAllowance(i){throw new _}async getNativeTokenBalance(i){let{account:o}=i;return(await this.algorand.account.getInformation(o)).balance.microAlgo.toString()}async getTokenBalance(i){let{account:o,token:r}=i;try{return(await this.algorand.asset.getAccountInformation(o,BigInt(r.tokenAddress))).balance.toString()}catch(s){if(s instanceof Error)return s.message.includes("account asset info not found"),"0";throw s}}};var al={abi:[{inputs:[{internalType:"string",name:"name_",type:"string"},{internalType:"string",name:"symbol_",type:"string"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"subtractedValue",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"}]},Ao=al;var ol="0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",rl="0xdac17f958d2ee523a2206206994597c13d831ec7",sl=1e5,Di=class extends Te{constructor(i,o){super();this.web3=i;this.api=o}chainType="EVM";getAllowance(i){let o=i.token.tokenAddress,r=i.owner,s=i.spender;return this.getAllowanceByTokenAddress(o,r,s)}getAllowanceByTokenAddress(i,o,r){return this.getERC20Contract(i).methods.allowance(o,r).call()}async getTokenBalance(i){return await this.getERC20Contract(i.token.tokenAddress).methods.balanceOf(i.account).call()}async getNativeTokenBalance(i){return(await this.web3.eth.getBalance(i.account)).toString()}async approve(i){if(this.isUsdt(i.tokenAddress)&&await this.getAllowanceByTokenAddress(i.tokenAddress,i.owner,i.spender)!=="0"){let s=await this.buildRawTransactionApprove({...i,amount:"0"});await this.sendRawTransaction(s,i.chainSymbol)}let o=await this.buildRawTransactionApprove(i);return await this.sendRawTransaction(o,i.chainSymbol)}isUsdt(i){return i.toLowerCase()===rl}buildRawTransactionApprove(i){let{tokenAddress:o,spender:r,owner:s,amount:d}=i,A=this.getERC20Contract(o).methods.approve(r,d==null?ol:La(d));return Promise.resolve({from:s,to:o,value:"0",data:A.encodeABI()})}async sendRawTransaction(i,o){let r=i,s={maxPriorityFeePerGas:void 0,maxFeePerGas:void 0};o==="POL"?r.gas=sl:r.gas=await this.web3.eth.estimateGas(i);let{transactionHash:d}=await this.web3.eth.sendTransaction({...r,...s});return{txId:d.toString()}}getERC20Contract(i){return new this.web3.eth.Contract(Ao.abi,i)}};var Wc=require("@project-serum/anchor"),Rn=require("@solana/web3.js");var go=class extends Te{constructor(i,o){super();this.solanaRpcUrl=i;this.api=o}chainType="SOLANA";approve(i){throw new _}buildRawTransactionApprove(i){throw new _}buildAnchorProvider(i){let o=new Rn.Connection(this.solanaRpcUrl,"confirmed"),r=new Rn.PublicKey(i);return new Wc.AnchorProvider(o,{publicKey:r},{preflightCommitment:"confirmed",commitment:"confirmed"})}getAllowance(i){throw new _}async getTokenBalance(i){let{account:o,token:r}=i;try{let s=await at(new Rn.PublicKey(o),new Rn.PublicKey(r.tokenAddress));return(await wn(s,this.buildAnchorProvider(o))).amount.toString()}catch(s){if(s instanceof Error)return s.message.startsWith("Account does not exist"),"0";throw s}}async getNativeTokenBalance(i){return(await this.buildAnchorProvider(i.account).connection.getBalance(new Rn.PublicKey(i.account))).toString()}};var qr=require("@stellar/stellar-sdk");var lo=class extends Te{constructor(i,o,r){super();this.nodeRpcUrlsConfig=i;this.params=o;this.api=r}chainType="SRB";getAllowance(){throw new _}async getTokenBalance(i){if(!i.token.originTokenAddress)throw new B("OriginTokenAddress missing");let[o,r]=i.token.originTokenAddress.split(":"),s=new qr.Horizon.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")),d;try{d=await s.loadAccount(i.account)}catch(g){if(g instanceof qr.NotFoundError)return"0";throw g}let A=d.balances.find(g=>(g.asset_type==="credit_alphanum4"||g.asset_type==="credit_alphanum12")&&g.asset_code==o&&g.asset_issuer==r);return A?.balance?V(A.balance,L.getChainDecimalsByType(L.getChainProperty(i.token.chainSymbol).chainType)).toFixed():"0"}async getNativeTokenBalance(i){let d=(await new qr.Horizon.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")).loadAccount(i.account)).balances.find(c=>c.asset_type==="native");return d?.balance?V(d.balance,L.getChainDecimalsByType(L.getChainProperty(i.chainSymbol).chainType)).toFixed():"0"}approve(){throw new _}buildRawTransactionApprove(){throw new _}};var uo=class extends Te{constructor(i,o){super();this.suiRpcUrl=i;this.api=o;this.suiClient=new Ht({url:this.suiRpcUrl})}chainType="SUI";suiClient;approve(i){throw new _}buildRawTransactionApprove(i){throw new _}getAllowance(i){throw new _}async getTokenBalance(i){if(!i.token.originTokenAddress)throw new B("SUI token must contain 'originTokenAddress'");return(await this.suiClient.getBalance({owner:i.account,coinType:i.token.originTokenAddress})).totalBalance}async getNativeTokenBalance(i){let o=await Ft(r=>this.suiClient.getCoins({owner:i.account,cursor:r}));return o.length===0?"0":o.reduce((r,s)=>r+BigInt(s.balance),BigInt(0)).toString()}};var dl="0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",Ei=class extends Te{constructor(i,o){super();this.tronWeb=i;this.api=o}chainType="TRX";async getAllowance(i){let{token:{tokenAddress:o},owner:r}=i;return(await(await this.getContract(o)).methods.allowance(r,i.spender).call()).toString()}async getTokenBalance(i){return(await(await this.getContract(i.token.tokenAddress)).balanceOf(i.account).call()).toString()}async getNativeTokenBalance(i){return(await this.tronWeb.trx.getBalance(i.account)).toString()}async approve(i){let o=await this.buildRawTransactionApprove(i);return await Ha(this.tronWeb,o)}async buildRawTransactionApprove(i){let{tokenAddress:o,spender:r,owner:s,amount:d}=i,c=d==null?dl:La(d),A=[{type:"address",value:r},{type:"uint256",value:c}];return this.buildRawTransaction(o,"approve(address,uint256)",A,"0",s)}getContract(i){return this.tronWeb.contract(Ao.abi,i)}async buildRawTransaction(i,o,r,s,d){let c=await this.tronWeb.transactionBuilder.triggerSmartContract(i,o,{callValue:+s},r,d);if(!c?.result?.result)throw new B("Unknown error: "+JSON.stringify(c,null,2));return c.transaction}};var ii=class{constructor(n,i,o){this.api=n;this.nodeRpcUrlsConfig=i;this.params=o}async getAllowance(n,i){let o=await this.getChainTokenService(n.token.chainSymbol,n.owner,i).getAllowance(n);return S(o,n.token.decimals).toFixed()}async checkAllowance(n,i){return H(n.amount),z("amount",n.amount,n.token.decimals),this.getChainTokenService(n.token.chainSymbol,n.owner,i).checkAllowance(this.prepareCheckAllowanceParams(n))}async approve(n,i){return i.amount&&(H(i.amount),z("amount",i.amount,i.token.decimals)),this.getChainTokenService(i.token.chainSymbol,i.owner,n).approve(this.prepareApproveParams(i))}async buildRawTransactionApprove(n,i){return n.amount&&(H(n.amount),z("amount",n.amount,n.token.decimals)),this.getChainTokenService(n.token.chainSymbol,n.owner,i).buildRawTransactionApprove(this.prepareApproveParams(n))}async getTokenBalance(n,i){let o=await this.getChainTokenService(n.token.chainSymbol,n.account,i).getTokenBalance(n);return n.token.decimals?S(o,n.token.decimals).toFixed():o}async getNativeTokenBalance(n,i){let o=await this.getChainTokenService(n.chainSymbol,n.account,i).getNativeTokenBalance(n);return{int:o,float:S(o,L.getChainDecimalsByType(L.getChainProperty(n.chainSymbol).chainType)).toFixed()}}getChainTokenService(n,i,o){switch(L.getChainProperty(n).chainType){case"EVM":{if(o)return new Di(o,this.api);{let r=this.nodeRpcUrlsConfig.getNodeRpcUrl(n);return new Di(new Fc.Web3(r),this.api)}}case"TRX":{if(o)return new Ei(o,this.api);{let r=this.nodeRpcUrlsConfig.getNodeRpcUrl(n),s=new Gc.TronWeb({fullHost:r});return s.setAddress(i),new Ei(s,this.api)}}case"SOLANA":{let r=this.nodeRpcUrlsConfig.getNodeRpcUrl(n);return new go(r,this.api)}case"SRB":return new lo(this.nodeRpcUrlsConfig,this.params,this.api);case"SUI":return new uo(this.nodeRpcUrlsConfig.getNodeRpcUrl(n),this.api);case"ALG":if(o){let r=o,s=es.AlgorandClient.fromClients({algod:r});return new Ui(s,this.api)}else{let r=this.nodeRpcUrlsConfig.getNodeRpcUrl(n),s=es.AlgorandClient.fromConfig({algodConfig:{server:r}});return new Ui(s,this.api)}}}prepareCheckAllowanceParams(n){return{...n,amount:V(n.amount,n.token.decimals)}}prepareApproveParams(n){return{tokenAddress:n.token.tokenAddress,owner:n.owner,spender:n.spender,chainSymbol:n.token.chainSymbol,amount:n.amount==null?void 0:(0,fc.Big)(n.amount).toFixed()}}};var mo=class{constructor(n,i){this.nodeRpcUrlsConfig=n;this.params=i;let o=new $n(i),r=new qn(o),s=new ei(r),d=new ni(s);this.api=new ti(d,i),this.tokenService=new ii(this.api,n,i)}api;tokenService;buildRawTransactionApprove(n,i){return this.tokenService.buildRawTransactionApprove(n,i)}checkAllowance(n,i){return this.tokenService.checkAllowance(n,i)}getAllowance(n,i){return this.tokenService.getAllowance(n,i)}};var ai=require("@solana/web3.js");var po=class{constructor(n,i){this.nodeRpcUrlsConfig=n;this.params=i}async addMemoToTx(n,i){if(i.length>28)throw new B("InvalidArgumentException memo cannot be more than 28 characters");let o=new ai.Connection(this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"),"confirmed"),r=await dn(n,o),s=ai.TransactionMessage.decompile(n.message,{addressLookupTableAccounts:r}),d=s.instructions[s.instructions.length-1];if(!d?.keys)throw new B("Last instruction or its keys are invalid.");d.keys.push({pubkey:new ai.PublicKey(Buffer.from(i)),isSigner:!1,isWritable:!1}),n.message=s.compileToV0Message(r)}};var ie=require("@stellar/stellar-sdk");var R0=require("@stellar/stellar-sdk"),cl=R0.contract.Spec,Al=R0.contract.Client;var _i=class extends Al{constructor(i){super(new cl(["AAAAAAAAAYlSZXR1cm5zIHRoZSBhbGxvd2FuY2UgZm9yIGBzcGVuZGVyYCB0byB0cmFuc2ZlciBmcm9tIGBmcm9tYC4KClRoZSBhbW91bnQgcmV0dXJuZWQgaXMgdGhlIGFtb3VudCB0aGF0IHNwZW5kZXIgaXMgYWxsb3dlZCB0byB0cmFuc2ZlcgpvdXQgb2YgZnJvbSdzIGJhbGFuY2UuIFdoZW4gdGhlIHNwZW5kZXIgdHJhbnNmZXJzIGFtb3VudHMsIHRoZSBhbGxvd2FuY2UKd2lsbCBiZSByZWR1Y2VkIGJ5IHRoZSBhbW91bnQgdHJhbnNmZXJlZC4KCiMgQXJndW1lbnRzCgoqIGBmcm9tYCAtIFRoZSBhZGRyZXNzIGhvbGRpbmcgdGhlIGJhbGFuY2Ugb2YgdG9rZW5zIHRvIGJlIGRyYXduIGZyb20uCiogYHNwZW5kZXJgIC0gVGhlIGFkZHJlc3Mgc3BlbmRpbmcgdGhlIHRva2VucyBoZWxkIGJ5IGBmcm9tYC4AAAAAAAAJYWxsb3dhbmNlAAAAAAAAAgAAAAAAAAAEZnJvbQAAABMAAAAAAAAAB3NwZW5kZXIAAAAAEwAAAAEAAAAL","AAAAAAAAAIlSZXR1cm5zIHRydWUgaWYgYGlkYCBpcyBhdXRob3JpemVkIHRvIHVzZSBpdHMgYmFsYW5jZS4KCiMgQXJndW1lbnRzCgoqIGBpZGAgLSBUaGUgYWRkcmVzcyBmb3Igd2hpY2ggdG9rZW4gYXV0aG9yaXphdGlvbiBpcyBiZWluZyBjaGVja2VkLgAAAAAAAAphdXRob3JpemVkAAAAAAABAAAAAAAAAAJpZAAAAAAAEwAAAAEAAAAB","AAAAAAAAA55TZXQgdGhlIGFsbG93YW5jZSBieSBgYW1vdW50YCBmb3IgYHNwZW5kZXJgIHRvIHRyYW5zZmVyL2J1cm4gZnJvbQpgZnJvbWAuCgpUaGUgYW1vdW50IHNldCBpcyB0aGUgYW1vdW50IHRoYXQgc3BlbmRlciBpcyBhcHByb3ZlZCB0byB0cmFuc2ZlciBvdXQgb2YKZnJvbSdzIGJhbGFuY2UuIFRoZSBzcGVuZGVyIHdpbGwgYmUgYWxsb3dlZCB0byB0cmFuc2ZlciBhbW91bnRzLCBhbmQKd2hlbiBhbiBhbW91bnQgaXMgdHJhbnNmZXJyZWQgdGhlIGFsbG93YW5jZSB3aWxsIGJlIHJlZHVjZWQgYnkgdGhlCmFtb3VudCB0cmFuc2ZlcmVkLgoKIyBBcmd1bWVudHMKCiogYGZyb21gIC0gVGhlIGFkZHJlc3MgaG9sZGluZyB0aGUgYmFsYW5jZSBvZiB0b2tlbnMgdG8gYmUgZHJhd24gZnJvbS4KKiBgc3BlbmRlcmAgLSBUaGUgYWRkcmVzcyBiZWluZyBhdXRob3JpemVkIHRvIHNwZW5kIHRoZSB0b2tlbnMgaGVsZCBieQpgZnJvbWAuCiogYGFtb3VudGAgLSBUaGUgdG9rZW5zIHRvIGJlIG1hZGUgYXZhaWxhYmxlIHRvIGBzcGVuZGVyYC4KKiBgZXhwaXJhdGlvbl9sZWRnZXJgIC0gVGhlIGxlZGdlciBudW1iZXIgd2hlcmUgdGhpcyBhbGxvd2FuY2UgZXhwaXJlcy4gQ2Fubm90CmJlIGxlc3MgdGhhbiB0aGUgY3VycmVudCBsZWRnZXIgbnVtYmVyIHVubGVzcyB0aGUgYW1vdW50IGlzIGJlaW5nIHNldCB0byAwLgpBbiBleHBpcmVkIGVudHJ5ICh3aGVyZSBleHBpcmF0aW9uX2xlZGdlciA8IHRoZSBjdXJyZW50IGxlZGdlciBudW1iZXIpCnNob3VsZCBiZSB0cmVhdGVkIGFzIGEgMCBhbW91bnQgYWxsb3dhbmNlLgoKIyBFdmVudHMKCkVtaXRzIGFuIGV2ZW50IHdpdGggdG9waWNzIGBbImFwcHJvdmUiLCBmcm9tOiBBZGRyZXNzLApzcGVuZGVyOiBBZGRyZXNzXSwgZGF0YSA9IFthbW91bnQ6IGkxMjgsIGV4cGlyYXRpb25fbGVkZ2VyOiB1MzJdYAAAAAAAB2FwcHJvdmUAAAAABAAAAAAAAAAEZnJvbQAAABMAAAAAAAAAB3NwZW5kZXIAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAAAAABFleHBpcmF0aW9uX2xlZGdlcgAAAAAAAAQAAAAA","AAAAAAAAAJhSZXR1cm5zIHRoZSBiYWxhbmNlIG9mIGBpZGAuCgojIEFyZ3VtZW50cwoKKiBgaWRgIC0gVGhlIGFkZHJlc3MgZm9yIHdoaWNoIGEgYmFsYW5jZSBpcyBiZWluZyBxdWVyaWVkLiBJZiB0aGUKYWRkcmVzcyBoYXMgbm8gZXhpc3RpbmcgYmFsYW5jZSwgcmV0dXJucyAwLgAAAAdiYWxhbmNlAAAAAAEAAAAAAAAAAmlkAAAAAAATAAAAAQAAAAs=","AAAAAAAAAWRCdXJuIGBhbW91bnRgIGZyb20gYGZyb21gLgoKUmVkdWNlcyBmcm9tJ3MgYmFsYW5jZSBieSB0aGUgYW1vdW50LCB3aXRob3V0IHRyYW5zZmVycmluZyB0aGUgYmFsYW5jZQp0byBhbm90aGVyIGhvbGRlcidzIGJhbGFuY2UuCgojIEFyZ3VtZW50cwoKKiBgZnJvbWAgLSBUaGUgYWRkcmVzcyBob2xkaW5nIHRoZSBiYWxhbmNlIG9mIHRva2VucyB3aGljaCB3aWxsIGJlCmJ1cm5lZCBmcm9tLgoqIGBhbW91bnRgIC0gVGhlIGFtb3VudCBvZiB0b2tlbnMgdG8gYmUgYnVybmVkLgoKIyBFdmVudHMKCkVtaXRzIGFuIGV2ZW50IHdpdGggdG9waWNzIGBbImJ1cm4iLCBmcm9tOiBBZGRyZXNzXSwgZGF0YSA9IFthbW91bnQ6CmkxMjhdYAAAAARidXJuAAAAAgAAAAAAAAAEZnJvbQAAABMAAAAAAAAABmFtb3VudAAAAAAACwAAAAA=","AAAAAAAAAtxCdXJuIGBhbW91bnRgIGZyb20gYGZyb21gLCBjb25zdW1pbmcgdGhlIGFsbG93YW5jZSBvZiBgc3BlbmRlcmAuCgpSZWR1Y2VzIGZyb20ncyBiYWxhbmNlIGJ5IHRoZSBhbW91bnQsIHdpdGhvdXQgdHJhbnNmZXJyaW5nIHRoZSBiYWxhbmNlCnRvIGFub3RoZXIgaG9sZGVyJ3MgYmFsYW5jZS4KClRoZSBzcGVuZGVyIHdpbGwgYmUgYWxsb3dlZCB0byBidXJuIHRoZSBhbW91bnQgZnJvbSBmcm9tJ3MgYmFsYW5jZSwgaWYKdGhlIGFtb3VudCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGFsbG93YW5jZSB0aGF0IHRoZSBzcGVuZGVyIGhhcwpvbiB0aGUgZnJvbSdzIGJhbGFuY2UuIFRoZSBzcGVuZGVyJ3MgYWxsb3dhbmNlIG9uIGZyb20ncyBiYWxhbmNlIHdpbGwgYmUKcmVkdWNlZCBieSB0aGUgYW1vdW50LgoKIyBBcmd1bWVudHMKCiogYHNwZW5kZXJgIC0gVGhlIGFkZHJlc3MgYXV0aG9yaXppbmcgdGhlIGJ1cm4sIGFuZCBoYXZpbmcgaXRzIGFsbG93YW5jZQpjb25zdW1lZCBkdXJpbmcgdGhlIGJ1cm4uCiogYGZyb21gIC0gVGhlIGFkZHJlc3MgaG9sZGluZyB0aGUgYmFsYW5jZSBvZiB0b2tlbnMgd2hpY2ggd2lsbCBiZQpidXJuZWQgZnJvbS4KKiBgYW1vdW50YCAtIFRoZSBhbW91bnQgb2YgdG9rZW5zIHRvIGJlIGJ1cm5lZC4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJidXJuIiwgZnJvbTogQWRkcmVzc10sIGRhdGEgPSBbYW1vdW50OgppMTI4XWAAAAAJYnVybl9mcm9tAAAAAAAAAwAAAAAAAAAHc3BlbmRlcgAAAAATAAAAAAAAAARmcm9tAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAA==","AAAAAAAAAVNDbGF3YmFjayBgYW1vdW50YCBmcm9tIGBmcm9tYCBhY2NvdW50LiBgYW1vdW50YCBpcyBidXJuZWQgaW4gdGhlCmNsYXdiYWNrIHByb2Nlc3MuCgojIEFyZ3VtZW50cwoKKiBgZnJvbWAgLSBUaGUgYWRkcmVzcyBob2xkaW5nIHRoZSBiYWxhbmNlIGZyb20gd2hpY2ggdGhlIGNsYXdiYWNrIHdpbGwKdGFrZSB0b2tlbnMuCiogYGFtb3VudGAgLSBUaGUgYW1vdW50IG9mIHRva2VucyB0byBiZSBjbGF3ZWQgYmFjay4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJjbGF3YmFjayIsIGFkbWluOiBBZGRyZXNzLCB0bzogQWRkcmVzc10sCmRhdGEgPSBbYW1vdW50OiBpMTI4XWAAAAAACGNsYXdiYWNrAAAAAgAAAAAAAAAEZnJvbQAAABMAAAAAAAAABmFtb3VudAAAAAAACwAAAAA=","AAAAAAAAAIBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZGVjaW1hbHMgdXNlZCB0byByZXByZXNlbnQgYW1vdW50cyBvZiB0aGlzIHRva2VuLgoKIyBQYW5pY3MKCklmIHRoZSBjb250cmFjdCBoYXMgbm90IHlldCBiZWVuIGluaXRpYWxpemVkLgAAAAhkZWNpbWFscwAAAAAAAAABAAAABA==","AAAAAAAAAPVNaW50cyBgYW1vdW50YCB0byBgdG9gLgoKIyBBcmd1bWVudHMKCiogYHRvYCAtIFRoZSBhZGRyZXNzIHdoaWNoIHdpbGwgcmVjZWl2ZSB0aGUgbWludGVkIHRva2Vucy4KKiBgYW1vdW50YCAtIFRoZSBhbW91bnQgb2YgdG9rZW5zIHRvIGJlIG1pbnRlZC4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJtaW50IiwgYWRtaW46IEFkZHJlc3MsIHRvOiBBZGRyZXNzXSwgZGF0YQo9IFthbW91bnQ6IGkxMjhdYAAAAAAAAARtaW50AAAAAgAAAAAAAAACdG8AAAAAABMAAAAAAAAABmFtb3VudAAAAAAACwAAAAA=","AAAAAAAAAFlSZXR1cm5zIHRoZSBuYW1lIGZvciB0aGlzIHRva2VuLgoKIyBQYW5pY3MKCklmIHRoZSBjb250cmFjdCBoYXMgbm90IHlldCBiZWVuIGluaXRpYWxpemVkLgAAAAAAAARuYW1lAAAAAAAAAAEAAAAQ","AAAAAAAAAQxTZXRzIHRoZSBhZG1pbmlzdHJhdG9yIHRvIHRoZSBzcGVjaWZpZWQgYWRkcmVzcyBgbmV3X2FkbWluYC4KCiMgQXJndW1lbnRzCgoqIGBuZXdfYWRtaW5gIC0gVGhlIGFkZHJlc3Mgd2hpY2ggd2lsbCBoZW5jZWZvcnRoIGJlIHRoZSBhZG1pbmlzdHJhdG9yCm9mIHRoaXMgdG9rZW4gY29udHJhY3QuCgojIEV2ZW50cwoKRW1pdHMgYW4gZXZlbnQgd2l0aCB0b3BpY3MgYFsic2V0X2FkbWluIiwgYWRtaW46IEFkZHJlc3NdLCBkYXRhID0KW25ld19hZG1pbjogQWRkcmVzc11gAAAACXNldF9hZG1pbgAAAAAAAAEAAAAAAAAACW5ld19hZG1pbgAAAAAAABMAAAAA","AAAAAAAAAEZSZXR1cm5zIHRoZSBhZG1pbiBvZiB0aGUgY29udHJhY3QuCgojIFBhbmljcwoKSWYgdGhlIGFkbWluIGlzIG5vdCBzZXQuAAAAAAAFYWRtaW4AAAAAAAAAAAAAAQAAABM=","AAAAAAAAAVBTZXRzIHdoZXRoZXIgdGhlIGFjY291bnQgaXMgYXV0aG9yaXplZCB0byB1c2UgaXRzIGJhbGFuY2UuIElmCmBhdXRob3JpemVkYCBpcyB0cnVlLCBgaWRgIHNob3VsZCBiZSBhYmxlIHRvIHVzZSBpdHMgYmFsYW5jZS4KCiMgQXJndW1lbnRzCgoqIGBpZGAgLSBUaGUgYWRkcmVzcyBiZWluZyAoZGUtKWF1dGhvcml6ZWQuCiogYGF1dGhvcml6ZWAgLSBXaGV0aGVyIG9yIG5vdCBgaWRgIGNhbiB1c2UgaXRzIGJhbGFuY2UuCgojIEV2ZW50cwoKRW1pdHMgYW4gZXZlbnQgd2l0aCB0b3BpY3MgYFsic2V0X2F1dGhvcml6ZWQiLCBpZDogQWRkcmVzc10sIGRhdGEgPQpbYXV0aG9yaXplOiBib29sXWAAAAAOc2V0X2F1dGhvcml6ZWQAAAAAAAIAAAAAAAAAAmlkAAAAAAATAAAAAAAAAAlhdXRob3JpemUAAAAAAAABAAAAAA==","AAAAAAAAAFtSZXR1cm5zIHRoZSBzeW1ib2wgZm9yIHRoaXMgdG9rZW4uCgojIFBhbmljcwoKSWYgdGhlIGNvbnRyYWN0IGhhcyBub3QgeWV0IGJlZW4gaW5pdGlhbGl6ZWQuAAAAAAZzeW1ib2wAAAAAAAAAAAABAAAAEA==","AAAAAAAAAWRUcmFuc2ZlciBgYW1vdW50YCBmcm9tIGBmcm9tYCB0byBgdG9gLgoKIyBBcmd1bWVudHMKCiogYGZyb21gIC0gVGhlIGFkZHJlc3MgaG9sZGluZyB0aGUgYmFsYW5jZSBvZiB0b2tlbnMgd2hpY2ggd2lsbCBiZQp3aXRoZHJhd24gZnJvbS4KKiBgdG9gIC0gVGhlIGFkZHJlc3Mgd2hpY2ggd2lsbCByZWNlaXZlIHRoZSB0cmFuc2ZlcnJlZCB0b2tlbnMuCiogYGFtb3VudGAgLSBUaGUgYW1vdW50IG9mIHRva2VucyB0byBiZSB0cmFuc2ZlcnJlZC4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJ0cmFuc2ZlciIsIGZyb206IEFkZHJlc3MsIHRvOiBBZGRyZXNzXSwKZGF0YSA9IFthbW91bnQ6IGkxMjhdYAAAAAh0cmFuc2ZlcgAAAAMAAAAAAAAABGZyb20AAAATAAAAAAAAAAJ0bwAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAA==","AAAAAAAAAzNUcmFuc2ZlciBgYW1vdW50YCBmcm9tIGBmcm9tYCB0byBgdG9gLCBjb25zdW1pbmcgdGhlIGFsbG93YW5jZSB0aGF0CmBzcGVuZGVyYCBoYXMgb24gYGZyb21gJ3MgYmFsYW5jZS4gQXV0aG9yaXplZCBieSBzcGVuZGVyCihgc3BlbmRlci5yZXF1aXJlX2F1dGgoKWApLgoKVGhlIHNwZW5kZXIgd2lsbCBiZSBhbGxvd2VkIHRvIHRyYW5zZmVyIHRoZSBhbW91bnQgZnJvbSBmcm9tJ3MgYmFsYW5jZQppZiB0aGUgYW1vdW50IGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgYWxsb3dhbmNlIHRoYXQgdGhlIHNwZW5kZXIKaGFzIG9uIHRoZSBmcm9tJ3MgYmFsYW5jZS4gVGhlIHNwZW5kZXIncyBhbGxvd2FuY2Ugb24gZnJvbSdzIGJhbGFuY2UKd2lsbCBiZSByZWR1Y2VkIGJ5IHRoZSBhbW91bnQuCgojIEFyZ3VtZW50cwoKKiBgc3BlbmRlcmAgLSBUaGUgYWRkcmVzcyBhdXRob3JpemluZyB0aGUgdHJhbnNmZXIsIGFuZCBoYXZpbmcgaXRzCmFsbG93YW5jZSBjb25zdW1lZCBkdXJpbmcgdGhlIHRyYW5zZmVyLgoqIGBmcm9tYCAtIFRoZSBhZGRyZXNzIGhvbGRpbmcgdGhlIGJhbGFuY2Ugb2YgdG9rZW5zIHdoaWNoIHdpbGwgYmUKd2l0aGRyYXduIGZyb20uCiogYHRvYCAtIFRoZSBhZGRyZXNzIHdoaWNoIHdpbGwgcmVjZWl2ZSB0aGUgdHJhbnNmZXJyZWQgdG9rZW5zLgoqIGBhbW91bnRgIC0gVGhlIGFtb3VudCBvZiB0b2tlbnMgdG8gYmUgdHJhbnNmZXJyZWQuCgojIEV2ZW50cwoKRW1pdHMgYW4gZXZlbnQgd2l0aCB0b3BpY3MgYFsidHJhbnNmZXIiLCBmcm9tOiBBZGRyZXNzLCB0bzogQWRkcmVzc10sCmRhdGEgPSBbYW1vdW50OiBpMTI4XWAAAAAADXRyYW5zZmVyX2Zyb20AAAAAAAAEAAAAAAAAAAdzcGVuZGVyAAAAABMAAAAAAAAABGZyb20AAAATAAAAAAAAAAJ0bwAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAA=="]),i);this.options=i}fromJSON={allowance:this.txFromJSON,authorized:this.txFromJSON,approve:this.txFromJSON,balance:this.txFromJSON,burn:this.txFromJSON,burn_from:this.txFromJSON,clawback:this.txFromJSON,decimals:this.txFromJSON,mint:this.txFromJSON,name:this.txFromJSON,set_admin:this.txFromJSON,admin:this.txFromJSON,set_authorized:this.txFromJSON,symbol:this.txFromJSON,transfer:this.txFromJSON,transfer_from:this.txFromJSON}};var gl=100,ll=180,Co=class{constructor(n,i){this.nodeRpcUrlsConfig=n;this.params=i}async buildChangeTrustLineXdrTx(n){let o=await new ie.Horizon.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")).loadAccount(n.sender),s=await this.getContract(_i,n.tokenAddress).name();if(Qn(s))throw new B;let d=On(s);if(!d)throw new B;let[c,A]=d.split(":");if(c===void 0||A===void 0)throw new B("Invalid token name format. Expected format 'symbol:srbTokenAddress'");let g=new ie.Asset(c,A),l=ie.Operation.changeTrust({asset:g,limit:n.limit});return new ie.TransactionBuilder(o,{fee:gl.toString(10),networkPassphrase:this.params.sorobanNetworkPassphrase}).addOperation(l).setTimeout(ll).build().toXDR()}async getBalanceLine(n,i){let r=await this.getContract(_i,i).name();if(Qn(r))throw new B;let s=On(r);if(!s)throw new B;let[d,c]=s.split(":"),A=this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR");return(await new ie.Horizon.Server(A).loadAccount(n)).balances.find(I=>(I.asset_type==="credit_alphanum4"||I.asset_type==="credit_alphanum12")&&I.asset_code==d&&I.asset_issuer==c)}async submitTransactionStellar(n){let i=new ie.Horizon.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")),o=ie.TransactionBuilder.fromXDR(n,this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR"));return await i.submitTransaction(o)}async simulateAndCheckRestoreTxRequiredSoroban(n,i){let o=new ie.rpc.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),r=await o.getAccount(i),s=ie.TransactionBuilder.fromXDR(n,this.params.sorobanNetworkPassphrase),d=await o.simulateTransaction(s);if(ie.rpc.Api.isSimulationRestore(d))return new ie.TransactionBuilder(r,{fee:(+ie.BASE_FEE+ +d.restorePreamble.minResourceFee).toString(),networkPassphrase:this.params.sorobanNetworkPassphrase}).setSorobanData(d.restorePreamble.transactionData.build()).addOperation(ie.Operation.restoreFootprint({})).setTimeout(ie.TimeoutInfinite).build().toXDR()}async sendTransactionSoroban(n){let i=new ie.rpc.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),o=ie.TransactionBuilder.fromXDR(n,this.params.sorobanNetworkPassphrase);return i.sendTransaction(o)}async confirmTx(n,i=15){let o=new ie.rpc.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),r=await as(()=>o.getTransaction(n),d=>d.status===ie.rpc.Api.GetTransactionStatus.NOT_FOUND,i);if(r.length===0)throw new B("No transaction responses found.");let s=r[r.length-1];if(!s)throw new B("Unexpected error: last response is undefined.");return s}getContract(n,i){let o={contractId:i,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new n(o)}};var bo=class{constructor(n,i){this.nodeRpcUrlsConfig=n;this.api=i}_suiBridgeService;async buildSendTxFromCustomTx(n,i,o){return this.suiBridgeService.buildRawTransactionSendFromCustomTx(n,i,o)}get suiBridgeService(){return this._suiBridgeService||(this._suiBridgeService=new zn(this.nodeRpcUrlsConfig,this.api)),this._suiBridgeService}};var Io=class{constructor(n){this.service=n;this.srb=new Co(n.nodeRpcUrlsConfig,n.params),this.sol=new po(n.nodeRpcUrlsConfig,n.params),this.sui=new bo(n.nodeRpcUrlsConfig,n.api),this.evm=new mo(n.nodeRpcUrlsConfig,n.params),this.alg=new so(n.nodeRpcUrlsConfig)}srb;sol;sui;evm;alg};var wt=(i=>(i.WITH_NATIVE_CURRENCY="native",i.WITH_STABLECOIN="stablecoin",i))(wt||{}),Ci=(i=>(i.INT="int",i.FLOAT="float",i))(Ci||{});var ue=require("big.js");var $i=class{constructor(n){this.nodeRpcUrls=n}getNodeRpcUrl(n){let i=this.nodeRpcUrls[n];if(i!==void 0)return i;throw new ci(n)}},yo=class{constructor(n,i=oi){this.nodeRpcUrlsConfig=n;L.addChainsProperties(i.additionalChainsProperties);let o=new $n(i),r=new qn(o),s=new ei(r),d=new ni(s);this.api=new ti(d,i),this.tokenService=new ii(this.api,n,i),this.bridge=new Ja(this.api,n,i,this.tokenService),this.pool=new io(this.api,n,i,this.tokenService),this.yield=new ro(this.api,n,i,this.tokenService),this.params=i}api;tokenService;params;bridge;pool;yield;async chainDetailsMap(n){return this.api.getChainDetailsMap(n)}async tokens(n){return this.api.tokens(n)}async tokensByChain(n,i){let r=(await this.api.getChainDetailsMap(i))[n];return r?r.tokens:[]}async getTransferStatus(n,i){return this.api.getTransferStatus(n,i)}async getGasBalance(n,i){return this.api.getGasBalance(n,i)}async checkAddress(){return new Promise(n=>{n({status:"OK",gasBalance:null})})}async getPendingStatusInfo(n,i,o,r){H(n);let s;i=="float"?(z("amount",n,o.decimals),s=V(n,o.decimals).toFixed()):s=n;let d=Rt(s,o,await me(this.api,o)),c=await me(this.api,r),A=this.getAmountFromVUsdFormatted(d,r,c),g,l=await this.api.getPendingInfo();for(let m in l[r.chainSymbol]){let I=l[r.chainSymbol];if(!I)throw new B("Cannot find pending info for "+r.chainSymbol);g=I[m]}if(g){let m=ss(g.totalSentAmount,c),I=this.getAmountFromVUsdFormatted(d,r,m),h;return(0,ue.Big)(I.int).gt(A.int)?h={min:A,max:I}:h={min:I,max:A},{pendingTxs:g.pendingTxs,pendingAmount:{int:Ue(g.totalSentAmount,3,r.decimals).toFixed(0),float:S(g.totalSentAmount,3).toFixed()},estimatedAmount:h}}return{pendingTxs:0,pendingAmount:{int:"0",float:"0"},estimatedAmount:{min:A,max:A}}}async getTokenBalance(n,i){return this.tokenService.getTokenBalance(n,i)}async getNativeTokenBalance(n,i){return this.tokenService.getNativeTokenBalance(n,i)}async calculateFeePercentOnSourceChain(n,i){H(n),z("amountFloat",n,i.decimals);let o=V(n,i.decimals);if(o.eq(0))return 0;let r=Rt(o,i,await me(this.api,i)),s=Je(r,i.decimals);return Yo(o,s)}async calculateFeePercentOnDestinationChain(n,i,o){H(n),z("amountFloat",n,i.decimals);let r=V(n,i.decimals);if(r.eq(0))return 0;let s=Rt(r,i,await me(this.api,i)),d=mi(s,o,await me(this.api,o)),c=Je(s,o.decimals);return Yo(c,d)}async getAmountToBeReceivedAndGasFeeOptions(n,i,o,r){return H(n),z("amountToSendFloat",n,i.decimals),{amountToSendFloat:(0,ue.Big)(n).toFixed(),amountToBeReceivedFloat:await this.getAmountToBeReceived(n,i,o,r),gasFeeOptions:await this.getGasFeeOptions(i,o,r)}}async getAmountToSendAndGasFeeOptions(n,i,o,r){return H(n),z("amountToBeReceivedFloat",n,o.decimals),{amountToSendFloat:await this.getAmountToSend(n,i,o,r),amountToBeReceivedFloat:(0,ue.Big)(n).toFixed(),gasFeeOptions:await this.getGasFeeOptions(i,o,r)}}async getAmountToBeReceived(n,i,o,r){return this.getAmountToBeReceivedCompute(n,i,o,r,async()=>await me(this.api,i),async()=>await me(this.api,o))}async getAmountToBeReceivedFromChain(n,i,o,r,s,d){return this.getAmountToBeReceivedCompute(n,i,o,r,async()=>await this.pool.getPoolInfoFromChain(i,s),async()=>await this.pool.getPoolInfoFromChain(o,d))}async getAmountToBeReceivedCompute(n,i,o,r=1,s,d){switch(r){case 1:case 2:return this.getAmountToBeReceivedComputeWithPools(n,i,o,await s(),await d());case 3:case 4:return this.getAmountToBeReceivedComputeCctp(n,i,o,r);case 5:return this.getAmountToBeReceivedComputeOft(n,i,o)}}getAmountToBeReceivedComputeWithPools(n,i,o,r,s){H(n),z("amountToSendFloat",n,i.decimals);let d=V(n,i.decimals),c=Rt(d,i,r);return this.getAmountFromVUsdFormatted(c,o,s).float}getAmountToBeReceivedComputeCctp(n,i,o,r){H(n),z("amountToSendFloat",n,i.decimals);let s=V(n,i.decimals);switch(r){case 3:{if(!i.cctpAddress||!o.cctpAddress||!i.cctpFeeShare)throw new he("Such route does not support CCTP protocol");let d=s.mul((0,ue.Big)(1).minus(i.cctpFeeShare)).round(0,ue.Big.roundUp),c=Ue(d,i.decimals,o.decimals).round(0);return S(c,o.decimals).toFixed()}case 4:{if(!i.cctpV2Address||!o.cctpV2Address||!i.cctpV2FeeShare)throw new he("Such route does not support CCTP V2 protocol");let d=s.mul((0,ue.Big)(1).minus(i.cctpV2FeeShare)).round(0,ue.Big.roundUp),c=Ue(d,i.decimals,o.decimals).round(0);return S(c,o.decimals).toFixed()}}}async getAmountToBeReceivedComputeOft(n,i,o){H(n),z("amountToSendFloat",n,i.decimals);let r=V(n,i.decimals);if(!i.oftBridgeAddress||!o.oftBridgeAddress||i.oftId!==o.oftId)throw new ve("Such route does not support OFT protocol");let{adminFeeShareWithExtras:s}=await this.api.getReceiveTransactionCost({sourceChainId:i.allbridgeChainId,destinationChainId:o.allbridgeChainId,messenger:5,sourceToken:i.tokenAddress});if(!s)throw new ve("Such route does not support OFT protocol");let d=r.mul((0,ue.Big)(1).minus(s)).round(0,ue.Big.roundUp),c=Ue(d,i.decimals,o.decimals).round(0);return S(c,o.decimals).toFixed()}async getAmountToSend(n,i,o,r){return this.getAmountToSendCompute(n,i,o,r,()=>me(this.api,i),()=>me(this.api,o))}async getAmountToSendFromChain(n,i,o,r,s,d){return this.getAmountToSendCompute(n,i,o,r,()=>this.pool.getPoolInfoFromChain(i,s),()=>this.pool.getPoolInfoFromChain(o,d))}async getAmountToSendCompute(n,i,o,r=1,s,d){switch(r){case 1:case 2:return this.getAmountToSendComputeWithPools(n,i,o,await s(),await d());case 3:case 4:return this.getAmountToSendComputeCctp(n,i,o,r);case 5:return this.getAmountToSendComputeOft(n,i,o)}}getAmountToSendComputeWithPools(n,i,o,r,s){H(n),z("amountToBeReceivedFloat",n,o.decimals);let d=V(n,o.decimals),c=cs(d,o,s),A=ds(c,i,r);if((0,ue.Big)(A).lte(0))throw new vt;return S(A,i.decimals).toFixed()}getAmountToSendComputeCctp(n,i,o,r){H(n),z("amountToBeReceivedFloat",n,o.decimals);let s=V(n,o.decimals);switch(r){case 3:{if(!i.cctpAddress||!o.cctpAddress||!i.cctpFeeShare)throw new he("Such route does not support CCTP protocol");let d=s.div((0,ue.Big)(1).minus(i.cctpFeeShare)).round(0,ue.Big.roundDown),c=Ue(d,o.decimals,i.decimals).round(0);return S(c,i.decimals).toFixed()}case 4:{if(!i.cctpV2Address||!o.cctpV2Address||!i.cctpV2FeeShare)throw new he("Such route does not support CCTP V2 protocol");let d=s.div((0,ue.Big)(1).minus(i.cctpV2FeeShare)).round(0,ue.Big.roundDown),c=Ue(d,o.decimals,i.decimals).round(0);return S(c,i.decimals).toFixed()}}}async getAmountToSendComputeOft(n,i,o){H(n),z("amountToBeReceivedFloat",n,o.decimals);let r=V(n,o.decimals);if(!i.oftId||!o.oftId||!i.oftBridgeAddress||i.oftId!==o.oftId)throw new ve("Such route does not support OFT protocol");let{adminFeeShareWithExtras:s}=await this.api.getReceiveTransactionCost({sourceChainId:i.allbridgeChainId,destinationChainId:o.allbridgeChainId,messenger:5,sourceToken:i.tokenAddress});if(!s)throw new ve("Such route does not support OFT protocol");let d=r.div((0,ue.Big)(1).minus(s)).round(0,ue.Big.roundDown),c=Ue(d,o.decimals,i.decimals).round(0);return S(c,i.decimals).toFixed()}async getGasFeeOptions(n,i,o){return Go(n,i.allbridgeChainId,o,this.api)}getAverageTransferTime(n,i,o){return n.transferTime?.[i.chainSymbol]?.[o]??null}async getPoolInfoByToken(n){return await this.api.getPoolInfoByKey({chainSymbol:n.chainSymbol,poolAddress:n.poolAddress})}async refreshPoolInfo(n){if(n){let o=(n instanceof Array?n:[n]).map(r=>({chainSymbol:r.chainSymbol,poolAddress:r.poolAddress}));return this.api.refreshPoolInfo(o)}return this.api.refreshPoolInfo()}aprInPercents(n){return gs(n)}async getExtraGasMaxLimits(n,i,o){return await Fo(n,i,o,this.api)}async getVUsdFromAmount(n,i,o){H(n);let r;i=="float"?(z("amount",n,o.decimals),r=V(n,o.decimals).toFixed()):r=n;let s=Rt(r,o,await me(this.api,o));return{int:s,float:S(s,3).toFixed()}}async getAmountFromVUsd(n,i){return this.getAmountFromVUsdFormatted(n,i,await me(this.api,i))}getAmountFromVUsdFormatted(n,i,o){H(n);let r=mi(n,i,o);if((0,ue.Big)(r).lt(0))throw new vt;return{int:r,float:S(r,i.decimals).toFixed()}}async swapAndBridgeFeeCalculation(n,i,o){return pc(n,{decimals:i.decimals,feeShare:i.feeShare,poolInfo:await me(this.api,i)},{decimals:o.decimals,feeShare:o.feeShare,poolInfo:await me(this.api,o)})}async swapAndBridgeFeeCalculationReverse(n,i,o){let r=Cc(n,{decimals:i.decimals,feeShare:i.feeShare,poolInfo:await me(this.api,i)},{decimals:o.decimals,feeShare:o.feeShare,poolInfo:await me(this.api,o)}),s=r.swapFromVUsdCalcResult.amountIncludingCommissionInTokenPrecision;if((0,ue.Big)(s).lt(0))throw new vt;return r}async getSendAmountDetails(n,i,o,r){H(n);let s;return i=="float"?(z("amount",n,o.decimals),s=V(n,o.decimals).toFixed()):s=n,bc(s,o,await me(this.api,o),r,await me(this.api,r))}};function ul(a){return"solanaRpcUrl"in a}var ts=class{params;bridge;pool;yield;utils;service;constructor(n,i=oi){let o;ul(n)?o=new $i({SOL:n.solanaRpcUrl,TRX:n.tronRpcUrl}):o=new $i(n),this.service=new yo(o,i),this.bridge=this.service.bridge,this.pool=this.service.pool,this.yield=this.service.yield,this.utils=new Io(this.service),this.params=i}async chainDetailsMap(n="swap"){return this.service.chainDetailsMap(n)}async tokens(n="swap"){return this.service.tokens(n)}async tokensByChain(n,i="swap"){return this.service.tokensByChain(n,i)}async getTransferStatus(n,i){return this.service.getTransferStatus(n,i)}async getGasBalance(n,i){return this.service.getGasBalance(n,i)}async checkAddress(n,i,o){return await this.service.checkAddress()}async getPendingStatusInfo(n,i,o,r){return this.service.getPendingStatusInfo(n,i,o,r)}async getTokenBalance(n,i){return this.service.getTokenBalance(n,i)}async getNativeTokenBalance(n,i){return this.service.getNativeTokenBalance(n,i)}async calculateFeePercentOnSourceChain(n,i){return this.service.calculateFeePercentOnSourceChain(n,i)}async calculateFeePercentOnDestinationChain(n,i,o){return this.service.calculateFeePercentOnDestinationChain(n,i,o)}async getAmountToBeReceivedAndGasFeeOptions(n,i,o,r){return this.service.getAmountToBeReceivedAndGasFeeOptions(n,i,o,r)}async getAmountToSendAndGasFeeOptions(n,i,o,r){return this.service.getAmountToSendAndGasFeeOptions(n,i,o,r)}async getAmountToBeReceived(n,i,o,r=1){return this.service.getAmountToBeReceived(n,i,o,r)}async getAmountToBeReceivedFromChain(n,i,o,r=1,s,d){return this.service.getAmountToBeReceivedFromChain(n,i,o,r,s,d)}getAmountToBeReceivedFromPools(n,i,o,r,s,d=1){switch(d){case 1:case 2:return this.service.getAmountToBeReceivedComputeWithPools(n,i,o,r,s);case 3:case 4:return this.service.getAmountToBeReceivedComputeCctp(n,i,o,d)}}async getAmountToSend(n,i,o,r=1){return this.service.getAmountToSend(n,i,o,r)}async getAmountToSendFromChain(n,i,o,r=1,s,d){return this.service.getAmountToSendFromChain(n,i,o,r,s,d)}getAmountToSendFromPools(n,i,o,r,s,d=1){switch(d){case 1:case 2:return this.service.getAmountToSendComputeWithPools(n,i,o,r,s);case 3:case 4:return this.service.getAmountToSendComputeCctp(n,i,o,d)}}async getGasFeeOptions(n,i,o){return this.service.getGasFeeOptions(n,i,o)}getAverageTransferTime(n,i,o){return this.service.getAverageTransferTime(n,i,o)}async getPoolInfoByToken(n){return this.service.getPoolInfoByToken(n)}async refreshPoolInfo(n){return this.service.refreshPoolInfo(n)}aprInPercents(n){return this.service.aprInPercents(n)}async getExtraGasMaxLimits(n,i,o=1){return this.service.getExtraGasMaxLimits(n,i,o)}async getVUsdFromAmount(n,i,o){return this.service.getVUsdFromAmount(n,i,o)}async getAmountFromVUsd(n,i){return this.service.getAmountFromVUsd(n,i)}async swapAndBridgeFeeCalculation(n,i,o){return this.service.swapAndBridgeFeeCalculation(n,i,o)}async swapAndBridgeFeeCalculationReverse(n,i,o){return this.service.swapAndBridgeFeeCalculationReverse(n,i,o)}async getSendAmountDetails(n,i,o,r){return this.service.getSendAmountDetails(n,i,o,r)}};0&&(module.exports={AddressStatus,AllbridgeCoreSdk,AmountFormat,AmountNotEnoughError,ArgumentInvalidDecimalsError,CCTPDoesNotSupportedError,ChainSymbol,ChainType,ErrorCode,ExtraGasMaxLimitExceededError,FeePaymentMethod,InsufficientPoolLiquidityError,InvalidAmountError,InvalidGasFeePaymentOptionError,InvalidMessengerOptionError,InvalidTxError,JupiterError,Messenger,MethodNotSupportedError,NodeRpcUrlNotInitializedError,OFTDoesNotSupportedError,SdkError,SdkRootError,SolanaAutoTxFee,TimeoutError,TxTooLargeError,VerifyTxError,YieldDoesNotSupportedError,assertYieldIsSupported,isYieldSupported,mainnet,nodeRpcUrlsDefault,nodeUrlsDefault});
|
|
7
7
|
//# sourceMappingURL=index.js.map
|