├── .gitignore ├── .dockerignore ├── tests ├── common.rs └── eval_test.rs ├── src ├── lib.rs ├── main.rs ├── js_server.rs ├── http_service.rs ├── client.rs └── js_engine.rs ├── proto └── ateles.proto ├── Cargo.toml ├── Dockerfile ├── js ├── map.js ├── rewrite_anon_fun.js └── escodegen.js ├── README.md ├── LICENSE └── Cargo.lock /.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | -------------------------------------------------------------------------------- /.dockerignore: -------------------------------------------------------------------------------- 1 | target/ 2 | .git/ -------------------------------------------------------------------------------- /tests/common.rs: -------------------------------------------------------------------------------- 1 | use std::sync::Once; 2 | 3 | use fortuna::init_v8; 4 | 5 | static INIT: Once = Once::new(); 6 | 7 | pub fn setup() { 8 | INIT.call_once(|| init_v8()); 9 | } 10 | -------------------------------------------------------------------------------- /src/lib.rs: -------------------------------------------------------------------------------- 1 | pub mod http_service; 2 | pub mod js_engine; 3 | pub mod js_server; 4 | 5 | pub use http_service::*; 6 | pub use js_engine::init as init_v8; 7 | pub use js_engine::*; 8 | 9 | pub use js_server::create_js_env; 10 | -------------------------------------------------------------------------------- /proto/ateles.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package ateles; 3 | 4 | service Ateles { 5 | rpc Execute(stream JSRequest) returns (stream JSResponse) {} 6 | } 7 | 8 | 9 | message JSRequest { 10 | enum Action { 11 | REWRITE = 0; 12 | EVAL = 1; 13 | CALL = 2; 14 | } 15 | Action action = 1; 16 | string script = 2; 17 | repeated string args = 3; 18 | int32 timeout = 4; 19 | } 20 | 21 | 22 | message JSResponse { 23 | int32 status = 1; 24 | string result = 2; 25 | } 26 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "fortuna" 3 | version = "0.1.0" 4 | authors = ["Garren Smith "] 5 | edition = "2018" 6 | license = "Apache 2.0" 7 | 8 | # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html 9 | 10 | [dependencies] 11 | rusty_v8 = "0.4.2" 12 | prost = "0.6.1" 13 | tonic = "0.1.1" 14 | hyper = "0.13" 15 | tokio = { version = "0.2", features = ["full"] } 16 | futures-util = "0.3.4" 17 | crossbeam = "0.7.3" 18 | reqwest = "0.10.4" 19 | futures = "0.3.4" 20 | 21 | [build-dependencies] 22 | tonic-build = "0.1.1" 23 | 24 | [[bin]] 25 | name = "client" 26 | path = "src/client.rs" 27 | 28 | -------------------------------------------------------------------------------- /src/main.rs: -------------------------------------------------------------------------------- 1 | use fortuna::{create_server, init_v8}; 2 | 3 | async fn shutdown_signal() { 4 | // Wait for the CTRL+C signal 5 | tokio::signal::ctrl_c() 6 | .await 7 | .expect("failed to install CTRL+C signal handler"); 8 | } 9 | 10 | #[tokio::main(core_threads = 6)] 11 | async fn main() -> Result<(), Box> { 12 | init_v8(); 13 | let addr = "127.0.0.1:8444".parse().unwrap(); 14 | let server = create_server(&addr); 15 | 16 | println!("Listening on http://{}", addr); 17 | 18 | // server.await?; 19 | 20 | let graceful = server.with_graceful_shutdown(shutdown_signal()); 21 | 22 | // Run this server for... forever! 23 | if let Err(e) = graceful.await { 24 | eprintln!("server error: {}", e); 25 | } 26 | 27 | Ok(()) 28 | } 29 | -------------------------------------------------------------------------------- /tests/eval_test.rs: -------------------------------------------------------------------------------- 1 | use fortuna::*; 2 | mod common; 3 | 4 | #[test] 5 | fn simple_evals() { 6 | // using common code. 7 | common::setup(); 8 | 9 | let js_env = JSEnv::new(); 10 | let mut instance = js_env.create_isolate(); 11 | 12 | let script = "var x = 2; x;"; 13 | let result = instance.eval(script, &[]); 14 | assert_eq!(result, "2"); 15 | 16 | let script = "var y = 3; y;"; 17 | let result = instance.eval(script, &[]); 18 | assert_eq!(result, "3"); 19 | 20 | let script = "let my_fn = () => \"hello\"; my_fn();"; 21 | let result = instance.eval(script, &[]); 22 | assert_eq!(result, "\"hello\""); 23 | } 24 | 25 | #[test] 26 | fn eval_and_call() { 27 | common::setup(); 28 | 29 | let js_env = JSEnv::new(); 30 | let mut instance = js_env.create_isolate(); 31 | 32 | let script = "function double(x) {return x * 2;};"; 33 | let result = instance.eval(script, &[]); 34 | assert_eq!(result, "null"); 35 | 36 | let call_result = instance.call("double", &["2".to_string()]); 37 | assert_eq!(call_result, "4"); 38 | } 39 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM registry.access.redhat.com/ubi8/ubi-minimal as builder 2 | USER root 3 | 4 | ENV RUSTUP_HOME=/usr/local/rustup \ 5 | CARGO_HOME=/usr/local/cargo \ 6 | PATH=/usr/local/cargo/bin:$PATH \ 7 | RUST_VERSION=1.50.0 8 | 9 | # Apply security patches 10 | RUN set -xe; \ 11 | microdnf update -y && \ 12 | microdnf clean all && rm -rf /var/cache/yum && \ 13 | microdnf install gcc-c++ gcc openssl openssl-devel python2 14 | 15 | RUN set -xue; \ 16 | curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs > rustup.sh; \ 17 | chmod +x ./rustup.sh && \ 18 | ./rustup.sh -v --no-modify-path --default-toolchain ${RUST_VERSION} -y --profile minimal && \ 19 | chmod -R a+w $RUSTUP_HOME $CARGO_HOME; \ 20 | rustup --version; \ 21 | cargo --version; \ 22 | rustc --version; \ 23 | rustup component add rustfmt 24 | 25 | WORKDIR /src 26 | COPY . . 27 | 28 | RUN cargo install --path . 29 | 30 | FROM registry.access.redhat.com/ubi8/ubi-minimal 31 | # Apply security patches 32 | RUN set -xe; \ 33 | microdnf update -y && \ 34 | microdnf clean all && rm -rf /var/cache/yum 35 | 36 | COPY --from=builder /usr/local/cargo/bin/fortuna /usr/local/bin/fortuna 37 | USER 1001 38 | CMD ["fortuna"] 39 | -------------------------------------------------------------------------------- /js/map.js: -------------------------------------------------------------------------------- 1 | // let lib = {}; 2 | // let map_funs = []; 3 | // 4 | // function init(libJSON, mapFunsJSON) { 5 | // try { 6 | // lib = JSON.parse(libJSON); 7 | // } catch (ex) { 8 | // const ret = {"error": "invalid_library", "reason": ex.toString()}; 9 | // return JSON.stringify(ret); 10 | // } 11 | // 12 | // try { 13 | // mapFuns = Array.from(JSON.parse(mapFunsJSON), (source) => { 14 | // return eval(source) 15 | // }) 16 | // } catch (ex) { 17 | // const ret = {"error": "invalid_map_functions", "reason": ex.toString()}; 18 | // return JSON.stringify(ret); 19 | // } 20 | // 21 | // return true; 22 | // } 23 | // 24 | // let doc_results = []; 25 | // 26 | // function emit(key, value) { 27 | // doc_results.push([key, value]); 28 | // } 29 | // 30 | // function mapEach(mapFun, doc) { 31 | // try { 32 | // doc_results = []; 33 | // mapFun(doc); 34 | // return doc_results; 35 | // } catch (ex) { 36 | // return ex.toString(); 37 | // } 38 | // }; 39 | // 40 | // function mapDoc(docJSON) { 41 | // const doc = JSON.parse(docJSON); 42 | // const mapResults = Array.from(mapFuns, (mapFun) => { 43 | // return mapEach(mapFun, doc); 44 | // }); 45 | // 46 | // return mapResults; 47 | // } 48 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Fortuna-rs 2 | 3 | A javascript view engine for CouchDB 4.x written in Rust using Google V8. 4 | 5 | It follows the [Ateles](https://github.com/cloudant-labs/ateles) protocol. 6 | 7 | ## Usage With CouchDB 8 | 9 | Install [FoundationDB](https://apple.github.io/foundationdb/downloads.html) 10 | Install [CouchDB dependancies](https://github.com/apache/couchdb/blob/prototype/fdn/INSTALL.Unix.md) 11 | Setup CouchDB: 12 | ``` 13 | git clone https://github.com/apache/couchdb.git 14 | git checkout -t origin/prototype/fdb-layer 15 | 16 | ``` 17 | Add: 18 | ``` 19 | {ateles, {url, "https://github.com/cloudant-labs/ateles"}, {branch, "master"}} 20 | ``` 21 | to the third party deps in `rebar.config.script`. 22 | Then in `[couch_eval.languages]` in `rel/overlay/etc/default.ini` set `javascript = ateles`. 23 | In `rel/reltool.config` add `ateles` to the list. 24 | 25 | run `./configure --dev` 26 | Finally in the CouchDB repo run `make && dev/run -n 1 -a adm:pass` to start CouchDB. 27 | 28 | 29 | In the Fortuna-rs repo run: 30 | ``` 31 | cargo run --release --bin fortuna. 32 | ``` 33 | 34 | Create documents and design docs and watch Fortuna help index them. 35 | 36 | ## Benchmarking 37 | 38 | `client.rs` can be used to run benchmarks against Fortuna-rs. 39 | You can configure the number of total requests, simultaneous requests and the 40 | number of docs to map. 41 | 42 | To run: 43 | 44 | ``` 45 | $ cargo run --release --bin client 46 | ``` -------------------------------------------------------------------------------- /js/rewrite_anon_fun.js: -------------------------------------------------------------------------------- 1 | // Licensed under the Apache License, Version 2.0 (the "License"); you may not 2 | // use this file except in compliance with the License. You may obtain a copy of 3 | // the License at 4 | // 5 | // http://www.apache.org/licenses/LICENSE-2.0 6 | // 7 | // Unless required by applicable law or agreed to in writing, software 8 | // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 9 | // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 10 | // License for the specific language governing permissions and limitations under 11 | // the License. 12 | // 13 | // Based on the normalizeFunction which can be 14 | // found here: 15 | // 16 | // https://github.com/dmunch/couch-chakra/blob/master/js/normalizeFunction.js 17 | 18 | function rewriteFunInt(fun) { 19 | const ast = esprima.parse(fun); 20 | let idx = ast.body.length - 1; 21 | let decl = {}; 22 | 23 | // Search for the first FunctionDeclaration beginning from the end 24 | do { 25 | decl = ast.body[idx--]; 26 | } while (idx >= 0 && decl.type !== "FunctionDeclaration"); 27 | idx++; 28 | 29 | // If we have a function declaration without an Id, wrap it 30 | // in an ExpressionStatement and change it into 31 | // a FuntionExpression 32 | if (decl.type == "FunctionDeclaration" && decl.id == null) { 33 | decl.type = "FunctionExpression"; 34 | ast.body[idx] = { 35 | type: "ExpressionStatement", 36 | expression: decl 37 | }; 38 | } 39 | 40 | // Generate source from the rewritten AST 41 | return escodegen.generate(ast); 42 | } 43 | 44 | 45 | function rewriteFun(funJSON) { 46 | const fun = JSON.parse(funJSON); 47 | return rewriteFunInt(fun); 48 | } 49 | 50 | function rewriteFuns(funsJSON) { 51 | let funs = JSON.parse(funsJSON); 52 | const results = Array.from(funs, (fun) => { 53 | return rewriteFunInt(fun); 54 | }); 55 | return results; 56 | } -------------------------------------------------------------------------------- /src/js_server.rs: -------------------------------------------------------------------------------- 1 | use crossbeam::crossbeam_channel::{ 2 | select, unbounded as cross_unbounded, Receiver as CrossReceiver, RecvError, 3 | Sender as CrossSender, 4 | }; 5 | 6 | use crate::{FortunaIsolate, JSEnv}; 7 | use std::fmt::Debug; 8 | use std::thread; 9 | 10 | type ServerTx = CrossSender; 11 | type ServerRx = CrossReceiver; 12 | 13 | type ClientTx = CrossSender; 14 | type ClientRx = CrossReceiver; 15 | 16 | #[derive(Debug)] 17 | pub enum Ops { 18 | REWRITE, 19 | EVAL, 20 | CALL, 21 | EXIT, 22 | } 23 | 24 | #[derive(Debug)] 25 | pub struct Command { 26 | pub operation: Ops, 27 | pub payload: String, 28 | pub args: Vec, 29 | } 30 | 31 | struct JSServer { 32 | send: ServerTx, 33 | receive: ServerRx, 34 | isolate: FortunaIsolate, 35 | } 36 | 37 | impl JSServer { 38 | fn start(js_env: &JSEnv, send: ServerTx, receive: ServerRx) { 39 | let data = js_env.startup_data.clone(); 40 | thread::spawn(move || { 41 | let mut server = JSServer { 42 | receive, 43 | send, 44 | isolate: FortunaIsolate::new_from_snapshot(data.as_slice()), 45 | }; 46 | 47 | loop { 48 | select! { 49 | recv(server.receive) -> sent => { 50 | match sent { 51 | Ok(cmd) => { 52 | if !server.process(cmd) { 53 | println!("exiting"); 54 | break; 55 | } 56 | }, 57 | Err(RecvError) => { 58 | println!("exiting RecvError"); 59 | break; 60 | } 61 | } 62 | } 63 | } 64 | } 65 | }); 66 | } 67 | 68 | fn process(&mut self, cmd: Command) -> bool { 69 | match cmd.operation { 70 | Ops::EXIT => false, 71 | Ops::EVAL => { 72 | self.eval(cmd.payload); 73 | true 74 | } 75 | Ops::CALL => { 76 | self.call(cmd.payload, cmd.args.as_slice()); 77 | true 78 | } 79 | Ops::REWRITE => { 80 | self.call(cmd.payload, cmd.args.as_slice()); 81 | true 82 | } 83 | } 84 | } 85 | 86 | fn eval(&mut self, script: String) { 87 | let resp = self.isolate.eval(script.as_str(), &[]); 88 | self.send.send(resp).unwrap(); 89 | } 90 | 91 | fn call(&mut self, fun_name: String, args: &[String]) { 92 | let resp = self.isolate.call(fun_name.as_str(), args); 93 | self.send.send(resp).unwrap(); 94 | } 95 | } 96 | 97 | #[derive(Clone)] 98 | pub struct JSClient { 99 | pub tx: ClientTx, 100 | pub rx: ClientRx, 101 | } 102 | 103 | impl JSClient { 104 | pub fn run(&self, cmd: Command) -> String { 105 | self.tx.send(cmd).unwrap(); 106 | self.rx.recv().unwrap() 107 | } 108 | } 109 | 110 | pub fn create_js_env(js_env: &JSEnv) -> JSClient { 111 | let (tx1, rx1) = cross_unbounded::(); 112 | let (tx2, rx2) = cross_unbounded::(); 113 | 114 | let client = JSClient { tx: tx1, rx: rx2 }; 115 | 116 | JSServer::start(js_env, tx2, rx1); 117 | 118 | client 119 | } 120 | -------------------------------------------------------------------------------- /src/http_service.rs: -------------------------------------------------------------------------------- 1 | use std::task::{Context, Poll}; 2 | 3 | use hyper::service::Service; 4 | 5 | use hyper::{Body, Method, Request, Response, Server, StatusCode}; 6 | 7 | use futures_util::future; 8 | 9 | use ateles::{JsRequest, JsResponse}; 10 | use hyper::server::conn::AddrIncoming; 11 | use prost::Message; 12 | use std::net::SocketAddr; 13 | 14 | use crate::js_server::{create_js_env, Command, JSClient, Ops}; 15 | use crate::JSEnv; 16 | use std::time::Instant; 17 | 18 | pub mod ateles { 19 | tonic::include_proto!("ateles"); // The string specified here must match the proto package name 20 | } 21 | 22 | impl From for Command { 23 | fn from(js_request: JsRequest) -> Self { 24 | let op = match js_request.action { 25 | 0 => Ops::REWRITE, 26 | 1 => Ops::EVAL, 27 | 2 => Ops::CALL, 28 | _ => Ops::EXIT, 29 | }; 30 | Command { 31 | operation: op, 32 | payload: js_request.script, 33 | args: js_request.args, 34 | } 35 | } 36 | } 37 | 38 | #[derive(Clone)] 39 | pub struct Svc { 40 | js_client: JSClient, 41 | } 42 | 43 | impl Svc { 44 | pub async fn handle_resp( 45 | &mut self, 46 | req: Request, 47 | ) -> Result, hyper::Error> { 48 | match (req.method(), req.uri().path()) { 49 | (&Method::GET, "/") => Ok(Response::new(Body::from( 50 | "HELLO Ateles on Rust with V8!!!!", 51 | ))), 52 | (&Method::GET, "/Health") => Ok(Response::new(Body::from("OK"))), 53 | (&Method::POST, "/Ateles/Execute") => { 54 | let start = Instant::now(); 55 | 56 | let full_body = hyper::body::to_bytes(req.into_body()).await?; 57 | let js_request = JsRequest::decode(full_body).unwrap(); 58 | let cmd: Command = js_request.clone().into(); 59 | let resp = self.js_client.run(js_request.into()); 60 | let js_resp = JsResponse { 61 | status: 0, 62 | result: resp, 63 | }; 64 | 65 | let mut resp: Vec = Vec::new(); 66 | js_resp.encode(&mut resp).unwrap(); 67 | println!("request {:?} took {:?}", cmd.operation, start.elapsed()); 68 | Ok(Response::new(Body::from(resp))) 69 | } 70 | _ => { 71 | let mut not_found = Response::default(); 72 | *not_found.status_mut() = StatusCode::NOT_FOUND; 73 | Ok(not_found) 74 | } 75 | } 76 | } 77 | } 78 | 79 | impl Service> for Svc { 80 | type Response = Response; 81 | type Error = hyper::Error; 82 | type Future = future::BoxFuture<'static, Result>; 83 | 84 | fn poll_ready(&mut self, _cx: &mut Context<'_>) -> Poll> { 85 | Ok(()).into() 86 | } 87 | 88 | fn call(&mut self, req: Request) -> Self::Future { 89 | let mut me = self.clone(); 90 | let fut = async move { me.handle_resp(req).await }; 91 | Box::pin(fut) 92 | } 93 | } 94 | 95 | pub struct MakeService { 96 | js_env: JSEnv, 97 | } 98 | 99 | impl MakeService { 100 | pub fn new() -> MakeService { 101 | MakeService { 102 | js_env: JSEnv::new(), 103 | } 104 | } 105 | } 106 | 107 | impl Service for MakeService { 108 | type Response = Svc; 109 | type Error = std::io::Error; 110 | type Future = future::Ready>; 111 | 112 | fn poll_ready(&mut self, _cx: &mut Context<'_>) -> Poll> { 113 | Ok(()).into() 114 | } 115 | 116 | fn call(&mut self, _: T) -> Self::Future { 117 | let svc = Svc { 118 | js_client: create_js_env(&self.js_env), 119 | }; 120 | future::ok(svc) 121 | } 122 | } 123 | 124 | pub fn create_server(addr: &SocketAddr) -> Server { 125 | Server::bind(&addr).serve(MakeService::new()) 126 | } 127 | -------------------------------------------------------------------------------- /src/client.rs: -------------------------------------------------------------------------------- 1 | use futures::{stream, StreamExt}; 2 | use reqwest::Client; 3 | 4 | use ateles::JsRequest; 5 | use prost::Message; 6 | use std::fs; 7 | use std::time::Instant; 8 | 9 | pub mod ateles { 10 | tonic::include_proto!("ateles"); // The string specified here must match the proto package name 11 | } 12 | 13 | /* 14 | steps: 15 | * rewrite map funs 16 | * add map.js 17 | * map docs 18 | */ 19 | 20 | async fn rewrite_map_funs(client: &Client) { 21 | let js_req = JsRequest { 22 | action: 0, 23 | script: "rewriteFun".to_string(), 24 | args: vec!["\"function(doc) {emit(doc._id, null);}\"".to_string()], 25 | timeout: 5000, 26 | }; 27 | 28 | let mut resp = Vec::::new(); 29 | js_req.encode(&mut resp).unwrap(); 30 | 31 | let _body = client 32 | .post("http://localhost:8444/Ateles/Execute") 33 | .body(resp) 34 | .send() 35 | .await 36 | .unwrap() 37 | .text() 38 | .await 39 | .unwrap(); 40 | } 41 | 42 | async fn add_map_js(client: &Client) { 43 | let js_req = JsRequest { 44 | action: 1, 45 | script: MAP_JS.to_string(), 46 | args: vec!["file=map.js".to_string(), "line=1".to_string()], 47 | timeout: 5000, 48 | }; 49 | 50 | let mut resp = Vec::::new(); 51 | js_req.encode(&mut resp).unwrap(); 52 | 53 | let _body = client 54 | .post("http://localhost:8444/Ateles/Execute") 55 | .body(resp) 56 | .send() 57 | .await 58 | .unwrap() 59 | .text() 60 | .await 61 | .unwrap(); 62 | } 63 | 64 | async fn init_map(client: &Client) { 65 | let js_req = JsRequest { 66 | action: 2, 67 | script: "init".to_string(), 68 | args: vec!["{}".to_string(), MAP_FUNS.to_string()], 69 | timeout: 5000, 70 | }; 71 | 72 | let mut resp = Vec::::new(); 73 | js_req.encode(&mut resp).unwrap(); 74 | 75 | let _body = client 76 | .post("http://localhost:8444/Ateles/Execute") 77 | .body(resp) 78 | .send() 79 | .await 80 | .unwrap() 81 | .text() 82 | .await 83 | .unwrap(); 84 | } 85 | 86 | async fn map_doc(client: &Client, doc: &str) { 87 | let js_req = JsRequest { 88 | action: 2, 89 | script: "mapDoc".to_string(), 90 | args: vec![doc.to_string()], 91 | timeout: 5000, 92 | }; 93 | 94 | let mut resp = Vec::::new(); 95 | js_req.encode(&mut resp).unwrap(); 96 | 97 | let _body = client 98 | .post("http://localhost:8444/Ateles/Execute") 99 | .body(resp) 100 | .send() 101 | .await 102 | .unwrap() 103 | .text() 104 | .await 105 | .unwrap(); 106 | } 107 | 108 | #[tokio::main] 109 | async fn main() -> Result<(), Box> { 110 | let start = Instant::now(); 111 | let reqs = 0..1000; 112 | // let doc = fs::read_to_string("test.json")?; 113 | 114 | let fetches = stream::iter(reqs.map(|_| { 115 | async { 116 | let docs = 0..100; 117 | let client = Client::new(); 118 | add_map_js(&client).await; 119 | init_map(&client).await; 120 | let doc_fetches = stream::iter(docs.map(|_| async { 121 | map_doc(&client, DOC).await; 122 | })) 123 | .buffer_unordered(1) 124 | .collect::>(); 125 | doc_fetches.await; 126 | } 127 | })) 128 | .buffer_unordered(60) 129 | .collect::>(); 130 | println!("Running..."); 131 | fetches.await; 132 | 133 | println!("requests took {:?}", start.elapsed()); 134 | Ok(()) 135 | } 136 | 137 | const DOC: &str = "{\"_id\":\"foo\",\"value\":1}"; 138 | 139 | const MAP_FUNS: &str = " 140 | [ 141 | \"(function (doc) { emit(doc._id, doc.value);});\", 142 | \"(function (doc) {\ 143 | let val = 0;\ 144 | for(let i = 0; i < 1000; i++) {\ 145 | val = i;\ 146 | }\ 147 | emit(doc._id, val);\ 148 | });\" 149 | 150 | ]"; 151 | 152 | const MAP_JS: &str = r#" 153 | let lib = {}; 154 | let map_funs = []; 155 | 156 | function init(libJSON, mapFunsJSON) { 157 | try { 158 | lib = JSON.parse(libJSON); 159 | } catch (ex) { 160 | const ret = {"error": "invalid_library", "reason": ex.toString()}; 161 | return JSON.stringify(ret); 162 | } 163 | 164 | try { 165 | mapFuns = Array.from(JSON.parse(mapFunsJSON), (source) => { 166 | return eval(source) 167 | }) 168 | } catch (ex) { 169 | const ret = {"error": "invalid_map_functions", "reason": ex.toString()}; 170 | return JSON.stringify(ret); 171 | } 172 | 173 | return true; 174 | } 175 | 176 | let doc_results = []; 177 | 178 | function emit(key, value) { 179 | doc_results.push([key, value]); 180 | } 181 | 182 | function mapEach(mapFun, doc) { 183 | try { 184 | doc_results = []; 185 | mapFun(doc); 186 | return doc_results; 187 | } catch (ex) { 188 | return ex.toString(); 189 | } 190 | }; 191 | 192 | function mapDoc(docJSON) { 193 | const doc = JSON.parse(docJSON); 194 | const mapResults = Array.from(mapFuns, (mapFun) => { 195 | return mapEach(mapFun, doc); 196 | }); 197 | 198 | return mapResults; 199 | } 200 | "#; 201 | -------------------------------------------------------------------------------- /src/js_engine.rs: -------------------------------------------------------------------------------- 1 | use rusty_v8 as v8; 2 | use std::convert::TryFrom; 3 | 4 | // This is created in build.rs and is all the required js code added into 5 | // a byte array 6 | include!(concat!(env!("OUT_DIR"), "/js_startup_code.rs")); 7 | 8 | // TODO: Handle errors properly 9 | 10 | pub struct FortunaIsolate { 11 | isolate: v8::OwnedIsolate, 12 | global_context: v8::Global, 13 | } 14 | 15 | pub struct JSEnv { 16 | pub startup_data: Vec, 17 | } 18 | 19 | pub fn print() { 20 | println!("hello"); 21 | } 22 | 23 | // fn print_callback( 24 | // scope: v8::FunctionCallbackScope, 25 | // args: v8::FunctionCallbackArguments, 26 | // mut rv: v8::ReturnValue, 27 | // ) { 28 | // for i in 0..args.length() { 29 | // let arg1 = args.get(i).to_string(scope).unwrap(); 30 | // println!("{:?}", arg1.to_rust_string_lossy(scope)); 31 | // } 32 | // rv.set(v8::Boolean::new(scope, true).into()) 33 | // } 34 | 35 | impl JSEnv { 36 | pub fn new() -> JSEnv { 37 | let startup_data = JSEnv::create_startup_data(); 38 | JSEnv { 39 | startup_data: startup_data.to_vec(), 40 | } 41 | } 42 | 43 | // adapted from Deno https://github.com/denoland/rusty_v8/blob/master/tests/test_api.rs#L1714 44 | fn create_startup_data() -> v8::StartupData { 45 | let mut snapshot_creator = v8::SnapshotCreator::new(None); 46 | { 47 | // TODO(ry) this shouldn't be necessary. workaround unfinished business in 48 | // the scope type system. 49 | let mut isolate = unsafe { snapshot_creator.get_owned_isolate() }; 50 | 51 | let mut hs = v8::HandleScope::new(&mut isolate); 52 | let scope = hs.enter(); 53 | 54 | let context = v8::Context::new(scope); 55 | let mut cs = v8::ContextScope::new(scope, context); 56 | let scope = cs.enter(); 57 | let source = v8::String::new(scope, JS_CODE).unwrap(); 58 | let mut script = v8::Script::compile(scope, context, source, None).unwrap(); 59 | script.run(scope, context).unwrap(); 60 | 61 | snapshot_creator.set_default_context(context); 62 | std::mem::forget(isolate); // TODO(ry) this shouldn't be necessary. 63 | } 64 | 65 | snapshot_creator 66 | .create_blob(v8::FunctionCodeHandling::Clear) 67 | .unwrap() 68 | } 69 | } 70 | 71 | impl FortunaIsolate { 72 | pub fn new_from_snapshot(data: &[u8]) -> FortunaIsolate { 73 | // let start = Instant::now(); 74 | let isolate = FortunaIsolate::create_isolate(data.to_vec()); 75 | // println!( 76 | // "Time elapsed in to create isolate is: {:?}", 77 | // start.elapsed() 78 | // ); 79 | isolate 80 | } 81 | 82 | fn create_isolate(startup_data: Vec) -> FortunaIsolate { 83 | // let safe_obj: v8::PropertyAttribute = v8::DONT_DELETE + v8::DONT_ENUM + v8::READ_ONLY; 84 | 85 | let mut global_context = v8::Global::::new(); 86 | let create_params = v8::Isolate::create_params().snapshot_blob(startup_data); 87 | let mut isolate = v8::Isolate::new(create_params); 88 | 89 | let mut handle_scope = v8::HandleScope::new(&mut isolate); 90 | let scope = handle_scope.enter(); 91 | 92 | let context = v8::Context::new(scope); 93 | 94 | // let mut cs = v8::ContextScope::new(scope, context); 95 | // let scope = cs.enter(); 96 | // 97 | // // Add default map functions 98 | // let source = v8::String::new(scope, JS_CODE).unwrap(); 99 | // let mut script = v8::Script::compile(scope, context, source, None).unwrap(); 100 | // script.run(scope, context).unwrap(); 101 | 102 | global_context.set(scope, context); 103 | 104 | FortunaIsolate { 105 | isolate, 106 | global_context, 107 | } 108 | } 109 | 110 | pub fn eval(&mut self, script_str: &str, _args: &[String]) -> String { 111 | // println!("script {:?}", script_str); 112 | let mut hs = v8::HandleScope::new(&mut self.isolate); 113 | let scope = hs.enter(); 114 | let context = self.global_context.get(scope).unwrap(); 115 | // let context = v8::Context::new(scope); 116 | let mut cs = v8::ContextScope::new(scope, context); 117 | let scope = cs.enter(); 118 | let source = v8::String::new(scope, script_str).unwrap(); 119 | let mut script = v8::Script::compile(scope, context, source, None).unwrap(); 120 | let result = script.run(scope, context).unwrap(); 121 | let result_json_string = v8::json::stringify(context, result).unwrap(); 122 | let result_string = result_json_string.to_rust_string_lossy(scope); 123 | // println!("result eval: {}", result_string); 124 | 125 | if result_string == "undefined" { 126 | return "null".to_string(); 127 | } 128 | result_string 129 | } 130 | 131 | pub fn call(&mut self, raw_fun_name: &str, args: &[String]) -> String { 132 | 133 | let mut hs = v8::HandleScope::new(&mut self.isolate); 134 | let scope = hs.enter(); 135 | let context = self.global_context.get(scope).unwrap(); 136 | let mut cs = v8::ContextScope::new(scope, context); 137 | let scope = cs.enter(); 138 | 139 | let global = context.global(scope); 140 | let name = v8::String::new(scope, raw_fun_name).unwrap(); 141 | let val_func = global.get(scope, context, name.into()).unwrap(); 142 | let func = v8::Local::::try_from(val_func).unwrap(); 143 | let receiver = context.global(scope); 144 | 145 | let val_args: Vec> = args 146 | .iter() 147 | .map(|arg| { 148 | let v8_arg = v8::String::new(scope, arg).unwrap(); 149 | v8::Local::::try_from(v8_arg).unwrap() 150 | }) 151 | .collect(); 152 | 153 | let resp = func 154 | .call(scope, context, receiver.into(), val_args.as_slice()) 155 | .unwrap(); 156 | let result = v8::json::stringify(context, resp).unwrap(); 157 | let result_string = result.to_rust_string_lossy(scope); 158 | // println!("result: {}", result_string); 159 | result_string 160 | } 161 | } 162 | 163 | pub fn init() { 164 | let platform = v8::new_default_platform().unwrap(); 165 | v8::V8::initialize_platform(platform); 166 | v8::V8::initialize(); 167 | } 168 | 169 | // Not really needed 170 | pub fn shutdown() { 171 | unsafe { 172 | v8::V8::shutdown_platform(); 173 | v8::V8::dispose(); 174 | } 175 | } 176 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "[]" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright [yyyy] [name of copyright owner] 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | -------------------------------------------------------------------------------- /Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | [[package]] 4 | name = "anyhow" 5 | version = "1.0.27" 6 | source = "registry+https://github.com/rust-lang/crates.io-index" 7 | checksum = "013a6e0a2cbe3d20f9c60b65458f7a7f7a5e636c5d0f45a5a6aee5d4b1f01785" 8 | 9 | [[package]] 10 | name = "arc-swap" 11 | version = "0.4.4" 12 | source = "registry+https://github.com/rust-lang/crates.io-index" 13 | checksum = "d7b8a9123b8027467bce0099fe556c628a53c8d83df0507084c31e9ba2e39aff" 14 | 15 | [[package]] 16 | name = "async-stream" 17 | version = "0.2.1" 18 | source = "registry+https://github.com/rust-lang/crates.io-index" 19 | checksum = "22068c0c19514942eefcfd4daf8976ef1aad84e61539f95cd200c35202f80af5" 20 | dependencies = [ 21 | "async-stream-impl", 22 | "futures-core", 23 | ] 24 | 25 | [[package]] 26 | name = "async-stream-impl" 27 | version = "0.2.1" 28 | source = "registry+https://github.com/rust-lang/crates.io-index" 29 | checksum = "25f9db3b38af870bf7e5cc649167533b493928e50744e2c30ae350230b414670" 30 | dependencies = [ 31 | "proc-macro2", 32 | "quote", 33 | "syn", 34 | ] 35 | 36 | [[package]] 37 | name = "async-trait" 38 | version = "0.1.24" 39 | source = "registry+https://github.com/rust-lang/crates.io-index" 40 | checksum = "750b1c38a1dfadd108da0f01c08f4cdc7ff1bb39b325f9c82cc972361780a6e1" 41 | dependencies = [ 42 | "proc-macro2", 43 | "quote", 44 | "syn", 45 | ] 46 | 47 | [[package]] 48 | name = "autocfg" 49 | version = "1.0.0" 50 | source = "registry+https://github.com/rust-lang/crates.io-index" 51 | checksum = "f8aac770f1885fd7e387acedd76065302551364496e46b3dd00860b2f8359b9d" 52 | 53 | [[package]] 54 | name = "backtrace" 55 | version = "0.3.46" 56 | source = "registry+https://github.com/rust-lang/crates.io-index" 57 | checksum = "b1e692897359247cc6bb902933361652380af0f1b7651ae5c5013407f30e109e" 58 | dependencies = [ 59 | "backtrace-sys", 60 | "cfg-if", 61 | "libc", 62 | "rustc-demangle", 63 | ] 64 | 65 | [[package]] 66 | name = "backtrace-sys" 67 | version = "0.1.35" 68 | source = "registry+https://github.com/rust-lang/crates.io-index" 69 | checksum = "7de8aba10a69c8e8d7622c5710229485ec32e9d55fdad160ea559c086fdcd118" 70 | dependencies = [ 71 | "cc", 72 | "libc", 73 | ] 74 | 75 | [[package]] 76 | name = "base64" 77 | version = "0.10.1" 78 | source = "registry+https://github.com/rust-lang/crates.io-index" 79 | checksum = "0b25d992356d2eb0ed82172f5248873db5560c4721f564b13cb5193bda5e668e" 80 | dependencies = [ 81 | "byteorder", 82 | ] 83 | 84 | [[package]] 85 | name = "base64" 86 | version = "0.11.0" 87 | source = "registry+https://github.com/rust-lang/crates.io-index" 88 | checksum = "b41b7ea54a0c9d92199de89e20e58d49f02f8e699814ef3fdf266f6f748d15c7" 89 | 90 | [[package]] 91 | name = "bitflags" 92 | version = "1.2.1" 93 | source = "registry+https://github.com/rust-lang/crates.io-index" 94 | checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" 95 | 96 | [[package]] 97 | name = "bumpalo" 98 | version = "3.2.1" 99 | source = "registry+https://github.com/rust-lang/crates.io-index" 100 | checksum = "12ae9db68ad7fac5fe51304d20f016c911539251075a214f8e663babefa35187" 101 | 102 | [[package]] 103 | name = "byteorder" 104 | version = "1.3.4" 105 | source = "registry+https://github.com/rust-lang/crates.io-index" 106 | checksum = "08c48aae112d48ed9f069b33538ea9e3e90aa263cfa3d1c24309612b1f7472de" 107 | 108 | [[package]] 109 | name = "bytes" 110 | version = "0.5.4" 111 | source = "registry+https://github.com/rust-lang/crates.io-index" 112 | checksum = "130aac562c0dd69c56b3b1cc8ffd2e17be31d0b6c25b61c96b76231aa23e39e1" 113 | 114 | [[package]] 115 | name = "cargo_gn" 116 | version = "0.0.15" 117 | source = "registry+https://github.com/rust-lang/crates.io-index" 118 | checksum = "5ba7d7f7b201dfcbc314b14f2176c92f8ba521dab538b40e426ffed25ed7cd80" 119 | 120 | [[package]] 121 | name = "cc" 122 | version = "1.0.50" 123 | source = "registry+https://github.com/rust-lang/crates.io-index" 124 | checksum = "95e28fa049fda1c330bcf9d723be7663a899c4679724b34c81e9f5a326aab8cd" 125 | 126 | [[package]] 127 | name = "cfg-if" 128 | version = "0.1.10" 129 | source = "registry+https://github.com/rust-lang/crates.io-index" 130 | checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" 131 | 132 | [[package]] 133 | name = "core-foundation" 134 | version = "0.7.0" 135 | source = "registry+https://github.com/rust-lang/crates.io-index" 136 | checksum = "57d24c7a13c43e870e37c1556b74555437870a04514f7685f5b354e090567171" 137 | dependencies = [ 138 | "core-foundation-sys", 139 | "libc", 140 | ] 141 | 142 | [[package]] 143 | name = "core-foundation-sys" 144 | version = "0.7.0" 145 | source = "registry+https://github.com/rust-lang/crates.io-index" 146 | checksum = "b3a71ab494c0b5b860bdc8407ae08978052417070c2ced38573a9157ad75b8ac" 147 | 148 | [[package]] 149 | name = "crossbeam" 150 | version = "0.7.3" 151 | source = "registry+https://github.com/rust-lang/crates.io-index" 152 | checksum = "69323bff1fb41c635347b8ead484a5ca6c3f11914d784170b158d8449ab07f8e" 153 | dependencies = [ 154 | "cfg-if", 155 | "crossbeam-channel", 156 | "crossbeam-deque", 157 | "crossbeam-epoch", 158 | "crossbeam-queue", 159 | "crossbeam-utils", 160 | ] 161 | 162 | [[package]] 163 | name = "crossbeam-channel" 164 | version = "0.4.2" 165 | source = "registry+https://github.com/rust-lang/crates.io-index" 166 | checksum = "cced8691919c02aac3cb0a1bc2e9b73d89e832bf9a06fc579d4e71b68a2da061" 167 | dependencies = [ 168 | "crossbeam-utils", 169 | "maybe-uninit", 170 | ] 171 | 172 | [[package]] 173 | name = "crossbeam-deque" 174 | version = "0.7.3" 175 | source = "registry+https://github.com/rust-lang/crates.io-index" 176 | checksum = "9f02af974daeee82218205558e51ec8768b48cf524bd01d550abe5573a608285" 177 | dependencies = [ 178 | "crossbeam-epoch", 179 | "crossbeam-utils", 180 | "maybe-uninit", 181 | ] 182 | 183 | [[package]] 184 | name = "crossbeam-epoch" 185 | version = "0.8.2" 186 | source = "registry+https://github.com/rust-lang/crates.io-index" 187 | checksum = "058ed274caafc1f60c4997b5fc07bf7dc7cca454af7c6e81edffe5f33f70dace" 188 | dependencies = [ 189 | "autocfg", 190 | "cfg-if", 191 | "crossbeam-utils", 192 | "lazy_static", 193 | "maybe-uninit", 194 | "memoffset", 195 | "scopeguard", 196 | ] 197 | 198 | [[package]] 199 | name = "crossbeam-queue" 200 | version = "0.2.1" 201 | source = "registry+https://github.com/rust-lang/crates.io-index" 202 | checksum = "c695eeca1e7173472a32221542ae469b3e9aac3a4fc81f7696bcad82029493db" 203 | dependencies = [ 204 | "cfg-if", 205 | "crossbeam-utils", 206 | ] 207 | 208 | [[package]] 209 | name = "crossbeam-utils" 210 | version = "0.7.2" 211 | source = "registry+https://github.com/rust-lang/crates.io-index" 212 | checksum = "c3c7c73a2d1e9fc0886a08b93e98eb643461230d5f1925e4036204d5f2e261a8" 213 | dependencies = [ 214 | "autocfg", 215 | "cfg-if", 216 | "lazy_static", 217 | ] 218 | 219 | [[package]] 220 | name = "dtoa" 221 | version = "0.4.5" 222 | source = "registry+https://github.com/rust-lang/crates.io-index" 223 | checksum = "4358a9e11b9a09cf52383b451b49a169e8d797b68aa02301ff586d70d9661ea3" 224 | 225 | [[package]] 226 | name = "either" 227 | version = "1.5.3" 228 | source = "registry+https://github.com/rust-lang/crates.io-index" 229 | checksum = "bb1f6b1ce1c140482ea30ddd3335fc0024ac7ee112895426e0a629a6c20adfe3" 230 | 231 | [[package]] 232 | name = "encoding_rs" 233 | version = "0.8.22" 234 | source = "registry+https://github.com/rust-lang/crates.io-index" 235 | checksum = "cd8d03faa7fe0c1431609dfad7bbe827af30f82e1e2ae6f7ee4fca6bd764bc28" 236 | dependencies = [ 237 | "cfg-if", 238 | ] 239 | 240 | [[package]] 241 | name = "failure" 242 | version = "0.1.7" 243 | source = "registry+https://github.com/rust-lang/crates.io-index" 244 | checksum = "b8529c2421efa3066a5cbd8063d2244603824daccb6936b079010bb2aa89464b" 245 | dependencies = [ 246 | "backtrace", 247 | ] 248 | 249 | [[package]] 250 | name = "fixedbitset" 251 | version = "0.2.0" 252 | source = "registry+https://github.com/rust-lang/crates.io-index" 253 | checksum = "37ab347416e802de484e4d03c7316c48f1ecb56574dfd4a46a80f173ce1de04d" 254 | 255 | [[package]] 256 | name = "fnv" 257 | version = "1.0.6" 258 | source = "registry+https://github.com/rust-lang/crates.io-index" 259 | checksum = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3" 260 | 261 | [[package]] 262 | name = "foreign-types" 263 | version = "0.3.2" 264 | source = "registry+https://github.com/rust-lang/crates.io-index" 265 | checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" 266 | dependencies = [ 267 | "foreign-types-shared", 268 | ] 269 | 270 | [[package]] 271 | name = "foreign-types-shared" 272 | version = "0.1.1" 273 | source = "registry+https://github.com/rust-lang/crates.io-index" 274 | checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" 275 | 276 | [[package]] 277 | name = "fortuna" 278 | version = "0.1.0" 279 | dependencies = [ 280 | "crossbeam", 281 | "futures", 282 | "futures-util", 283 | "hyper", 284 | "prost", 285 | "reqwest", 286 | "rusty_v8", 287 | "tokio", 288 | "tonic", 289 | "tonic-build", 290 | ] 291 | 292 | [[package]] 293 | name = "fuchsia-zircon" 294 | version = "0.3.3" 295 | source = "registry+https://github.com/rust-lang/crates.io-index" 296 | checksum = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82" 297 | dependencies = [ 298 | "bitflags", 299 | "fuchsia-zircon-sys", 300 | ] 301 | 302 | [[package]] 303 | name = "fuchsia-zircon-sys" 304 | version = "0.3.3" 305 | source = "registry+https://github.com/rust-lang/crates.io-index" 306 | checksum = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7" 307 | 308 | [[package]] 309 | name = "futures" 310 | version = "0.3.4" 311 | source = "registry+https://github.com/rust-lang/crates.io-index" 312 | checksum = "5c329ae8753502fb44ae4fc2b622fa2a94652c41e795143765ba0927f92ab780" 313 | dependencies = [ 314 | "futures-channel", 315 | "futures-core", 316 | "futures-executor", 317 | "futures-io", 318 | "futures-sink", 319 | "futures-task", 320 | "futures-util", 321 | ] 322 | 323 | [[package]] 324 | name = "futures-channel" 325 | version = "0.3.4" 326 | source = "registry+https://github.com/rust-lang/crates.io-index" 327 | checksum = "f0c77d04ce8edd9cb903932b608268b3fffec4163dc053b3b402bf47eac1f1a8" 328 | dependencies = [ 329 | "futures-core", 330 | "futures-sink", 331 | ] 332 | 333 | [[package]] 334 | name = "futures-core" 335 | version = "0.3.4" 336 | source = "registry+https://github.com/rust-lang/crates.io-index" 337 | checksum = "f25592f769825e89b92358db00d26f965761e094951ac44d3663ef25b7ac464a" 338 | 339 | [[package]] 340 | name = "futures-executor" 341 | version = "0.3.4" 342 | source = "registry+https://github.com/rust-lang/crates.io-index" 343 | checksum = "f674f3e1bcb15b37284a90cedf55afdba482ab061c407a9c0ebbd0f3109741ba" 344 | dependencies = [ 345 | "futures-core", 346 | "futures-task", 347 | "futures-util", 348 | ] 349 | 350 | [[package]] 351 | name = "futures-io" 352 | version = "0.3.4" 353 | source = "registry+https://github.com/rust-lang/crates.io-index" 354 | checksum = "a638959aa96152c7a4cddf50fcb1e3fede0583b27157c26e67d6f99904090dc6" 355 | 356 | [[package]] 357 | name = "futures-macro" 358 | version = "0.3.4" 359 | source = "registry+https://github.com/rust-lang/crates.io-index" 360 | checksum = "9a5081aa3de1f7542a794a397cde100ed903b0630152d0973479018fd85423a7" 361 | dependencies = [ 362 | "proc-macro-hack", 363 | "proc-macro2", 364 | "quote", 365 | "syn", 366 | ] 367 | 368 | [[package]] 369 | name = "futures-sink" 370 | version = "0.3.4" 371 | source = "registry+https://github.com/rust-lang/crates.io-index" 372 | checksum = "3466821b4bc114d95b087b850a724c6f83115e929bc88f1fa98a3304a944c8a6" 373 | 374 | [[package]] 375 | name = "futures-task" 376 | version = "0.3.4" 377 | source = "registry+https://github.com/rust-lang/crates.io-index" 378 | checksum = "7b0a34e53cf6cdcd0178aa573aed466b646eb3db769570841fda0c7ede375a27" 379 | 380 | [[package]] 381 | name = "futures-util" 382 | version = "0.3.4" 383 | source = "registry+https://github.com/rust-lang/crates.io-index" 384 | checksum = "22766cf25d64306bedf0384da004d05c9974ab104fcc4528f1236181c18004c5" 385 | dependencies = [ 386 | "futures-channel", 387 | "futures-core", 388 | "futures-io", 389 | "futures-macro", 390 | "futures-sink", 391 | "futures-task", 392 | "memchr", 393 | "pin-utils", 394 | "proc-macro-hack", 395 | "proc-macro-nested", 396 | "slab", 397 | ] 398 | 399 | [[package]] 400 | name = "getrandom" 401 | version = "0.1.14" 402 | source = "registry+https://github.com/rust-lang/crates.io-index" 403 | checksum = "7abc8dd8451921606d809ba32e95b6111925cd2906060d2dcc29c070220503eb" 404 | dependencies = [ 405 | "cfg-if", 406 | "libc", 407 | "wasi", 408 | ] 409 | 410 | [[package]] 411 | name = "h2" 412 | version = "0.2.2" 413 | source = "registry+https://github.com/rust-lang/crates.io-index" 414 | checksum = "9d5c295d1c0c68e4e42003d75f908f5e16a1edd1cbe0b0d02e4dc2006a384f47" 415 | dependencies = [ 416 | "bytes", 417 | "fnv", 418 | "futures-core", 419 | "futures-sink", 420 | "futures-util", 421 | "http", 422 | "indexmap", 423 | "log", 424 | "slab", 425 | "tokio", 426 | "tokio-util", 427 | ] 428 | 429 | [[package]] 430 | name = "heck" 431 | version = "0.3.1" 432 | source = "registry+https://github.com/rust-lang/crates.io-index" 433 | checksum = "20564e78d53d2bb135c343b3f47714a56af2061f1c928fdb541dc7b9fdd94205" 434 | dependencies = [ 435 | "unicode-segmentation", 436 | ] 437 | 438 | [[package]] 439 | name = "hermit-abi" 440 | version = "0.1.8" 441 | source = "registry+https://github.com/rust-lang/crates.io-index" 442 | checksum = "1010591b26bbfe835e9faeabeb11866061cc7dcebffd56ad7d0942d0e61aefd8" 443 | dependencies = [ 444 | "libc", 445 | ] 446 | 447 | [[package]] 448 | name = "http" 449 | version = "0.2.0" 450 | source = "registry+https://github.com/rust-lang/crates.io-index" 451 | checksum = "b708cc7f06493459026f53b9a61a7a121a5d1ec6238dee58ea4941132b30156b" 452 | dependencies = [ 453 | "bytes", 454 | "fnv", 455 | "itoa", 456 | ] 457 | 458 | [[package]] 459 | name = "http-body" 460 | version = "0.3.1" 461 | source = "registry+https://github.com/rust-lang/crates.io-index" 462 | checksum = "13d5ff830006f7646652e057693569bfe0d51760c0085a071769d142a205111b" 463 | dependencies = [ 464 | "bytes", 465 | "http", 466 | ] 467 | 468 | [[package]] 469 | name = "httparse" 470 | version = "1.3.4" 471 | source = "registry+https://github.com/rust-lang/crates.io-index" 472 | checksum = "cd179ae861f0c2e53da70d892f5f3029f9594be0c41dc5269cd371691b1dc2f9" 473 | 474 | [[package]] 475 | name = "hyper" 476 | version = "0.13.3" 477 | source = "registry+https://github.com/rust-lang/crates.io-index" 478 | checksum = "e7b15203263d1faa615f9337d79c1d37959439dc46c2b4faab33286fadc2a1c5" 479 | dependencies = [ 480 | "bytes", 481 | "futures-channel", 482 | "futures-core", 483 | "futures-util", 484 | "h2", 485 | "http", 486 | "http-body", 487 | "httparse", 488 | "itoa", 489 | "log", 490 | "net2", 491 | "pin-project", 492 | "time", 493 | "tokio", 494 | "tower-service", 495 | "want", 496 | ] 497 | 498 | [[package]] 499 | name = "hyper-tls" 500 | version = "0.4.1" 501 | source = "registry+https://github.com/rust-lang/crates.io-index" 502 | checksum = "3adcd308402b9553630734e9c36b77a7e48b3821251ca2493e8cd596763aafaa" 503 | dependencies = [ 504 | "bytes", 505 | "hyper", 506 | "native-tls", 507 | "tokio", 508 | "tokio-tls", 509 | ] 510 | 511 | [[package]] 512 | name = "idna" 513 | version = "0.2.0" 514 | source = "registry+https://github.com/rust-lang/crates.io-index" 515 | checksum = "02e2673c30ee86b5b96a9cb52ad15718aa1f966f5ab9ad54a8b95d5ca33120a9" 516 | dependencies = [ 517 | "matches", 518 | "unicode-bidi", 519 | "unicode-normalization", 520 | ] 521 | 522 | [[package]] 523 | name = "indexmap" 524 | version = "1.3.2" 525 | source = "registry+https://github.com/rust-lang/crates.io-index" 526 | checksum = "076f042c5b7b98f31d205f1249267e12a6518c1481e9dae9764af19b707d2292" 527 | dependencies = [ 528 | "autocfg", 529 | ] 530 | 531 | [[package]] 532 | name = "iovec" 533 | version = "0.1.4" 534 | source = "registry+https://github.com/rust-lang/crates.io-index" 535 | checksum = "b2b3ea6ff95e175473f8ffe6a7eb7c00d054240321b84c57051175fe3c1e075e" 536 | dependencies = [ 537 | "libc", 538 | ] 539 | 540 | [[package]] 541 | name = "itertools" 542 | version = "0.8.2" 543 | source = "registry+https://github.com/rust-lang/crates.io-index" 544 | checksum = "f56a2d0bc861f9165be4eb3442afd3c236d8a98afd426f65d92324ae1091a484" 545 | dependencies = [ 546 | "either", 547 | ] 548 | 549 | [[package]] 550 | name = "itoa" 551 | version = "0.4.5" 552 | source = "registry+https://github.com/rust-lang/crates.io-index" 553 | checksum = "b8b7a7c0c47db5545ed3fef7468ee7bb5b74691498139e4b3f6a20685dc6dd8e" 554 | 555 | [[package]] 556 | name = "js-sys" 557 | version = "0.3.39" 558 | source = "registry+https://github.com/rust-lang/crates.io-index" 559 | checksum = "fa5a448de267e7358beaf4a5d849518fe9a0c13fce7afd44b06e68550e5562a7" 560 | dependencies = [ 561 | "wasm-bindgen", 562 | ] 563 | 564 | [[package]] 565 | name = "kernel32-sys" 566 | version = "0.2.2" 567 | source = "registry+https://github.com/rust-lang/crates.io-index" 568 | checksum = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" 569 | dependencies = [ 570 | "winapi 0.2.8", 571 | "winapi-build", 572 | ] 573 | 574 | [[package]] 575 | name = "lazy_static" 576 | version = "1.4.0" 577 | source = "registry+https://github.com/rust-lang/crates.io-index" 578 | checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" 579 | 580 | [[package]] 581 | name = "libc" 582 | version = "0.2.69" 583 | source = "registry+https://github.com/rust-lang/crates.io-index" 584 | checksum = "99e85c08494b21a9054e7fe1374a732aeadaff3980b6990b94bfd3a70f690005" 585 | 586 | [[package]] 587 | name = "log" 588 | version = "0.4.8" 589 | source = "registry+https://github.com/rust-lang/crates.io-index" 590 | checksum = "14b6052be84e6b71ab17edffc2eeabf5c2c3ae1fdb464aae35ac50c67a44e1f7" 591 | dependencies = [ 592 | "cfg-if", 593 | ] 594 | 595 | [[package]] 596 | name = "matches" 597 | version = "0.1.8" 598 | source = "registry+https://github.com/rust-lang/crates.io-index" 599 | checksum = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08" 600 | 601 | [[package]] 602 | name = "maybe-uninit" 603 | version = "2.0.0" 604 | source = "registry+https://github.com/rust-lang/crates.io-index" 605 | checksum = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00" 606 | 607 | [[package]] 608 | name = "memchr" 609 | version = "2.3.3" 610 | source = "registry+https://github.com/rust-lang/crates.io-index" 611 | checksum = "3728d817d99e5ac407411fa471ff9800a778d88a24685968b36824eaf4bee400" 612 | 613 | [[package]] 614 | name = "memoffset" 615 | version = "0.5.4" 616 | source = "registry+https://github.com/rust-lang/crates.io-index" 617 | checksum = "b4fc2c02a7e374099d4ee95a193111f72d2110197fe200272371758f6c3643d8" 618 | dependencies = [ 619 | "autocfg", 620 | ] 621 | 622 | [[package]] 623 | name = "mime" 624 | version = "0.3.16" 625 | source = "registry+https://github.com/rust-lang/crates.io-index" 626 | checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" 627 | 628 | [[package]] 629 | name = "mime_guess" 630 | version = "2.0.3" 631 | source = "registry+https://github.com/rust-lang/crates.io-index" 632 | checksum = "2684d4c2e97d99848d30b324b00c8fcc7e5c897b7cbb5819b09e7c90e8baf212" 633 | dependencies = [ 634 | "mime", 635 | "unicase", 636 | ] 637 | 638 | [[package]] 639 | name = "mio" 640 | version = "0.6.21" 641 | source = "registry+https://github.com/rust-lang/crates.io-index" 642 | checksum = "302dec22bcf6bae6dfb69c647187f4b4d0fb6f535521f7bc022430ce8e12008f" 643 | dependencies = [ 644 | "cfg-if", 645 | "fuchsia-zircon", 646 | "fuchsia-zircon-sys", 647 | "iovec", 648 | "kernel32-sys", 649 | "libc", 650 | "log", 651 | "miow 0.2.1", 652 | "net2", 653 | "slab", 654 | "winapi 0.2.8", 655 | ] 656 | 657 | [[package]] 658 | name = "mio-named-pipes" 659 | version = "0.1.6" 660 | source = "registry+https://github.com/rust-lang/crates.io-index" 661 | checksum = "f5e374eff525ce1c5b7687c4cef63943e7686524a387933ad27ca7ec43779cb3" 662 | dependencies = [ 663 | "log", 664 | "mio", 665 | "miow 0.3.3", 666 | "winapi 0.3.8", 667 | ] 668 | 669 | [[package]] 670 | name = "mio-uds" 671 | version = "0.6.7" 672 | source = "registry+https://github.com/rust-lang/crates.io-index" 673 | checksum = "966257a94e196b11bb43aca423754d87429960a768de9414f3691d6957abf125" 674 | dependencies = [ 675 | "iovec", 676 | "libc", 677 | "mio", 678 | ] 679 | 680 | [[package]] 681 | name = "miow" 682 | version = "0.2.1" 683 | source = "registry+https://github.com/rust-lang/crates.io-index" 684 | checksum = "8c1f2f3b1cf331de6896aabf6e9d55dca90356cc9960cca7eaaf408a355ae919" 685 | dependencies = [ 686 | "kernel32-sys", 687 | "net2", 688 | "winapi 0.2.8", 689 | "ws2_32-sys", 690 | ] 691 | 692 | [[package]] 693 | name = "miow" 694 | version = "0.3.3" 695 | source = "registry+https://github.com/rust-lang/crates.io-index" 696 | checksum = "396aa0f2003d7df8395cb93e09871561ccc3e785f0acb369170e8cc74ddf9226" 697 | dependencies = [ 698 | "socket2", 699 | "winapi 0.3.8", 700 | ] 701 | 702 | [[package]] 703 | name = "multimap" 704 | version = "0.8.0" 705 | source = "registry+https://github.com/rust-lang/crates.io-index" 706 | checksum = "a97fbd5d00e0e37bfb10f433af8f5aaf631e739368dc9fc28286ca81ca4948dc" 707 | 708 | [[package]] 709 | name = "native-tls" 710 | version = "0.2.4" 711 | source = "registry+https://github.com/rust-lang/crates.io-index" 712 | checksum = "2b0d88c06fe90d5ee94048ba40409ef1d9315d86f6f38c2efdaad4fb50c58b2d" 713 | dependencies = [ 714 | "lazy_static", 715 | "libc", 716 | "log", 717 | "openssl", 718 | "openssl-probe", 719 | "openssl-sys", 720 | "schannel", 721 | "security-framework", 722 | "security-framework-sys", 723 | "tempfile", 724 | ] 725 | 726 | [[package]] 727 | name = "net2" 728 | version = "0.2.33" 729 | source = "registry+https://github.com/rust-lang/crates.io-index" 730 | checksum = "42550d9fb7b6684a6d404d9fa7250c2eb2646df731d1c06afc06dcee9e1bcf88" 731 | dependencies = [ 732 | "cfg-if", 733 | "libc", 734 | "winapi 0.3.8", 735 | ] 736 | 737 | [[package]] 738 | name = "num_cpus" 739 | version = "1.12.0" 740 | source = "registry+https://github.com/rust-lang/crates.io-index" 741 | checksum = "46203554f085ff89c235cd12f7075f3233af9b11ed7c9e16dfe2560d03313ce6" 742 | dependencies = [ 743 | "hermit-abi", 744 | "libc", 745 | ] 746 | 747 | [[package]] 748 | name = "openssl" 749 | version = "0.10.29" 750 | source = "registry+https://github.com/rust-lang/crates.io-index" 751 | checksum = "cee6d85f4cb4c4f59a6a85d5b68a233d280c82e29e822913b9c8b129fbf20bdd" 752 | dependencies = [ 753 | "bitflags", 754 | "cfg-if", 755 | "foreign-types", 756 | "lazy_static", 757 | "libc", 758 | "openssl-sys", 759 | ] 760 | 761 | [[package]] 762 | name = "openssl-probe" 763 | version = "0.1.2" 764 | source = "registry+https://github.com/rust-lang/crates.io-index" 765 | checksum = "77af24da69f9d9341038eba93a073b1fdaaa1b788221b00a69bce9e762cb32de" 766 | 767 | [[package]] 768 | name = "openssl-sys" 769 | version = "0.9.55" 770 | source = "registry+https://github.com/rust-lang/crates.io-index" 771 | checksum = "7717097d810a0f2e2323f9e5d11e71608355e24828410b55b9d4f18aa5f9a5d8" 772 | dependencies = [ 773 | "autocfg", 774 | "cc", 775 | "libc", 776 | "pkg-config", 777 | "vcpkg", 778 | ] 779 | 780 | [[package]] 781 | name = "percent-encoding" 782 | version = "1.0.1" 783 | source = "registry+https://github.com/rust-lang/crates.io-index" 784 | checksum = "31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831" 785 | 786 | [[package]] 787 | name = "percent-encoding" 788 | version = "2.1.0" 789 | source = "registry+https://github.com/rust-lang/crates.io-index" 790 | checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" 791 | 792 | [[package]] 793 | name = "petgraph" 794 | version = "0.5.0" 795 | source = "registry+https://github.com/rust-lang/crates.io-index" 796 | checksum = "29c127eea4a29ec6c85d153c59dc1213f33ec74cead30fe4730aecc88cc1fd92" 797 | dependencies = [ 798 | "fixedbitset", 799 | "indexmap", 800 | ] 801 | 802 | [[package]] 803 | name = "pin-project" 804 | version = "0.4.8" 805 | source = "registry+https://github.com/rust-lang/crates.io-index" 806 | checksum = "7804a463a8d9572f13453c516a5faea534a2403d7ced2f0c7e100eeff072772c" 807 | dependencies = [ 808 | "pin-project-internal", 809 | ] 810 | 811 | [[package]] 812 | name = "pin-project-internal" 813 | version = "0.4.8" 814 | source = "registry+https://github.com/rust-lang/crates.io-index" 815 | checksum = "385322a45f2ecf3410c68d2a549a4a2685e8051d0f278e39743ff4e451cb9b3f" 816 | dependencies = [ 817 | "proc-macro2", 818 | "quote", 819 | "syn", 820 | ] 821 | 822 | [[package]] 823 | name = "pin-project-lite" 824 | version = "0.1.4" 825 | source = "registry+https://github.com/rust-lang/crates.io-index" 826 | checksum = "237844750cfbb86f67afe27eee600dfbbcb6188d734139b534cbfbf4f96792ae" 827 | 828 | [[package]] 829 | name = "pin-utils" 830 | version = "0.1.0-alpha.4" 831 | source = "registry+https://github.com/rust-lang/crates.io-index" 832 | checksum = "5894c618ce612a3fa23881b152b608bafb8c56cfc22f434a3ba3120b40f7b587" 833 | 834 | [[package]] 835 | name = "pkg-config" 836 | version = "0.3.17" 837 | source = "registry+https://github.com/rust-lang/crates.io-index" 838 | checksum = "05da548ad6865900e60eaba7f589cc0783590a92e940c26953ff81ddbab2d677" 839 | 840 | [[package]] 841 | name = "ppv-lite86" 842 | version = "0.2.6" 843 | source = "registry+https://github.com/rust-lang/crates.io-index" 844 | checksum = "74490b50b9fbe561ac330df47c08f3f33073d2d00c150f719147d7c54522fa1b" 845 | 846 | [[package]] 847 | name = "proc-macro-hack" 848 | version = "0.5.15" 849 | source = "registry+https://github.com/rust-lang/crates.io-index" 850 | checksum = "0d659fe7c6d27f25e9d80a1a094c223f5246f6a6596453e09d7229bf42750b63" 851 | 852 | [[package]] 853 | name = "proc-macro-nested" 854 | version = "0.1.4" 855 | source = "registry+https://github.com/rust-lang/crates.io-index" 856 | checksum = "8e946095f9d3ed29ec38de908c22f95d9ac008e424c7bcae54c75a79c527c694" 857 | 858 | [[package]] 859 | name = "proc-macro2" 860 | version = "1.0.9" 861 | source = "registry+https://github.com/rust-lang/crates.io-index" 862 | checksum = "6c09721c6781493a2a492a96b5a5bf19b65917fe6728884e7c44dd0c60ca3435" 863 | dependencies = [ 864 | "unicode-xid", 865 | ] 866 | 867 | [[package]] 868 | name = "prost" 869 | version = "0.6.1" 870 | source = "registry+https://github.com/rust-lang/crates.io-index" 871 | checksum = "ce49aefe0a6144a45de32927c77bd2859a5f7677b55f220ae5b744e87389c212" 872 | dependencies = [ 873 | "bytes", 874 | "prost-derive", 875 | ] 876 | 877 | [[package]] 878 | name = "prost-build" 879 | version = "0.6.1" 880 | source = "registry+https://github.com/rust-lang/crates.io-index" 881 | checksum = "02b10678c913ecbd69350e8535c3aef91a8676c0773fc1d7b95cdd196d7f2f26" 882 | dependencies = [ 883 | "bytes", 884 | "heck", 885 | "itertools", 886 | "log", 887 | "multimap", 888 | "petgraph", 889 | "prost", 890 | "prost-types", 891 | "tempfile", 892 | "which", 893 | ] 894 | 895 | [[package]] 896 | name = "prost-derive" 897 | version = "0.6.1" 898 | source = "registry+https://github.com/rust-lang/crates.io-index" 899 | checksum = "537aa19b95acde10a12fec4301466386f757403de4cd4e5b4fa78fb5ecb18f72" 900 | dependencies = [ 901 | "anyhow", 902 | "itertools", 903 | "proc-macro2", 904 | "quote", 905 | "syn", 906 | ] 907 | 908 | [[package]] 909 | name = "prost-types" 910 | version = "0.6.1" 911 | source = "registry+https://github.com/rust-lang/crates.io-index" 912 | checksum = "1834f67c0697c001304b75be76f67add9c89742eda3a085ad8ee0bb38c3417aa" 913 | dependencies = [ 914 | "bytes", 915 | "prost", 916 | ] 917 | 918 | [[package]] 919 | name = "quote" 920 | version = "1.0.3" 921 | source = "registry+https://github.com/rust-lang/crates.io-index" 922 | checksum = "2bdc6c187c65bca4260c9011c9e3132efe4909da44726bad24cf7572ae338d7f" 923 | dependencies = [ 924 | "proc-macro2", 925 | ] 926 | 927 | [[package]] 928 | name = "rand" 929 | version = "0.7.3" 930 | source = "registry+https://github.com/rust-lang/crates.io-index" 931 | checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" 932 | dependencies = [ 933 | "getrandom", 934 | "libc", 935 | "rand_chacha", 936 | "rand_core", 937 | "rand_hc", 938 | "rand_pcg", 939 | ] 940 | 941 | [[package]] 942 | name = "rand_chacha" 943 | version = "0.2.2" 944 | source = "registry+https://github.com/rust-lang/crates.io-index" 945 | checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" 946 | dependencies = [ 947 | "ppv-lite86", 948 | "rand_core", 949 | ] 950 | 951 | [[package]] 952 | name = "rand_core" 953 | version = "0.5.1" 954 | source = "registry+https://github.com/rust-lang/crates.io-index" 955 | checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" 956 | dependencies = [ 957 | "getrandom", 958 | ] 959 | 960 | [[package]] 961 | name = "rand_hc" 962 | version = "0.2.0" 963 | source = "registry+https://github.com/rust-lang/crates.io-index" 964 | checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" 965 | dependencies = [ 966 | "rand_core", 967 | ] 968 | 969 | [[package]] 970 | name = "rand_pcg" 971 | version = "0.2.1" 972 | source = "registry+https://github.com/rust-lang/crates.io-index" 973 | checksum = "16abd0c1b639e9eb4d7c50c0b8100b0d0f849be2349829c740fe8e6eb4816429" 974 | dependencies = [ 975 | "rand_core", 976 | ] 977 | 978 | [[package]] 979 | name = "redox_syscall" 980 | version = "0.1.56" 981 | source = "registry+https://github.com/rust-lang/crates.io-index" 982 | checksum = "2439c63f3f6139d1b57529d16bc3b8bb855230c8efcc5d3a896c8bea7c3b1e84" 983 | 984 | [[package]] 985 | name = "remove_dir_all" 986 | version = "0.5.2" 987 | source = "registry+https://github.com/rust-lang/crates.io-index" 988 | checksum = "4a83fa3702a688b9359eccba92d153ac33fd2e8462f9e0e3fdf155239ea7792e" 989 | dependencies = [ 990 | "winapi 0.3.8", 991 | ] 992 | 993 | [[package]] 994 | name = "reqwest" 995 | version = "0.10.4" 996 | source = "registry+https://github.com/rust-lang/crates.io-index" 997 | checksum = "02b81e49ddec5109a9dcfc5f2a317ff53377c915e9ae9d4f2fb50914b85614e2" 998 | dependencies = [ 999 | "base64 0.11.0", 1000 | "bytes", 1001 | "encoding_rs", 1002 | "futures-core", 1003 | "futures-util", 1004 | "http", 1005 | "http-body", 1006 | "hyper", 1007 | "hyper-tls", 1008 | "js-sys", 1009 | "lazy_static", 1010 | "log", 1011 | "mime", 1012 | "mime_guess", 1013 | "native-tls", 1014 | "percent-encoding 2.1.0", 1015 | "pin-project-lite", 1016 | "serde", 1017 | "serde_urlencoded", 1018 | "time", 1019 | "tokio", 1020 | "tokio-tls", 1021 | "url", 1022 | "wasm-bindgen", 1023 | "wasm-bindgen-futures", 1024 | "web-sys", 1025 | "winreg", 1026 | ] 1027 | 1028 | [[package]] 1029 | name = "rustc-demangle" 1030 | version = "0.1.16" 1031 | source = "registry+https://github.com/rust-lang/crates.io-index" 1032 | checksum = "4c691c0e608126e00913e33f0ccf3727d5fc84573623b8d65b2df340b5201783" 1033 | 1034 | [[package]] 1035 | name = "rusty_v8" 1036 | version = "0.4.2" 1037 | source = "registry+https://github.com/rust-lang/crates.io-index" 1038 | checksum = "acb0ad56a57c42009a8d16df5fa94ae882ad0ffe0e88fe1a23b261b3affbccf2" 1039 | dependencies = [ 1040 | "bitflags", 1041 | "cargo_gn", 1042 | "lazy_static", 1043 | "libc", 1044 | "which", 1045 | ] 1046 | 1047 | [[package]] 1048 | name = "ryu" 1049 | version = "1.0.4" 1050 | source = "registry+https://github.com/rust-lang/crates.io-index" 1051 | checksum = "ed3d612bc64430efeb3f7ee6ef26d590dce0c43249217bddc62112540c7941e1" 1052 | 1053 | [[package]] 1054 | name = "schannel" 1055 | version = "0.1.18" 1056 | source = "registry+https://github.com/rust-lang/crates.io-index" 1057 | checksum = "039c25b130bd8c1321ee2d7de7fde2659fa9c2744e4bb29711cfc852ea53cd19" 1058 | dependencies = [ 1059 | "lazy_static", 1060 | "winapi 0.3.8", 1061 | ] 1062 | 1063 | [[package]] 1064 | name = "scopeguard" 1065 | version = "1.1.0" 1066 | source = "registry+https://github.com/rust-lang/crates.io-index" 1067 | checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" 1068 | 1069 | [[package]] 1070 | name = "security-framework" 1071 | version = "0.4.1" 1072 | source = "registry+https://github.com/rust-lang/crates.io-index" 1073 | checksum = "97bbedbe81904398b6ebb054b3e912f99d55807125790f3198ac990d98def5b0" 1074 | dependencies = [ 1075 | "bitflags", 1076 | "core-foundation", 1077 | "core-foundation-sys", 1078 | "security-framework-sys", 1079 | ] 1080 | 1081 | [[package]] 1082 | name = "security-framework-sys" 1083 | version = "0.4.3" 1084 | source = "registry+https://github.com/rust-lang/crates.io-index" 1085 | checksum = "17bf11d99252f512695eb468de5516e5cf75455521e69dfe343f3b74e4748405" 1086 | dependencies = [ 1087 | "core-foundation-sys", 1088 | "libc", 1089 | ] 1090 | 1091 | [[package]] 1092 | name = "serde" 1093 | version = "1.0.106" 1094 | source = "registry+https://github.com/rust-lang/crates.io-index" 1095 | checksum = "36df6ac6412072f67cf767ebbde4133a5b2e88e76dc6187fa7104cd16f783399" 1096 | 1097 | [[package]] 1098 | name = "serde_json" 1099 | version = "1.0.52" 1100 | source = "registry+https://github.com/rust-lang/crates.io-index" 1101 | checksum = "a7894c8ed05b7a3a279aeb79025fdec1d3158080b75b98a08faf2806bb799edd" 1102 | dependencies = [ 1103 | "itoa", 1104 | "ryu", 1105 | "serde", 1106 | ] 1107 | 1108 | [[package]] 1109 | name = "serde_urlencoded" 1110 | version = "0.6.1" 1111 | source = "registry+https://github.com/rust-lang/crates.io-index" 1112 | checksum = "9ec5d77e2d4c73717816afac02670d5c4f534ea95ed430442cad02e7a6e32c97" 1113 | dependencies = [ 1114 | "dtoa", 1115 | "itoa", 1116 | "serde", 1117 | "url", 1118 | ] 1119 | 1120 | [[package]] 1121 | name = "signal-hook-registry" 1122 | version = "1.2.0" 1123 | source = "registry+https://github.com/rust-lang/crates.io-index" 1124 | checksum = "94f478ede9f64724c5d173d7bb56099ec3e2d9fc2774aac65d34b8b890405f41" 1125 | dependencies = [ 1126 | "arc-swap", 1127 | "libc", 1128 | ] 1129 | 1130 | [[package]] 1131 | name = "slab" 1132 | version = "0.4.2" 1133 | source = "registry+https://github.com/rust-lang/crates.io-index" 1134 | checksum = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8" 1135 | 1136 | [[package]] 1137 | name = "smallvec" 1138 | version = "1.4.0" 1139 | source = "registry+https://github.com/rust-lang/crates.io-index" 1140 | checksum = "c7cb5678e1615754284ec264d9bb5b4c27d2018577fd90ac0ceb578591ed5ee4" 1141 | 1142 | [[package]] 1143 | name = "socket2" 1144 | version = "0.3.11" 1145 | source = "registry+https://github.com/rust-lang/crates.io-index" 1146 | checksum = "e8b74de517221a2cb01a53349cf54182acdc31a074727d3079068448c0676d85" 1147 | dependencies = [ 1148 | "cfg-if", 1149 | "libc", 1150 | "redox_syscall", 1151 | "winapi 0.3.8", 1152 | ] 1153 | 1154 | [[package]] 1155 | name = "syn" 1156 | version = "1.0.16" 1157 | source = "registry+https://github.com/rust-lang/crates.io-index" 1158 | checksum = "123bd9499cfb380418d509322d7a6d52e5315f064fe4b3ad18a53d6b92c07859" 1159 | dependencies = [ 1160 | "proc-macro2", 1161 | "quote", 1162 | "unicode-xid", 1163 | ] 1164 | 1165 | [[package]] 1166 | name = "tempfile" 1167 | version = "3.1.0" 1168 | source = "registry+https://github.com/rust-lang/crates.io-index" 1169 | checksum = "7a6e24d9338a0a5be79593e2fa15a648add6138caa803e2d5bc782c371732ca9" 1170 | dependencies = [ 1171 | "cfg-if", 1172 | "libc", 1173 | "rand", 1174 | "redox_syscall", 1175 | "remove_dir_all", 1176 | "winapi 0.3.8", 1177 | ] 1178 | 1179 | [[package]] 1180 | name = "time" 1181 | version = "0.1.42" 1182 | source = "registry+https://github.com/rust-lang/crates.io-index" 1183 | checksum = "db8dcfca086c1143c9270ac42a2bbd8a7ee477b78ac8e45b19abfb0cbede4b6f" 1184 | dependencies = [ 1185 | "libc", 1186 | "redox_syscall", 1187 | "winapi 0.3.8", 1188 | ] 1189 | 1190 | [[package]] 1191 | name = "tokio" 1192 | version = "0.2.13" 1193 | source = "registry+https://github.com/rust-lang/crates.io-index" 1194 | checksum = "0fa5e81d6bc4e67fe889d5783bd2a128ab2e0cfa487e0be16b6a8d177b101616" 1195 | dependencies = [ 1196 | "bytes", 1197 | "fnv", 1198 | "futures-core", 1199 | "iovec", 1200 | "lazy_static", 1201 | "libc", 1202 | "memchr", 1203 | "mio", 1204 | "mio-named-pipes", 1205 | "mio-uds", 1206 | "num_cpus", 1207 | "pin-project-lite", 1208 | "signal-hook-registry", 1209 | "slab", 1210 | "tokio-macros", 1211 | "winapi 0.3.8", 1212 | ] 1213 | 1214 | [[package]] 1215 | name = "tokio-macros" 1216 | version = "0.2.5" 1217 | source = "registry+https://github.com/rust-lang/crates.io-index" 1218 | checksum = "f0c3acc6aa564495a0f2e1d59fab677cd7f81a19994cfc7f3ad0e64301560389" 1219 | dependencies = [ 1220 | "proc-macro2", 1221 | "quote", 1222 | "syn", 1223 | ] 1224 | 1225 | [[package]] 1226 | name = "tokio-tls" 1227 | version = "0.3.0" 1228 | source = "registry+https://github.com/rust-lang/crates.io-index" 1229 | checksum = "7bde02a3a5291395f59b06ec6945a3077602fac2b07eeeaf0dee2122f3619828" 1230 | dependencies = [ 1231 | "native-tls", 1232 | "tokio", 1233 | ] 1234 | 1235 | [[package]] 1236 | name = "tokio-util" 1237 | version = "0.2.0" 1238 | source = "registry+https://github.com/rust-lang/crates.io-index" 1239 | checksum = "571da51182ec208780505a32528fc5512a8fe1443ab960b3f2f3ef093cd16930" 1240 | dependencies = [ 1241 | "bytes", 1242 | "futures-core", 1243 | "futures-sink", 1244 | "log", 1245 | "pin-project-lite", 1246 | "tokio", 1247 | ] 1248 | 1249 | [[package]] 1250 | name = "tonic" 1251 | version = "0.1.1" 1252 | source = "registry+https://github.com/rust-lang/crates.io-index" 1253 | checksum = "08283643b1d483eb7f3fc77069e63b5cba3e4db93514b3d45470e67f123e4e48" 1254 | dependencies = [ 1255 | "async-stream", 1256 | "async-trait", 1257 | "base64 0.10.1", 1258 | "bytes", 1259 | "futures-core", 1260 | "futures-util", 1261 | "http", 1262 | "http-body", 1263 | "hyper", 1264 | "percent-encoding 1.0.1", 1265 | "pin-project", 1266 | "prost", 1267 | "prost-derive", 1268 | "tokio", 1269 | "tokio-util", 1270 | "tower", 1271 | "tower-balance", 1272 | "tower-load", 1273 | "tower-make", 1274 | "tower-service", 1275 | "tracing", 1276 | "tracing-futures", 1277 | ] 1278 | 1279 | [[package]] 1280 | name = "tonic-build" 1281 | version = "0.1.1" 1282 | source = "registry+https://github.com/rust-lang/crates.io-index" 1283 | checksum = "0436413ba71545bcc6c2b9a0f9d78d72deb0123c6a75ccdfe7c056f9930f5e52" 1284 | dependencies = [ 1285 | "proc-macro2", 1286 | "prost-build", 1287 | "quote", 1288 | "syn", 1289 | ] 1290 | 1291 | [[package]] 1292 | name = "tower" 1293 | version = "0.3.1" 1294 | source = "registry+https://github.com/rust-lang/crates.io-index" 1295 | checksum = "fd3169017c090b7a28fce80abaad0ab4f5566423677c9331bb320af7e49cfe62" 1296 | dependencies = [ 1297 | "futures-core", 1298 | "tower-buffer", 1299 | "tower-discover", 1300 | "tower-layer", 1301 | "tower-limit", 1302 | "tower-load-shed", 1303 | "tower-retry", 1304 | "tower-service", 1305 | "tower-timeout", 1306 | "tower-util", 1307 | ] 1308 | 1309 | [[package]] 1310 | name = "tower-balance" 1311 | version = "0.3.0" 1312 | source = "registry+https://github.com/rust-lang/crates.io-index" 1313 | checksum = "a792277613b7052448851efcf98a2c433e6f1d01460832dc60bef676bc275d4c" 1314 | dependencies = [ 1315 | "futures-core", 1316 | "futures-util", 1317 | "indexmap", 1318 | "pin-project", 1319 | "rand", 1320 | "slab", 1321 | "tokio", 1322 | "tower-discover", 1323 | "tower-layer", 1324 | "tower-load", 1325 | "tower-make", 1326 | "tower-ready-cache", 1327 | "tower-service", 1328 | "tracing", 1329 | ] 1330 | 1331 | [[package]] 1332 | name = "tower-buffer" 1333 | version = "0.3.0" 1334 | source = "registry+https://github.com/rust-lang/crates.io-index" 1335 | checksum = "c4887dc2a65d464c8b9b66e0e4d51c2fd6cf5b3373afc72805b0a60bce00446a" 1336 | dependencies = [ 1337 | "futures-core", 1338 | "pin-project", 1339 | "tokio", 1340 | "tower-layer", 1341 | "tower-service", 1342 | "tracing", 1343 | ] 1344 | 1345 | [[package]] 1346 | name = "tower-discover" 1347 | version = "0.3.0" 1348 | source = "registry+https://github.com/rust-lang/crates.io-index" 1349 | checksum = "0f6b5000c3c54d269cc695dff28136bb33d08cbf1df2c48129e143ab65bf3c2a" 1350 | dependencies = [ 1351 | "futures-core", 1352 | "pin-project", 1353 | "tower-service", 1354 | ] 1355 | 1356 | [[package]] 1357 | name = "tower-layer" 1358 | version = "0.3.0" 1359 | source = "registry+https://github.com/rust-lang/crates.io-index" 1360 | checksum = "a35d656f2638b288b33495d1053ea74c40dc05ec0b92084dd71ca5566c4ed1dc" 1361 | 1362 | [[package]] 1363 | name = "tower-limit" 1364 | version = "0.3.0" 1365 | source = "registry+https://github.com/rust-lang/crates.io-index" 1366 | checksum = "0a4030a1dc1ab99ec6fc9475fc18c62f6cc4da035d370fcbd22fe342f9dd16cd" 1367 | dependencies = [ 1368 | "futures-core", 1369 | "pin-project", 1370 | "tokio", 1371 | "tower-layer", 1372 | "tower-service", 1373 | ] 1374 | 1375 | [[package]] 1376 | name = "tower-load" 1377 | version = "0.3.0" 1378 | source = "registry+https://github.com/rust-lang/crates.io-index" 1379 | checksum = "8cc79fc3afd07492b7966d7efa7c6c50f8ed58d768a6075dd7ae6591c5d2017b" 1380 | dependencies = [ 1381 | "futures-core", 1382 | "log", 1383 | "pin-project", 1384 | "tokio", 1385 | "tower-discover", 1386 | "tower-service", 1387 | ] 1388 | 1389 | [[package]] 1390 | name = "tower-load-shed" 1391 | version = "0.3.0" 1392 | source = "registry+https://github.com/rust-lang/crates.io-index" 1393 | checksum = "9f021e23900173dc315feb4b6922510dae3e79c689b74c089112066c11f0ae4e" 1394 | dependencies = [ 1395 | "futures-core", 1396 | "pin-project", 1397 | "tower-layer", 1398 | "tower-service", 1399 | ] 1400 | 1401 | [[package]] 1402 | name = "tower-make" 1403 | version = "0.3.0" 1404 | source = "registry+https://github.com/rust-lang/crates.io-index" 1405 | checksum = "ce50370d644a0364bf4877ffd4f76404156a248d104e2cc234cd391ea5cdc965" 1406 | dependencies = [ 1407 | "tokio", 1408 | "tower-service", 1409 | ] 1410 | 1411 | [[package]] 1412 | name = "tower-ready-cache" 1413 | version = "0.3.1" 1414 | source = "registry+https://github.com/rust-lang/crates.io-index" 1415 | checksum = "4eabb6620e5481267e2ec832c780b31cad0c15dcb14ed825df5076b26b591e1f" 1416 | dependencies = [ 1417 | "futures-core", 1418 | "futures-util", 1419 | "indexmap", 1420 | "log", 1421 | "tokio", 1422 | "tower-service", 1423 | ] 1424 | 1425 | [[package]] 1426 | name = "tower-retry" 1427 | version = "0.3.0" 1428 | source = "registry+https://github.com/rust-lang/crates.io-index" 1429 | checksum = "e6727956aaa2f8957d4d9232b308fe8e4e65d99db30f42b225646e86c9b6a952" 1430 | dependencies = [ 1431 | "futures-core", 1432 | "pin-project", 1433 | "tokio", 1434 | "tower-layer", 1435 | "tower-service", 1436 | ] 1437 | 1438 | [[package]] 1439 | name = "tower-service" 1440 | version = "0.3.0" 1441 | source = "registry+https://github.com/rust-lang/crates.io-index" 1442 | checksum = "e987b6bf443f4b5b3b6f38704195592cca41c5bb7aedd3c3693c7081f8289860" 1443 | 1444 | [[package]] 1445 | name = "tower-timeout" 1446 | version = "0.3.0" 1447 | source = "registry+https://github.com/rust-lang/crates.io-index" 1448 | checksum = "127b8924b357be938823eaaec0608c482d40add25609481027b96198b2e4b31e" 1449 | dependencies = [ 1450 | "pin-project", 1451 | "tokio", 1452 | "tower-layer", 1453 | "tower-service", 1454 | ] 1455 | 1456 | [[package]] 1457 | name = "tower-util" 1458 | version = "0.3.0" 1459 | source = "registry+https://github.com/rust-lang/crates.io-index" 1460 | checksum = "5702d7890e35b2aae6ee420e8a762547505dbed30c075fbc84ec069a0aa18314" 1461 | dependencies = [ 1462 | "futures-core", 1463 | "futures-util", 1464 | "pin-project", 1465 | "tower-service", 1466 | ] 1467 | 1468 | [[package]] 1469 | name = "tracing" 1470 | version = "0.1.13" 1471 | source = "registry+https://github.com/rust-lang/crates.io-index" 1472 | checksum = "1721cc8cf7d770cc4257872507180f35a4797272f5962f24c806af9e7faf52ab" 1473 | dependencies = [ 1474 | "cfg-if", 1475 | "log", 1476 | "tracing-attributes", 1477 | "tracing-core", 1478 | ] 1479 | 1480 | [[package]] 1481 | name = "tracing-attributes" 1482 | version = "0.1.7" 1483 | source = "registry+https://github.com/rust-lang/crates.io-index" 1484 | checksum = "7fbad39da2f9af1cae3016339ad7f2c7a9e870f12e8fd04c4fd7ef35b30c0d2b" 1485 | dependencies = [ 1486 | "quote", 1487 | "syn", 1488 | ] 1489 | 1490 | [[package]] 1491 | name = "tracing-core" 1492 | version = "0.1.10" 1493 | source = "registry+https://github.com/rust-lang/crates.io-index" 1494 | checksum = "0aa83a9a47081cd522c09c81b31aec2c9273424976f922ad61c053b58350b715" 1495 | dependencies = [ 1496 | "lazy_static", 1497 | ] 1498 | 1499 | [[package]] 1500 | name = "tracing-futures" 1501 | version = "0.2.3" 1502 | source = "registry+https://github.com/rust-lang/crates.io-index" 1503 | checksum = "58b0b7fd92dc7b71f29623cc6836dd7200f32161a2313dd78be233a8405694f6" 1504 | dependencies = [ 1505 | "pin-project", 1506 | "tracing", 1507 | ] 1508 | 1509 | [[package]] 1510 | name = "try-lock" 1511 | version = "0.2.2" 1512 | source = "registry+https://github.com/rust-lang/crates.io-index" 1513 | checksum = "e604eb7b43c06650e854be16a2a03155743d3752dd1c943f6829e26b7a36e382" 1514 | 1515 | [[package]] 1516 | name = "unicase" 1517 | version = "2.6.0" 1518 | source = "registry+https://github.com/rust-lang/crates.io-index" 1519 | checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6" 1520 | dependencies = [ 1521 | "version_check", 1522 | ] 1523 | 1524 | [[package]] 1525 | name = "unicode-bidi" 1526 | version = "0.3.4" 1527 | source = "registry+https://github.com/rust-lang/crates.io-index" 1528 | checksum = "49f2bd0c6468a8230e1db229cff8029217cf623c767ea5d60bfbd42729ea54d5" 1529 | dependencies = [ 1530 | "matches", 1531 | ] 1532 | 1533 | [[package]] 1534 | name = "unicode-normalization" 1535 | version = "0.1.12" 1536 | source = "registry+https://github.com/rust-lang/crates.io-index" 1537 | checksum = "5479532badd04e128284890390c1e876ef7a993d0570b3597ae43dfa1d59afa4" 1538 | dependencies = [ 1539 | "smallvec", 1540 | ] 1541 | 1542 | [[package]] 1543 | name = "unicode-segmentation" 1544 | version = "1.6.0" 1545 | source = "registry+https://github.com/rust-lang/crates.io-index" 1546 | checksum = "e83e153d1053cbb5a118eeff7fd5be06ed99153f00dbcd8ae310c5fb2b22edc0" 1547 | 1548 | [[package]] 1549 | name = "unicode-xid" 1550 | version = "0.2.0" 1551 | source = "registry+https://github.com/rust-lang/crates.io-index" 1552 | checksum = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c" 1553 | 1554 | [[package]] 1555 | name = "url" 1556 | version = "2.1.1" 1557 | source = "registry+https://github.com/rust-lang/crates.io-index" 1558 | checksum = "829d4a8476c35c9bf0bbce5a3b23f4106f79728039b726d292bb93bc106787cb" 1559 | dependencies = [ 1560 | "idna", 1561 | "matches", 1562 | "percent-encoding 2.1.0", 1563 | ] 1564 | 1565 | [[package]] 1566 | name = "vcpkg" 1567 | version = "0.2.8" 1568 | source = "registry+https://github.com/rust-lang/crates.io-index" 1569 | checksum = "3fc439f2794e98976c88a2a2dafce96b930fe8010b0a256b3c2199a773933168" 1570 | 1571 | [[package]] 1572 | name = "version_check" 1573 | version = "0.9.1" 1574 | source = "registry+https://github.com/rust-lang/crates.io-index" 1575 | checksum = "078775d0255232fb988e6fccf26ddc9d1ac274299aaedcedce21c6f72cc533ce" 1576 | 1577 | [[package]] 1578 | name = "want" 1579 | version = "0.3.0" 1580 | source = "registry+https://github.com/rust-lang/crates.io-index" 1581 | checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" 1582 | dependencies = [ 1583 | "log", 1584 | "try-lock", 1585 | ] 1586 | 1587 | [[package]] 1588 | name = "wasi" 1589 | version = "0.9.0+wasi-snapshot-preview1" 1590 | source = "registry+https://github.com/rust-lang/crates.io-index" 1591 | checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" 1592 | 1593 | [[package]] 1594 | name = "wasm-bindgen" 1595 | version = "0.2.62" 1596 | source = "registry+https://github.com/rust-lang/crates.io-index" 1597 | checksum = "e3c7d40d09cdbf0f4895ae58cf57d92e1e57a9dd8ed2e8390514b54a47cc5551" 1598 | dependencies = [ 1599 | "cfg-if", 1600 | "serde", 1601 | "serde_json", 1602 | "wasm-bindgen-macro", 1603 | ] 1604 | 1605 | [[package]] 1606 | name = "wasm-bindgen-backend" 1607 | version = "0.2.62" 1608 | source = "registry+https://github.com/rust-lang/crates.io-index" 1609 | checksum = "c3972e137ebf830900db522d6c8fd74d1900dcfc733462e9a12e942b00b4ac94" 1610 | dependencies = [ 1611 | "bumpalo", 1612 | "lazy_static", 1613 | "log", 1614 | "proc-macro2", 1615 | "quote", 1616 | "syn", 1617 | "wasm-bindgen-shared", 1618 | ] 1619 | 1620 | [[package]] 1621 | name = "wasm-bindgen-futures" 1622 | version = "0.4.12" 1623 | source = "registry+https://github.com/rust-lang/crates.io-index" 1624 | checksum = "8a369c5e1dfb7569e14d62af4da642a3cbc2f9a3652fe586e26ac22222aa4b04" 1625 | dependencies = [ 1626 | "cfg-if", 1627 | "js-sys", 1628 | "wasm-bindgen", 1629 | "web-sys", 1630 | ] 1631 | 1632 | [[package]] 1633 | name = "wasm-bindgen-macro" 1634 | version = "0.2.62" 1635 | source = "registry+https://github.com/rust-lang/crates.io-index" 1636 | checksum = "2cd85aa2c579e8892442954685f0d801f9129de24fa2136b2c6a539c76b65776" 1637 | dependencies = [ 1638 | "quote", 1639 | "wasm-bindgen-macro-support", 1640 | ] 1641 | 1642 | [[package]] 1643 | name = "wasm-bindgen-macro-support" 1644 | version = "0.2.62" 1645 | source = "registry+https://github.com/rust-lang/crates.io-index" 1646 | checksum = "8eb197bd3a47553334907ffd2f16507b4f4f01bbec3ac921a7719e0decdfe72a" 1647 | dependencies = [ 1648 | "proc-macro2", 1649 | "quote", 1650 | "syn", 1651 | "wasm-bindgen-backend", 1652 | "wasm-bindgen-shared", 1653 | ] 1654 | 1655 | [[package]] 1656 | name = "wasm-bindgen-shared" 1657 | version = "0.2.62" 1658 | source = "registry+https://github.com/rust-lang/crates.io-index" 1659 | checksum = "a91c2916119c17a8e316507afaaa2dd94b47646048014bbdf6bef098c1bb58ad" 1660 | 1661 | [[package]] 1662 | name = "web-sys" 1663 | version = "0.3.39" 1664 | source = "registry+https://github.com/rust-lang/crates.io-index" 1665 | checksum = "8bc359e5dd3b46cb9687a051d50a2fdd228e4ba7cf6fcf861a5365c3d671a642" 1666 | dependencies = [ 1667 | "js-sys", 1668 | "wasm-bindgen", 1669 | ] 1670 | 1671 | [[package]] 1672 | name = "which" 1673 | version = "3.1.1" 1674 | source = "registry+https://github.com/rust-lang/crates.io-index" 1675 | checksum = "d011071ae14a2f6671d0b74080ae0cd8ebf3a6f8c9589a2cd45f23126fe29724" 1676 | dependencies = [ 1677 | "failure", 1678 | "libc", 1679 | ] 1680 | 1681 | [[package]] 1682 | name = "winapi" 1683 | version = "0.2.8" 1684 | source = "registry+https://github.com/rust-lang/crates.io-index" 1685 | checksum = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" 1686 | 1687 | [[package]] 1688 | name = "winapi" 1689 | version = "0.3.8" 1690 | source = "registry+https://github.com/rust-lang/crates.io-index" 1691 | checksum = "8093091eeb260906a183e6ae1abdba2ef5ef2257a21801128899c3fc699229c6" 1692 | dependencies = [ 1693 | "winapi-i686-pc-windows-gnu", 1694 | "winapi-x86_64-pc-windows-gnu", 1695 | ] 1696 | 1697 | [[package]] 1698 | name = "winapi-build" 1699 | version = "0.1.1" 1700 | source = "registry+https://github.com/rust-lang/crates.io-index" 1701 | checksum = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" 1702 | 1703 | [[package]] 1704 | name = "winapi-i686-pc-windows-gnu" 1705 | version = "0.4.0" 1706 | source = "registry+https://github.com/rust-lang/crates.io-index" 1707 | checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 1708 | 1709 | [[package]] 1710 | name = "winapi-x86_64-pc-windows-gnu" 1711 | version = "0.4.0" 1712 | source = "registry+https://github.com/rust-lang/crates.io-index" 1713 | checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 1714 | 1715 | [[package]] 1716 | name = "winreg" 1717 | version = "0.6.2" 1718 | source = "registry+https://github.com/rust-lang/crates.io-index" 1719 | checksum = "b2986deb581c4fe11b621998a5e53361efe6b48a151178d0cd9eeffa4dc6acc9" 1720 | dependencies = [ 1721 | "winapi 0.3.8", 1722 | ] 1723 | 1724 | [[package]] 1725 | name = "ws2_32-sys" 1726 | version = "0.2.1" 1727 | source = "registry+https://github.com/rust-lang/crates.io-index" 1728 | checksum = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e" 1729 | dependencies = [ 1730 | "winapi 0.2.8", 1731 | "winapi-build", 1732 | ] 1733 | -------------------------------------------------------------------------------- /js/escodegen.js: -------------------------------------------------------------------------------- 1 | (function(b){function a(b,d){if({}.hasOwnProperty.call(a.cache,b))return a.cache[b];var e=a.resolve(b);if(!e)throw new Error('Failed to resolve module '+b);var c={id:b,require:a,filename:b,exports:{},loaded:!1,parent:d,children:[]};d&&d.children.push(c);var f=b.slice(0,b.lastIndexOf('/')+1);return a.cache[b]=c.exports,e.call(c.exports,c,c.exports,f,b),c.loaded=!0,a.cache[b]=c.exports}a.modules={},a.cache={},a.resolve=function(b){return{}.hasOwnProperty.call(a.modules,b)?a.modules[b]:void 0},a.define=function(b,c){a.modules[b]=c};var c=function(a){return a='/',{title:'browser',version:'v6.8.0',browser:!0,env:{},argv:[],nextTick:b.setImmediate||function(a){setTimeout(a,0)},cwd:function(){return a},chdir:function(b){a=b}}}();a.define('/tools/entry-point.js',function(c,d,e,f){!function(){'use strict';b.escodegen=a('/escodegen.js',c),escodegen.browser=!0}()}),a.define('/escodegen.js',function(d,c,e,f){!function(k,e,af,N,_,m,J,n,F,A,Z,ae,S,ad,i,f,W,ac,L,aa,t,Y,B,C,x,a9,a7,w,E,G,V,Q,q,U,P,g,R,a6,X,l,y,K,a5,a4){'use strict';function ap(a){return o.Expression.hasOwnProperty(a.type)}function a3(a){return o.Statement.hasOwnProperty(a.type)}function a2(){return{indent:null,base:null,parse:null,comment:!1,format:{indent:{style:' ',base:0,adjustMultilineComment:!1},newline:'\n',space:' ',json:!1,renumber:!1,hexadecimal:!1,quotes:'single',escapeless:!1,compact:!1,parentheses:!0,semicolons:!0,safeConcatenation:!1,preserveBlankLines:!1},moz:{comprehensionExpressionStartsWithAssignment:!1,starlessGenerator:!1},sourceMap:null,sourceMapRoot:null,sourceMapWithCode:!1,directive:!1,raw:!0,verbatim:null,sourceCode:null}}function H(b,a){var c='';for(a|=0;a>0;a>>>=1,b+=b)a&1&&(c+=b);return c}function am(a){return/[\r\n]/g.test(a)}function r(b){var a=b.length;return a&&m.code.isLineTerminator(b.charCodeAt(a-1))}function a0(c,b){var a;for(a in b)b.hasOwnProperty(a)&&(c[a]=b[a]);return c}function T(b,d){function e(a){return typeof a==='object'&&a instanceof Object&&!(a instanceof RegExp)}var a,c;for(a in d)d.hasOwnProperty(a)&&(c=d[a],e(c)?e(b[a])?T(b[a],c):b[a]=T({},c):b[a]=c);return b}function ao(c){var b,e,a,f,d;if(c!==c)throw new Error('Numeric literal whose value is NaN');if(c<0||c===0&&1/c<0)throw new Error('Numeric literal whose value is negative');if(c===1/0)return A?'null':Z?'1e400':'1e+400';if(b=''+c,!Z||b.length<3)return b;e=b.indexOf('.'),!A&&b.charCodeAt(0)===48&&e===1&&(e=0,b=b.slice(1)),a=b,b=b.replace('e+','e'),f=0,(d=a.indexOf('e'))>0&&(f=+a.slice(d+1),a=a.slice(0,d)),e>=0&&(f-=a.length-e-1,a=+(a.slice(0,e)+a.slice(e+1))+''),d=0;while(a.charCodeAt(a.length+d-1)===48)--d;return d!==0&&(f-=d,a=a.slice(0,d)),f!==0&&(a+='e'+f),(a.length1e12&&Math.floor(c)===c&&(a='0x'+c.toString(16)).length255?'\\u'+'0000'.slice(b.length)+b:a===0&&!m.code.isDecimalDigit(c)?'\\0':a===11?'\\x0B':'\\x'+'00'.slice(b.length)+b)}function ai(a){if(a===92)return'\\\\';if(a===10)return'\\n';if(a===13)return'\\r';if(a===8232)return'\\u2028';if(a===8233)return'\\u2029';throw new Error('Incorrectly classified character')}function aj(d){var a,e,c,b;for(b=S==='double'?'"':"'",a=0,e=d.length;a126))){b+=ar(a,d.charCodeAt(c+1));continue}b+=String.fromCharCode(a)}if(e=!(S==='double'||S==='auto'&&i=0;--a)if(m.code.isLineTerminator(b.charCodeAt(a)))break;return b.length-1-a}function ah(k,i){var b,a,e,g,d,c,f,h;for(b=k.split(/\r\n|[\r\n]/),c=Number.MAX_VALUE,a=1,e=b.length;ad&&(c=d)}for(i!==void 0?(f=n,b[1][c]==='*'&&(i+=' '),n=i):(c&1&&--c,f=n),a=1,e=b.length;a0){if(q=a,x){for(b=d.leadingComments[0],a=[],i=b.extendedRange,f=b.range,h=C.substring(i[0],f[0]),e=(h.match(/\n/g)||[]).length,e>0?(a.push(H('\n',e)),a.push(u(D(b)))):(a.push(h),a.push(D(b))),o=f,c=1,g=d.leadingComments.length;c0?(a.push(H('\n',e)),a.push(u(D(b)))):(a.push(h),a.push(D(b)));else for(p=!r(j(a).toString()),m=H(' ',as(j([n,a,F]).toString())),c=0,g=d.trailingComments.length;c':e.Relational,'<=':e.Relational,'>=':e.Relational,'in':e.Relational,'instanceof':e.Relational,'<<':e.BitwiseSHIFT,'>>':e.BitwiseSHIFT,'>>>':e.BitwiseSHIFT,'+':e.Additive,'-':e.Additive,'*':e.Multiplicative,'%':e.Multiplicative,'/':e.Multiplicative},w=1,E=2,G=4,V=8,Q=16,q=32,U=E|G,P=w|E,g=w|E|G,R=w,a6=G,X=w|G,l=w,y=w|q,K=0,a5=w|Q,a4=w|V,J=Array.isArray,J||(J=function a(b){return Object.prototype.toString.call(b)==='[object Array]'}),o.prototype.maybeBlock=function(a,c){var d,b,e=this;return b=!t.comment||!a.leadingComments,a.type===k.BlockStatement&&b?[f,this.generateStatement(a,c)]:a.type===k.EmptyStatement&&b?';':(p(function(){d=[i,u(e.generateStatement(a,c))]}),d)},o.prototype.maybeBlockSuffix=function(c,a){var b=r(j(a).toString());return c.type===k.BlockStatement&&!(t.comment&&c.leadingComments)&&!b?[a,f]:b?[a,n]:[a,i,n]},o.prototype.generatePattern=function(a,b,c){return a.type===k.Identifier?z(a):this.generateExpression(a,b,c)},o.prototype.generateFunctionParams=function(a){var c,d,b,h;if(h=!1,a.type===k.ArrowFunctionExpression&&!a.rest&&(!a.defaults||a.defaults.length===0)&&a.params.length===1&&a.params[0].type===k.Identifier)b=[M(a,!0),z(a.params[0])];else{for(b=a.type===k.ArrowFunctionExpression?[M(a,!1)]:[],b.push('('),a.defaults&&(h=!0),c=0,d=a.params.length;c')),b.expression?(a.push(f),c=this.generateExpression(b.body,e.Assignment,g),c.toString().charAt(0)==='{'&&(c=['(',c,')']),a.push(c)):a.push(this.maybeBlock(b.body,a4)),a},o.prototype.generateIterationForStatement=function(d,b,i){var a=['for'+f+'('],c=this;return p(function(){b.left.type===k.VariableDeclaration?p(function(){a.push(b.left.kind+v()),a.push(c.generateStatement(b.left.declarations[0],K))}):a.push(c.generateExpression(b.left,e.Call,g)),a=h(a,d),a=[h(a,c.generateExpression(b.right,e.Sequence,g)),')']}),a.push(this.maybeBlock(b.body,i)),a},o.prototype.generatePropertyKey=function(d,b,c){var a=[];return b&&a.push('['),c.type==='AssignmentPattern'?a.push(this.AssignmentPattern(c,e.Sequence,g)):a.push(this.generateExpression(d,e.Sequence,g)),b&&a.push(']'),a},o.prototype.generateAssignment=function(c,d,g,b,a){return e.Assignment2)&&(d=C.substring(c[0]+1,c[1]-1),d[0]==='\n'&&(b=['{']),b.push(d));var g,h,m,k;for(k=l,f&V&&(k|=Q),g=0,h=a.body.length;g0&&!(a.body[g-1].trailingComments||a.body[g].leadingComments)&&I(a.body[g-1].range[1],a.body[g].range[0],b)),g===h-1&&(k|=q),a.body[g].leadingComments&&x?m=e.generateStatement(a.body[g],k):m=u(e.generateStatement(a.body[g],k)),b.push(m),r(j(m).toString())||(x&&g1?p(j):j(),a.push(this.semicolon(h)),a},ThrowStatement:function(a,b){return[h('throw',this.generateExpression(a.argument,e.Sequence,g)),this.semicolon(b)]},TryStatement:function(b,f){var a,c,d,e;if(a=['try',this.maybeBlock(b.block,l)],a=this.maybeBlockSuffix(b.block,a),b.handlers)for(c=0,d=b.handlers.length;c0?'\n':''],f=a5,a=0;a0&&!(b.body[a-1].trailingComments||b.body[a].leadingComments)&&I(b.body[a-1].range[1],b.body[a].range[0],c)),e=u(this.generateStatement(b.body[a],f)),c.push(e),a+10){for(a.push('('),b=0,i=c;b=2&&b.charCodeAt(0)===48)&&a.push('.')),a.push('.'),a.push(z(c.property))),s(a,e.Member,f)},MetaProperty:function(b,c,d){var a;return a=[],a.push(b.meta),a.push('.'),a.push(b.property),s(a,e.Member,c)},UnaryExpression:function(d,l,n){var a,b,i,k,c;return b=this.generateExpression(d.argument,e.Unary,g),f===''?a=h(d.operator,b):(a=[d.operator],d.operator.length>2?a=h(a,b):(k=j(a).toString(),c=k.charCodeAt(k.length-1),i=b.toString().charCodeAt(0),(c===43||c===45)&&c===i||m.code.isIdentifierPartES5(c)&&m.code.isIdentifierPartES5(i)?(a.push(v()),a.push(b)):a.push(b))),s(a,e.Unary,l)},YieldExpression:function(b,c,d){var a;return b.delegate?a='yield*':a='yield',b.argument&&(a=h(a,this.generateExpression(b.argument,e.Yield,g))),s(a,e.Yield,c)},AwaitExpression:function(a,c,d){var b=h(a.all?'await*':'await',this.generateExpression(a.argument,e.Await,g));return s(b,e.Await,c)},UpdateExpression:function(a,b,c){return a.prefix?s([a.operator,this.generateExpression(a.argument,e.Unary,g)],e.Unary,b):s([this.generateExpression(a.argument,e.Postfix,g),a.operator],e.Postfix,b)},FunctionExpression:function(a,c,d){var b=[M(a,!0),'function'];return a.id?(b.push(O(a)||v()),b.push(z(a.id))):b.push(O(a)||f),b.push(this.generateFunctionBody(a)),b},ArrayPattern:function(a,b,c){return this.ArrayExpression(a,b,c,!0)},ArrayExpression:function(c,k,l,h){var a,b,d=this;return c.elements.length?(b=h?!1:c.elements.length>1,a=['[',b?i:''],p(function(k){var h,j;for(h=0,j=c.elements.length;h1,p(function(){c=h.generateExpression(b.properties[0],e.Sequence,g)}),d||am(j(c).toString())?(p(function(k){var f,j;if(a=['{',i,k,c],d)for(a.push(','+i),f=1,j=b.properties.length;f0||t.moz.comprehensionExpressionStartsWithAssignment?a=h(a,c):a.push(c)}),b.filter&&(a=h(a,'if'+f),c=this.generateExpression(b.filter,e.Sequence,g),a=h(a,['(',c,')'])),t.moz.comprehensionExpressionStartsWithAssignment||(c=this.generateExpression(b.body,e.Assignment,g),a=h(a,c)),a.push(b.type===k.GeneratorExpression?')':']'),a},ComprehensionBlock:function(b,c,d){var a;return b.left.type===k.VariableDeclaration?a=[b.left.kind,v(),this.generateStatement(b.left.declarations[0],K)]:a=this.generateExpression(b.left,e.Call,g),a=h(a,b.of?'of':'in'),a=h(a,this.generateExpression(b.right,e.Sequence,g)),['for'+f+'(',a,')']},SpreadElement:function(a,b,c){return['...',this.generateExpression(a.argument,e.Assignment,g)]},TaggedTemplateExpression:function(b,d,f){var a=P;f&E||(a=R);var c=[this.generateExpression(b.tag,e.Call,a),this.generateExpression(b.quasi,e.Primary,a6)];return s(c,e.TaggedTemplate,d)},TemplateElement:function(a,b,c){return a.value.raw},TemplateLiteral:function(c,h,i){var a,b,d;for(a=['`'],b=0,d=c.quasis.length;b=0.12.0'},maintainers:[{name:'Yusuke Suzuki',email:'utatane.tea@gmail.com',web:'http://github.com/Constellation'}],repository:{type:'git',url:'http://github.com/estools/escodegen.git'},dependencies:{estraverse:'^1.9.1',esutils:'^2.0.2',esprima:'^2.7.1',optionator:'^0.8.1'},optionalDependencies:{'source-map':'~0.2.0'},devDependencies:{acorn:'^2.7.0',bluebird:'^2.3.11','bower-registry-client':'^0.2.1',chai:'^1.10.0','commonjs-everywhere':'^0.9.7',gulp:'^3.8.10','gulp-eslint':'^0.2.0','gulp-mocha':'^2.0.0',semver:'^5.1.0'},license:'BSD-2-Clause',scripts:{test:'gulp travis','unit-test':'gulp test',lint:'gulp lint',release:'node tools/release.js','build-min':'./node_modules/.bin/cjsify -ma path: tools/entry-point.js > escodegen.browser.min.js',build:'./node_modules/.bin/cjsify -a path: tools/entry-point.js > escodegen.browser.js'}}}),a.define('/node_modules/source-map/lib/source-map.js',function(b,c,d,e){c.SourceMapGenerator=a('/node_modules/source-map/lib/source-map/source-map-generator.js',b).SourceMapGenerator,c.SourceMapConsumer=a('/node_modules/source-map/lib/source-map/source-map-consumer.js',b).SourceMapConsumer,c.SourceNode=a('/node_modules/source-map/lib/source-map/source-node.js',b).SourceNode}),a.define('/node_modules/source-map/lib/source-map/source-node.js',function(c,d,e,f){if(typeof b!=='function')var b=a('/node_modules/amdefine/amdefine.js',c)(c,a);b(function(d,i,e){function a(a,c,d,e,f){this.children=[],this.sourceContents={},this.line=a==null?null:a,this.column=c==null?null:c,this.source=d==null?null:d,this.name=f==null?null:f,this[b]=!0,e!=null&&this.add(e)}var f=d('/node_modules/source-map/lib/source-map/source-map-generator.js',e).SourceMapGenerator,c=d('/node_modules/source-map/lib/source-map/util.js',e),g=/(\r?\n)/,h=10,b='$$$isSourceNode$$$';a.fromStringWithSourceMap=function b(n,m,j){function l(b,d){if(b===null||b.source===undefined)e.add(d);else{var f=j?c.join(j,b.source):b.source;e.add(new a(b.originalLine,b.originalColumn,f,d,b.name))}}var e=new a,d=n.split(g),k=function(){var a=d.shift(),b=d.shift()||'';return a+b},i=1,h=0,f=null;return m.eachMapping(function(a){if(f!==null)if(i0&&(f&&l(f,k()),e.add(d.join(''))),m.sources.forEach(function(a){var b=m.sourceContentFor(a);b!=null&&(j!=null&&(a=c.join(j,a)),e.setSourceContent(a,b))}),e},a.prototype.add=function a(c){if(Array.isArray(c))c.forEach(function(a){this.add(a)},this);else if(c[b]||typeof c==='string')c&&this.children.push(c);else throw new TypeError('Expected a SourceNode, string, or an array of SourceNodes and strings. Got '+c);return this},a.prototype.prepend=function a(c){if(Array.isArray(c))for(var d=c.length-1;d>=0;d--)this.prepend(c[d]);else if(c[b]||typeof c==='string')this.children.unshift(c);else throw new TypeError('Expected a SourceNode, string, or an array of SourceNodes and strings. Got '+c);return this},a.prototype.walk=function a(e){var c;for(var d=0,f=this.children.length;d0){for(b=[],c=0;c=0;f--)h=e[f],h==='.'?e.splice(f,1):h==='..'?g++:g>0&&(h===''?(e.splice(f+1,g),g=0):(e.splice(f,2),g--));return a=e.join('/'),a===''&&(a=j?'/':'.'),d?(d.path=a,c(d)):a}function h(h,d){h===''&&(h='.'),d===''&&(d='.');var f=b(d),a=b(h);if(a&&(h=a.path||'/'),f&&!f.scheme)return a&&(f.scheme=a.scheme),c(f);if(f||d.match(e))return d;if(a&&!a.host&&!a.path)return a.host=d,c(a);var i=d.charAt(0)==='/'?d:g(h.replace(/\/+$/,'')+'/'+d);return a?(a.path=i,c(a)):i}function j(a,c){a===''&&(a='.'),a=a.replace(/\/$/,'');var d=b(a);return c.charAt(0)=='/'&&d&&d.path=='/'?c.slice(1):c.indexOf(a+'/')===0?c.substr(a.length+1):c}function k(a){return'$'+a}function l(a){return a.substr(1)}function d(c,d){var a=c||'',b=d||'';return(a>b)-(a0&&(b.splice(a-1,2),a-=2)}function j(b,c){var a;return b&&b.charAt(0)==='.'&&c&&(a=c.split('/'),a=a.slice(0,a.length-1),a=a.concat(b.split('/')),q(a),b=a.join('/')),b}function p(a){return function(b){return j(b,a)}}function o(c){function a(a){b[c]=a}return a.fromText=function(a,b){throw new Error('amdefine does not implement load.fromText')},a}function m(c,h,l){var m,f,a,j;if(c)f=b[c]={},a={id:c,uri:d,exports:f},m=g(i,f,a,c);else{if(k)throw new Error('amdefine with no module ID cannot be called more than once per file.');k=!0,f=e.exports,a=e,m=g(i,f,a,e.id)}h&&(h=h.map(function(a){return m(a)})),typeof l==='function'?j=l.apply(a.exports,h):j=l,j!==undefined&&(a.exports=j,c&&(b[c]=a.exports))}function l(b,a,c){Array.isArray(b)?(c=a,a=b,b=undefined):typeof b!=='string'&&(c=b,b=a=undefined),a&&!Array.isArray(a)&&(c=a,a=undefined),a||(a=['require','exports','module']),b?f[b]=[b,a,c]:m(b,a,c)}var f={},b={},k=!1,n=a('path',e),g,h;return g=function(b,d,a,e){function f(f,g){if(typeof f==='string')return h(b,d,a,f,e);f=f.map(function(c){return h(b,d,a,c,e)}),g&&c.nextTick(function(){g.apply(null,f)})}return f.toUrl=function(b){return b.indexOf('.')===0?j(b,n.dirname(a.filename)):b},f},i=i||function a(){return e.require.apply(e,arguments)},h=function(d,e,i,a,c){var k=a.indexOf('!'),n=a,q,l;if(k===-1)if(a=j(a,c),a==='require')return g(d,e,i,c);else if(a==='exports')return e;else if(a==='module')return i;else if(b.hasOwnProperty(a))return b[a];else if(f[a])return m.apply(null,f[a]),b[a];else if(d)return d(n);else throw new Error('No module with ID: '+a);else return q=a.substring(0,k),a=a.substring(k+1,a.length),l=h(d,e,i,q,c),l.normalize?a=l.normalize(a,p(c)):a=j(a,c),b[a]?b[a]:(l.load(a,g(d,e,i,c),o(a),{}),b[a])},l.require=function(a){return b[a]?b[a]:f[a]?(m.apply(null,f[a]),b[a]):void 0},l.amd={},l}b.exports=e}),a.define('/node_modules/source-map/lib/source-map/source-map-generator.js',function(c,d,e,f){if(typeof b!=='function')var b=a('/node_modules/amdefine/amdefine.js',c)(c,a);b(function(e,h,f){function b(b){b||(b={}),this._file=a.getArg(b,'file',null),this._sourceRoot=a.getArg(b,'sourceRoot',null),this._skipValidation=a.getArg(b,'skipValidation',!1),this._sources=new d,this._names=new d,this._mappings=new g,this._sourcesContents=null}var c=e('/node_modules/source-map/lib/source-map/base64-vlq.js',f),a=e('/node_modules/source-map/lib/source-map/util.js',f),d=e('/node_modules/source-map/lib/source-map/array-set.js',f).ArraySet,g=e('/node_modules/source-map/lib/source-map/mapping-list.js',f).MappingList;b.prototype._version=3,b.fromSourceMap=function c(d){var e=d.sourceRoot,f=new b({file:d.file,sourceRoot:e});return d.eachMapping(function(b){var c={generated:{line:b.generatedLine,column:b.generatedColumn}};b.source!=null&&(c.source=b.source,e!=null&&(c.source=a.relative(e,c.source)),c.original={line:b.originalLine,column:b.originalColumn},b.name!=null&&(c.name=b.name)),f.addMapping(c)}),d.sources.forEach(function(b){var a=d.sourceContentFor(b);a!=null&&f.setSourceContent(b,a)}),f},b.prototype.addMapping=function b(f){var g=a.getArg(f,'generated'),c=a.getArg(f,'original',null),d=a.getArg(f,'source',null),e=a.getArg(f,'name',null);this._skipValidation||this._validateMapping(g,c,d,e),d!=null&&!this._sources.has(d)&&this._sources.add(d),e!=null&&!this._names.has(e)&&this._names.add(e),this._mappings.add({generatedLine:g.line,generatedColumn:g.column,originalLine:c!=null&&c.line,originalColumn:c!=null&&c.column,source:d,name:e})},b.prototype.setSourceContent=function b(e,d){var c=e;this._sourceRoot!=null&&(c=a.relative(this._sourceRoot,c)),d!=null?(this._sourcesContents||(this._sourcesContents={}),this._sourcesContents[a.toSetString(c)]=d):this._sourcesContents&&(delete this._sourcesContents[a.toSetString(c)],Object.keys(this._sourcesContents).length===0&&(this._sourcesContents=null))},b.prototype.applySourceMap=function b(e,j,g){var f=j;if(j==null){if(e.file==null)throw new Error('SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, or the source map\'s "file" property. Both were omitted.');f=e.file}var c=this._sourceRoot;c!=null&&(f=a.relative(c,f));var h=new d,i=new d;this._mappings.unsortedForEach(function(b){if(b.source===f&&b.originalLine!=null){var d=e.originalPositionFor({line:b.originalLine,column:b.originalColumn});d.source!=null&&(b.source=d.source,g!=null&&(b.source=a.join(g,b.source)),c!=null&&(b.source=a.relative(c,b.source)),b.originalLine=d.line,b.originalColumn=d.column,d.name!=null&&(b.name=d.name))}var j=b.source;j!=null&&!h.has(j)&&h.add(j);var k=b.name;k!=null&&!i.has(k)&&i.add(k)},this),this._sources=h,this._names=i,e.sources.forEach(function(b){var d=e.sourceContentFor(b);d!=null&&(g!=null&&(b=a.join(g,b)),c!=null&&(b=a.relative(c,b)),this.setSourceContent(b,d))},this)},b.prototype._validateMapping=function a(b,c,d,e){if(b&&'line'in b&&'column'in b&&b.line>0&&b.column>=0&&!c&&!d&&!e)return;else if(b&&'line'in b&&'column'in b&&c&&'line'in c&&'column'in c&&b.line>0&&b.column>=0&&c.line>0&&c.column>=0&&d)return;else throw new Error('Invalid mapping: '+JSON.stringify({generated:b,source:d,original:c,name:e}))},b.prototype._serializeMappings=function b(){var h=0,g=1,k=0,l=0,m=0,j=0,e='',d,i=this._mappings.toArray();for(var f=0,n=i.length;f0){if(!a.compareByGeneratedPositions(d,i[f-1]))continue;e+=','}e+=c.encode(d.generatedColumn-h),h=d.generatedColumn,d.source!=null&&(e+=c.encode(this._sources.indexOf(d.source)-j),j=this._sources.indexOf(d.source),e+=c.encode(d.originalLine-1-l),l=d.originalLine-1,e+=c.encode(d.originalColumn-k),k=d.originalColumn,d.name!=null&&(e+=c.encode(this._names.indexOf(d.name)-m),m=this._names.indexOf(d.name)))}return e},b.prototype._generateSourcesContent=function b(d,c){return d.map(function(b){if(!this._sourcesContents)return null;c!=null&&(b=a.relative(c,b));var d=a.toSetString(b);return Object.prototype.hasOwnProperty.call(this._sourcesContents,d)?this._sourcesContents[d]:null},this)},b.prototype.toJSON=function a(){var b={version:this._version,sources:this._sources.toArray(),names:this._names.toArray(),mappings:this._serializeMappings()};return this._file!=null&&(b.file=this._file),this._sourceRoot!=null&&(b.sourceRoot=this._sourceRoot),this._sourcesContents&&(b.sourcesContent=this._generateSourcesContent(b.sources,b.sourceRoot)),b},b.prototype.toString=function a(){return JSON.stringify(this)},h.SourceMapGenerator=b})}),a.define('/node_modules/source-map/lib/source-map/mapping-list.js',function(c,d,e,f){if(typeof b!=='function')var b=a('/node_modules/amdefine/amdefine.js',c)(c,a);b(function(c,d,e){function f(a,c){var d=a.generatedLine,e=c.generatedLine,f=a.generatedColumn,g=c.generatedColumn;return e>d||e==d&&g>=f||b.compareByGeneratedPositions(a,c)<=0}function a(){this._array=[],this._sorted=!0,this._last={generatedLine:-1,generatedColumn:0}}var b=c('/node_modules/source-map/lib/source-map/util.js',e);a.prototype.unsortedForEach=function a(b,c){this._array.forEach(b,c)},a.prototype.add=function a(b){f(this._last,b)?(this._last=b,this._array.push(b)):(this._sorted=!1,this._array.push(b))},a.prototype.toArray=function a(){return this._sorted||(this._array.sort(b.compareByGeneratedPositions),this._sorted=!0),this._array},d.MappingList=a})}),a.define('/node_modules/source-map/lib/source-map/array-set.js',function(c,d,e,f){if(typeof b!=='function')var b=a('/node_modules/amdefine/amdefine.js',c)(c,a);b(function(c,d,e){function a(){this._array=[],this._set={}}var b=c('/node_modules/source-map/lib/source-map/util.js',e);a.fromArray=function b(e,g){var d=new a;for(var c=0,f=e.length;c=0&&b>1;return c?-a:a}var c=j('/node_modules/source-map/lib/source-map/base64.js',h),a=5,d=1<>>=a,f>0&&(h|=b),g+=c.encode(h);while(f>0);return g},f.decode=function d(i,l){var f=0,m=i.length,j=0,k=0,n,h;do{if(f>=m)throw new Error('Expected more digits in base 64 VLQ value.');h=c.decode(i.charAt(f++)),n=!!(h&b),h&=e,j+=h<=0){var c=this._originalMappings[e];while(c&&c.originalLine===d.originalLine)f.push({line:b.getArg(c,'generatedLine',null),column:b.getArg(c,'generatedColumn',null),lastColumn:b.getArg(c,'lastGeneratedColumn',null)}),c=this._originalMappings[--e]}return f.reverse()},e.SourceMapConsumer=a})}),a.define('/node_modules/source-map/lib/source-map/basic-source-map-consumer.js',function(c,d,e,f){if(typeof b!=='function')var b=a('/node_modules/amdefine/amdefine.js',c)(c,a);b(function(d,i,e){function b(d){var b=d;typeof d==='string'&&(b=JSON.parse(d.replace(/^\)\]\}'/,'')));var e=a.getArg(b,'version'),c=a.getArg(b,'sources'),g=a.getArg(b,'names',[]),h=a.getArg(b,'sourceRoot',null),i=a.getArg(b,'sourcesContent',null),j=a.getArg(b,'mappings'),k=a.getArg(b,'file',null);if(e!=this._version)throw new Error('Unsupported version: '+e);c=c.map(a.normalize),this._names=f.fromArray(g,!0),this._sources=f.fromArray(c,!0),this.sourceRoot=h,this.sourcesContent=i,this._mappings=j,this.file=k}var a=d('/node_modules/source-map/lib/source-map/util.js',e),h=d('/node_modules/source-map/lib/source-map/binary-search.js',e),f=d('/node_modules/source-map/lib/source-map/array-set.js',e).ArraySet,c=d('/node_modules/source-map/lib/source-map/base64-vlq.js',e),g=d('/node_modules/source-map/lib/source-map/source-map-consumer.js',e).SourceMapConsumer;b.prototype=Object.create(g.prototype),b.prototype.consumer=g,b.fromSourceMap=function c(e){var d=Object.create(b.prototype);return d._names=f.fromArray(e._names.toArray(),!0),d._sources=f.fromArray(e._sources.toArray(),!0),d.sourceRoot=e._sourceRoot,d.sourcesContent=e._generateSourcesContent(d._sources.toArray(),d.sourceRoot),d.file=e._file,d.__generatedMappings=e._mappings.toArray().slice(),d.__originalMappings=e._mappings.toArray().slice().sort(a.compareByOriginalPositions),d},b.prototype._version=3,Object.defineProperty(b.prototype,'sources',{get:function(){return this._sources.toArray().map(function(b){return this.sourceRoot!=null?a.join(this.sourceRoot,b):b},this)}}),b.prototype._parseMappings=function b(m,n){var j=1,g=0,i=0,h=0,k=0,l=0,d=m,e={},f;while(d.length>0)if(d.charAt(0)===';')j++,d=d.slice(1),g=0;else if(d.charAt(0)===',')d=d.slice(1);else{if(f={},f.generatedLine=j,c.decode(d,e),f.generatedColumn=g+e.value,g=f.generatedColumn,d=e.rest,d.length>0&&!this._nextCharIsMappingSeparator(d)){if(c.decode(d,e),f.source=this._sources.at(k+e.value),k+=e.value,d=e.rest,d.length===0||this._nextCharIsMappingSeparator(d))throw new Error('Found a source, but no line and column');if(c.decode(d,e),f.originalLine=i+e.value,i=f.originalLine,f.originalLine+=1,d=e.rest,d.length===0||this._nextCharIsMappingSeparator(d))throw new Error('Found a source and line, but no column');c.decode(d,e),f.originalColumn=h+e.value,h=f.originalColumn,d=e.rest,d.length>0&&!this._nextCharIsMappingSeparator(d)&&(c.decode(d,e),f.name=this._names.at(l+e.value),l+=e.value,d=e.rest)}this.__generatedMappings.push(f),typeof f.originalLine==='number'&&this.__originalMappings.push(f)}this.__generatedMappings.sort(a.compareByGeneratedPositions),this.__originalMappings.sort(a.compareByOriginalPositions)},b.prototype._findMapping=function a(b,e,c,d,f){if(b[c]<=0)throw new TypeError('Line must be greater than or equal to 1, got '+b[c]);if(b[d]<0)throw new TypeError('Column must be greater than or equal to 0, got '+b[d]);return h.search(b,e,f)},b.prototype.computeColumnSpans=function a(){for(var b=0;b=0){var c=this._generatedMappings[f];if(c.generatedLine===e.generatedLine){var d=a.getArg(c,'source',null);return d!=null&&this.sourceRoot!=null&&(d=a.join(this.sourceRoot,d)),{source:d,line:a.getArg(c,'originalLine',null),column:a.getArg(c,'originalColumn',null),name:a.getArg(c,'name',null)}}}return{source:null,line:null,column:null,name:null}},b.prototype.sourceContentFor=function b(c,f){if(!this.sourcesContent)return null;if(this.sourceRoot!=null&&(c=a.relative(this.sourceRoot,c)),this._sources.has(c))return this.sourcesContent[this._sources.indexOf(c)];var d;if(this.sourceRoot!=null&&(d=a.urlParse(this.sourceRoot))){var e=c.replace(/^file:\/\//,'');if(d.scheme=='file'&&this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];if((!d.path||d.path=='/')&&this._sources.has('/'+c))return this.sourcesContent[this._sources.indexOf('/'+c)]}if(f)return null;else throw new Error('"'+c+'" is not in the SourceMap.')},b.prototype.generatedPositionFor=function b(e){var c={source:a.getArg(e,'source'),originalLine:a.getArg(e,'line'),originalColumn:a.getArg(e,'column')};this.sourceRoot!=null&&(c.source=a.relative(this.sourceRoot,c.source));var f=this._findMapping(c,this._originalMappings,'originalLine','originalColumn',a.compareByOriginalPositions);if(f>=0){var d=this._originalMappings[f];return{line:a.getArg(d,'generatedLine',null),column:a.getArg(d,'generatedColumn',null),lastColumn:a.getArg(d,'lastGeneratedColumn',null)}}return{line:null,column:null,lastColumn:null}},i.BasicSourceMapConsumer=b})}),a.define('/node_modules/source-map/lib/source-map/binary-search.js',function(c,d,e,f){if(typeof b!=='function')var b=a('/node_modules/amdefine/amdefine.js',c)(c,a);b(function(c,b,d){function a(c,d,e,f,g){var b=Math.floor((d-c)/2)+c,h=g(e,f[b],!0);return h===0?b:h>0?d-b>1?a(b,d,e,f,g):b:b-c>1?a(c,b,e,f,g):c<0?-1:c}b.search=function b(d,c,e){return c.length===0?-1:a(-1,c.length,d,c,e)}})}),a.define('/node_modules/source-map/lib/source-map/indexed-source-map-consumer.js',function(c,d,e,f){if(typeof b!=='function')var b=a('/node_modules/amdefine/amdefine.js',c)(c,a);b(function(c,g,d){function b(d){var c=d;typeof d==='string'&&(c=JSON.parse(d.replace(/^\)\]\}'/,'')));var f=a.getArg(c,'version'),g=a.getArg(c,'sections');if(f!=this._version)throw new Error('Unsupported version: '+f);var b={line:-1,column:0};this._sections=g.map(function(f){if(f.url)throw new Error('Support for url field in sections not implemented.');var c=a.getArg(f,'offset'),d=a.getArg(c,'line'),g=a.getArg(c,'column');if(d=f)return!1;if(e=d.charCodeAt(a),!(56320<=e&&e<=57343))return!1;b=l(b,e)}if(!g(b))return!1;g=c.isIdentifierPartES6}return!0}function n(a,b){return h(a)&&!g(a,b)}function k(a,b){return i(a)&&!e(a,b)}c=a('/node_modules/esutils/lib/code.js',b),b.exports={isKeywordES5:f,isKeywordES6:d,isReservedWordES5:g,isReservedWordES6:e,isRestrictedWord:j,isIdentifierNameES5:h,isIdentifierNameES6:i,isIdentifierES5:n,isIdentifierES6:k}}()}),a.define('/node_modules/esutils/lib/code.js',function(a,b,c,d){!function(g,f,h,c,d,b){'use strict';function n(a){return 48<=a&&a<=57}function i(a){return 48<=a&&a<=57||97<=a&&a<=102||65<=a&&a<=70}function k(a){return a>=48&&a<=55}function l(a){return a===32||a===9||a===11||a===12||a===160||a>=5760&&h.indexOf(a)>=0}function m(a){return a===10||a===13||a===8232||a===8233}function e(a){if(a<=65535)return String.fromCharCode(a);var b=String.fromCharCode(Math.floor((a-65536)/1024)+55296),c=String.fromCharCode((a-65536)%1024+56320);return b+c}function o(a){return a<128?c[a]:f.NonAsciiIdentifierStart.test(e(a))}function p(a){return a<128?d[a]:f.NonAsciiIdentifierPart.test(e(a))}function q(a){return a<128?c[a]:g.NonAsciiIdentifierStart.test(e(a))}function j(a){return a<128?d[a]:g.NonAsciiIdentifierPart.test(e(a))}for(f={NonAsciiIdentifierStart:/[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0-\u08B2\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA7AD\uA7B0\uA7B1\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB5F\uAB64\uAB65\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]/,NonAsciiIdentifierPart:/[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u08A0-\u08B2\u08E4-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58\u0C59\u0C60-\u0C63\u0C66-\u0C6F\u0C81-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D01-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D57\u0D60-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19D9\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ABD\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1CD0-\u1CD2\u1CD4-\u1CF6\u1CF8\u1CF9\u1D00-\u1DF5\u1DFC-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u200C\u200D\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u2E2F\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099\u309A\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA69D\uA69F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA7AD\uA7B0\uA7B1\uA7F7-\uA827\uA840-\uA873\uA880-\uA8C4\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB5F\uAB64\uAB65\uABC0-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2D\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]/},g={NonAsciiIdentifierStart:/[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0-\u08B2\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2118-\u211D\u2124\u2126\u2128\u212A-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309B-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA7AD\uA7B0\uA7B1\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB5F\uAB64\uAB65\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF30-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDE00-\uDE11\uDE13-\uDE2B\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF5D-\uDF61]|\uD805[\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDE00-\uDE2F\uDE44\uDE80-\uDEAA]|\uD806[\uDCA0-\uDCDF\uDCFF\uDEC0-\uDEF8]|\uD808[\uDC00-\uDF98]|\uD809[\uDC00-\uDC6E]|[\uD80C\uD840-\uD868\uD86A-\uD86C][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50\uDF93-\uDF9F]|\uD82C[\uDC00\uDC01]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD83A[\uDC00-\uDCC4]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D]|\uD87E[\uDC00-\uDE1D]/,NonAsciiIdentifierPart:/[\xAA\xB5\xB7\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u08A0-\u08B2\u08E4-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58\u0C59\u0C60-\u0C63\u0C66-\u0C6F\u0C81-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D01-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D57\u0D60-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1369-\u1371\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19DA\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ABD\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1CD0-\u1CD2\u1CD4-\u1CF6\u1CF8\u1CF9\u1D00-\u1DF5\u1DFC-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u200C\u200D\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2118-\u211D\u2124\u2126\u2128\u212A-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA69D\uA69F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA7AD\uA7B0\uA7B1\uA7F7-\uA827\uA840-\uA873\uA880-\uA8C4\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB5F\uAB64\uAB65\uABC0-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2D\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDDFD\uDE80-\uDE9C\uDEA0-\uDED0\uDEE0\uDF00-\uDF1F\uDF30-\uDF4A\uDF50-\uDF7A\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00-\uDE03\uDE05\uDE06\uDE0C-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE38-\uDE3A\uDE3F\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE6\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48]|\uD804[\uDC00-\uDC46\uDC66-\uDC6F\uDC7F-\uDCBA\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD00-\uDD34\uDD36-\uDD3F\uDD50-\uDD73\uDD76\uDD80-\uDDC4\uDDD0-\uDDDA\uDE00-\uDE11\uDE13-\uDE37\uDEB0-\uDEEA\uDEF0-\uDEF9\uDF01-\uDF03\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3C-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF57\uDF5D-\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC80-\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDB5\uDDB8-\uDDC0\uDE00-\uDE40\uDE44\uDE50-\uDE59\uDE80-\uDEB7\uDEC0-\uDEC9]|\uD806[\uDCA0-\uDCE9\uDCFF\uDEC0-\uDEF8]|\uD808[\uDC00-\uDF98]|\uD809[\uDC00-\uDC6E]|[\uD80C\uD840-\uD868\uD86A-\uD86C][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDED0-\uDEED\uDEF0-\uDEF4\uDF00-\uDF36\uDF40-\uDF43\uDF50-\uDF59\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50-\uDF7E\uDF8F-\uDF9F]|\uD82C[\uDC00\uDC01]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99\uDC9D\uDC9E]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD83A[\uDC00-\uDCC4\uDCD0-\uDCD6]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D]|\uD87E[\uDC00-\uDE1D]|\uDB40[\uDD00-\uDDEF]/},h=[5760,6158,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8239,8287,12288,65279],c=new Array(128),b=0;b<128;++b)c[b]=b>=97&&b<=122||b>=65&&b<=90||b===36||b===95;for(d=new Array(128),b=0;b<128;++b)d[b]=b>=97&&b<=122||b>=65&&b<=90||b>=48&&b<=57||b===36||b===95;a.exports={isDecimalDigit:n,isHexDigit:i,isOctalDigit:k,isWhiteSpace:l,isLineTerminator:m,isIdentifierStartES5:o,isIdentifierPartES5:p,isIdentifierStartES6:q,isIdentifierPartES6:j}}()}),a.define('/node_modules/esutils/lib/ast.js',function(a,b,c,d){!function(){'use strict';function d(a){if(a==null)return!1;switch(a.type){case'ArrayExpression':case'AssignmentExpression':case'BinaryExpression':case'CallExpression':case'ConditionalExpression':case'FunctionExpression':case'Identifier':case'Literal':case'LogicalExpression':case'MemberExpression':case'NewExpression':case'ObjectExpression':case'SequenceExpression':case'ThisExpression':case'UnaryExpression':case'UpdateExpression':return!0}return!1}function e(a){if(a==null)return!1;switch(a.type){case'DoWhileStatement':case'ForInStatement':case'ForStatement':case'WhileStatement':return!0}return!1}function b(a){if(a==null)return!1;switch(a.type){case'BlockStatement':case'BreakStatement':case'ContinueStatement':case'DebuggerStatement':case'DoWhileStatement':case'EmptyStatement':case'ExpressionStatement':case'ForInStatement':case'ForStatement':case'IfStatement':case'LabeledStatement':case'ReturnStatement':case'SwitchStatement':case'ThrowStatement':case'TryStatement':case'VariableDeclaration':case'WhileStatement':case'WithStatement':return!0}return!1}function f(a){return b(a)||a!=null&&a.type==='FunctionDeclaration'}function c(a){switch(a.type){case'IfStatement':return a.alternate!=null?a.alternate:a.consequent;case'LabeledStatement':case'ForStatement':case'ForInStatement':case'WhileStatement':case'WithStatement':return a.body}return null}function g(b){var a;if(b.type!=='IfStatement')return!1;if(b.alternate==null)return!1;a=b.consequent;do{if(a.type==='IfStatement'&&a.alternate==null)return!0;a=c(a)}while(a);return!1}a.exports={isExpression:d,isStatement:b,isIterationStatement:e,isSourceElement:f,isProblematicIfStatement:g,trailingStatement:c}}()}),a.define('/node_modules/estraverse/estraverse.js',function(b,a,c,d){!function(c,b){'use strict';typeof define==='function'&&define.amd?define(['exports'],b):a!==void 0?b(a):b(c.estraverse={})}(this,function a(d){'use strict';function s(){}function p(d){var c={},a,b;for(a in d)d.hasOwnProperty(a)&&(b=d[a],typeof b==='object'&&b!==null?c[a]=p(b):c[a]=b);return c}function y(b){var c={},a;for(a in b)b.hasOwnProperty(a)&&(c[a]=b[a]);return c}function x(e,f){var b,a,c,d;a=e.length,c=0;while(a)b=a>>>1,d=c+b,f(e[d])?a=b:(c=d+1,a-=b+1);return c}function t(e,f){var b,a,c,d;a=e.length,c=0;while(a)b=a>>>1,d=c+b,f(e[d])?(c=d+1,a-=b+1):a=b;return c}function u(d,e){var b=l(e),c,a,f;for(a=0,f=b.length;aa.range[0]}),a.extendedRange=[a.range[0],a.range[1]],b!==c.length&&(a.extendedRange[1]=c[b].range[0]),b-=1,b>=0&&(a.extendedRange[0]=c[b].range[1]),a}function v(d,e,h){var a=[],g,f,c,b;if(!d.range)throw new Error('attachComments needs range information');if(!h.length){if(e.length){for(c=0,f=e.length;cc.range[0])break;d.extendedRange[1]===c.range[0]?(c.leadingComments||(c.leadingComments=[]),c.leadingComments.push(d),a.splice(b,1)):b+=1}return b===a.length?j.Break:a[b].extendedRange[0]>c.range[1]?j.Skip:void 0}}),b=0,o(d,{leave:function(c){var d;while(bc.range[1]?j.Skip:void 0}}),d}var m,h,j,n,r,l,c,g,f;return h=Array.isArray,h||(h=function a(b){return Object.prototype.toString.call(b)==='[object Array]'}),s(y),s(t),r=Object.create||function(){function a(){}return function(b){return a.prototype=b,new a}}(),l=Object.keys||function(c){var a=[],b;for(b in c)a.push(b);return a},m={AssignmentExpression:'AssignmentExpression',ArrayExpression:'ArrayExpression',ArrayPattern:'ArrayPattern',ArrowFunctionExpression:'ArrowFunctionExpression',AwaitExpression:'AwaitExpression',BlockStatement:'BlockStatement',BinaryExpression:'BinaryExpression',BreakStatement:'BreakStatement',CallExpression:'CallExpression',CatchClause:'CatchClause',ClassBody:'ClassBody',ClassDeclaration:'ClassDeclaration',ClassExpression:'ClassExpression',ComprehensionBlock:'ComprehensionBlock',ComprehensionExpression:'ComprehensionExpression',ConditionalExpression:'ConditionalExpression',ContinueStatement:'ContinueStatement',DebuggerStatement:'DebuggerStatement',DirectiveStatement:'DirectiveStatement',DoWhileStatement:'DoWhileStatement',EmptyStatement:'EmptyStatement',ExportBatchSpecifier:'ExportBatchSpecifier',ExportDeclaration:'ExportDeclaration',ExportSpecifier:'ExportSpecifier',ExpressionStatement:'ExpressionStatement',ForStatement:'ForStatement',ForInStatement:'ForInStatement',ForOfStatement:'ForOfStatement',FunctionDeclaration:'FunctionDeclaration',FunctionExpression:'FunctionExpression',GeneratorExpression:'GeneratorExpression',Identifier:'Identifier',IfStatement:'IfStatement',ImportDeclaration:'ImportDeclaration',ImportDefaultSpecifier:'ImportDefaultSpecifier',ImportNamespaceSpecifier:'ImportNamespaceSpecifier',ImportSpecifier:'ImportSpecifier',Literal:'Literal',LabeledStatement:'LabeledStatement',LogicalExpression:'LogicalExpression',MemberExpression:'MemberExpression',MethodDefinition:'MethodDefinition',ModuleSpecifier:'ModuleSpecifier',NewExpression:'NewExpression',ObjectExpression:'ObjectExpression',ObjectPattern:'ObjectPattern',Program:'Program',Property:'Property',ReturnStatement:'ReturnStatement',SequenceExpression:'SequenceExpression',SpreadElement:'SpreadElement',SwitchStatement:'SwitchStatement',SwitchCase:'SwitchCase',TaggedTemplateExpression:'TaggedTemplateExpression',TemplateElement:'TemplateElement',TemplateLiteral:'TemplateLiteral',ThisExpression:'ThisExpression',ThrowStatement:'ThrowStatement',TryStatement:'TryStatement',UnaryExpression:'UnaryExpression',UpdateExpression:'UpdateExpression',VariableDeclaration:'VariableDeclaration',VariableDeclarator:'VariableDeclarator',WhileStatement:'WhileStatement',WithStatement:'WithStatement',YieldExpression:'YieldExpression'},n={AssignmentExpression:['left','right'],ArrayExpression:['elements'],ArrayPattern:['elements'],ArrowFunctionExpression:['params','defaults','rest','body'],AwaitExpression:['argument'],BlockStatement:['body'],BinaryExpression:['left','right'],BreakStatement:['label'],CallExpression:['callee','arguments'],CatchClause:['param','body'],ClassBody:['body'],ClassDeclaration:['id','body','superClass'],ClassExpression:['id','body','superClass'],ComprehensionBlock:['left','right'],ComprehensionExpression:['blocks','filter','body'],ConditionalExpression:['test','consequent','alternate'],ContinueStatement:['label'],DebuggerStatement:[],DirectiveStatement:[],DoWhileStatement:['body','test'],EmptyStatement:[],ExportBatchSpecifier:[],ExportDeclaration:['declaration','specifiers','source'],ExportSpecifier:['id','name'],ExpressionStatement:['expression'],ForStatement:['init','test','update','body'],ForInStatement:['left','right','body'],ForOfStatement:['left','right','body'],FunctionDeclaration:['id','params','defaults','rest','body'],FunctionExpression:['id','params','defaults','rest','body'],GeneratorExpression:['blocks','filter','body'],Identifier:[],IfStatement:['test','consequent','alternate'],ImportDeclaration:['specifiers','source'],ImportDefaultSpecifier:['id'],ImportNamespaceSpecifier:['id'],ImportSpecifier:['id','name'],Literal:[],LabeledStatement:['label','body'],LogicalExpression:['left','right'],MemberExpression:['object','property'],MethodDefinition:['key','value'],ModuleSpecifier:[],NewExpression:['callee','arguments'],ObjectExpression:['properties'],ObjectPattern:['properties'],Program:['body'],Property:['key','value'],ReturnStatement:['argument'],SequenceExpression:['expressions'],SpreadElement:['argument'],SwitchStatement:['discriminant','cases'],SwitchCase:['test','consequent'],TaggedTemplateExpression:['tag','quasi'],TemplateElement:[],TemplateLiteral:['quasis','expressions'],ThisExpression:[],ThrowStatement:['argument'],TryStatement:['block','handlers','handler','guardedHandlers','finalizer'],UnaryExpression:['argument'],UpdateExpression:['argument'],VariableDeclaration:['declarations'],VariableDeclarator:['id','init'],WhileStatement:['test','body'],WithStatement:['object','body'],YieldExpression:['argument']},c={},g={},f={},j={Break:c,Skip:g,Remove:f},i.prototype.replace=function a(b){this.parent[this.key]=b},i.prototype.remove=function a(){return h(this.parent)?(this.parent.splice(this.key,1),!0):(this.replace(null),!1)},b.prototype.path=function a(){function e(b,a){if(h(a))for(c=0,g=a.length;c=0){if(n=j[p],d=o[n],!d)continue;if(h(d)){f=d.length;while((f-=1)>=0){if(!d[f])continue;if(q(s,j[p]))b=new e(d[f],[n,f],'Property',null);else if(k(d[f]))b=new e(d[f],[n,f],null,null);else continue;i.push(b)}}else k(d)&&i.push(new e(d,n,null,null))}}}},b.prototype.replace=function a(w,x){function z(b){var c,d,a,e;if(b.ref.remove()){d=b.ref.key,e=b.ref.parent,c=n.length;while(c--)if(a=n[c],a.ref&&a.ref.parent===e){if(a.ref.key=0){if(r=o[u],j=p[r],!j)continue;if(h(j)){m=j.length;while((m-=1)>=0){if(!j[m])continue;if(q(t,o[u]))b=new e(j[m],[r,m],'Property',new i(j,m));else if(k(j[m]))b=new e(j[m],[r,m],null,new i(j,m));else continue;n.push(b)}}else k(j)&&n.push(new e(j,r,null,new i(p,r)))}}return s.root},d.version='1.8.1-dev',d.Syntax=m,d.traverse=o,d.replace=w,d.attachComments=v,d.VisitorKeys=n,d.VisitorOption=j,d.Controller=b,d.cloneEnvironment=function(){return a({})},d})}),a('/tools/entry-point.js')}.call(this,this)) --------------------------------------------------------------------------------