[
  {
    "path": "01-spring-boot-hello-world-rest-api/pom.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n\txmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n\txsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\">\n\t<modelVersion>4.0.0</modelVersion>\n\n\t<groupId>com.in28minutes.rest.webservices</groupId>\n\t<artifactId>01-spring-boot-hello-world-rest-api</artifactId>\n\t<version>0.0.1-SNAPSHOT</version>\n\t<packaging>jar</packaging>\n\t<description>Demo project for Spring Boot</description>\n\n\t<parent>\n\t\t<groupId>org.springframework.boot</groupId>\n\t\t<artifactId>spring-boot-starter-parent</artifactId>\n\t\t<version>2.1.0.RELEASE</version>\n\t\t<relativePath /> <!-- lookup parent from repository -->\n\t</parent>\n\n\t<properties>\n\t\t<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>\n\t\t<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>\n\t\t<java.version>1.8</java.version>\n\t</properties>\n\n\t<dependencies>\n\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t<artifactId>spring-boot-starter-web</artifactId>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t<artifactId>spring-boot-devtools</artifactId>\n\t\t\t<scope>runtime</scope>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>com.h2database</groupId>\n\t\t\t<artifactId>h2</artifactId>\n\t\t\t<scope>runtime</scope>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>javax.xml.bind</groupId>\n\t\t\t<artifactId>jaxb-api</artifactId>\n\t\t\t<version>2.3.0</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>com.sun.xml.bind</groupId>\n\t\t\t<artifactId>jaxb-impl</artifactId>\n\t\t\t<version>2.3.0</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>org.glassfish.jaxb</groupId>\n\t\t\t<artifactId>jaxb-runtime</artifactId>\n\t\t\t<version>2.3.0</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>javax.activation</groupId>\n\t\t\t<artifactId>activation</artifactId>\n\t\t\t<version>1.1.1</version>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t<artifactId>spring-boot-starter-test</artifactId>\n\t\t\t<scope>test</scope>\n\t\t</dependency>\n\t</dependencies>\n\n\t<build>\n\t\t<plugins>\n\t\t\t<plugin>\n\t\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t\t<artifactId>spring-boot-maven-plugin</artifactId>\n\t\t\t</plugin>\n\t\t</plugins>\n\t</build>\n\n\t<repositories>\n\t\t<repository>\n\t\t\t<id>spring-snapshots</id>\n\t\t\t<name>Spring Snapshots</name>\n\t\t\t<url>https://repo.spring.io/snapshot</url>\n\t\t\t<snapshots>\n\t\t\t\t<enabled>true</enabled>\n\t\t\t</snapshots>\n\t\t</repository>\n\t\t<repository>\n\t\t\t<id>spring-milestones</id>\n\t\t\t<name>Spring Milestones</name>\n\t\t\t<url>https://repo.spring.io/milestone</url>\n\t\t\t<snapshots>\n\t\t\t\t<enabled>false</enabled>\n\t\t\t</snapshots>\n\t\t</repository>\n\t</repositories>\n\n\t<pluginRepositories>\n\t\t<pluginRepository>\n\t\t\t<id>spring-snapshots</id>\n\t\t\t<name>Spring Snapshots</name>\n\t\t\t<url>https://repo.spring.io/snapshot</url>\n\t\t\t<snapshots>\n\t\t\t\t<enabled>true</enabled>\n\t\t\t</snapshots>\n\t\t</pluginRepository>\n\t\t<pluginRepository>\n\t\t\t<id>spring-milestones</id>\n\t\t\t<name>Spring Milestones</name>\n\t\t\t<url>https://repo.spring.io/milestone</url>\n\t\t\t<snapshots>\n\t\t\t\t<enabled>false</enabled>\n\t\t\t</snapshots>\n\t\t</pluginRepository>\n\t</pluginRepositories>\n\n\n</project>\n"
  },
  {
    "path": "01-spring-boot-hello-world-rest-api/readme.md",
    "content": "# Hello World Rest API running on port 5000\n\nRun com.in28minutes.rest.webservices.restfulwebservices.RestfulWebServicesApplication as a Java Application.\n\n- http://localhost:5000/hello-world\n\n```txt\nHello World\n```\n\n- http://localhost:5000/hello-world-bean\n\n```json\n{\"message\":\"Hello World - Changed\"}\n```\n\n- http://localhost:5000/hello-world/path-variable/in28minutes\n\n```json\n{\"message\":\"Hello World, in28minutes\"}\n```\n\n"
  },
  {
    "path": "01-spring-boot-hello-world-rest-api/src/main/java/com/in28minutes/rest/webservices/restfulwebservices/HelloWorldBean.java",
    "content": "package com.in28minutes.rest.webservices.restfulwebservices;\n\npublic class HelloWorldBean {\n\n\tprivate String message;\n\n\tpublic HelloWorldBean(String message) {\n\t\tthis.message = message;\n\t}\n\n\tpublic String getMessage() {\n\t\treturn message;\n\t}\n\n\tpublic void setMessage(String message) {\n\t\tthis.message = message;\n\t}\n\n\t@Override\n\tpublic String toString() {\n\t\treturn String.format(\"HelloWorldBean [message=%s]\", message);\n\t}\n\n}\n"
  },
  {
    "path": "01-spring-boot-hello-world-rest-api/src/main/java/com/in28minutes/rest/webservices/restfulwebservices/HelloWorldController.java",
    "content": "package com.in28minutes.rest.webservices.restfulwebservices;\n\nimport org.springframework.web.bind.annotation.GetMapping;\nimport org.springframework.web.bind.annotation.PathVariable;\nimport org.springframework.web.bind.annotation.RestController;\n\n@RestController\npublic class HelloWorldController {\n\n\t@GetMapping(path = \"/hello-world\")\n\tpublic String helloWorld() {\n\t\treturn \"Hello World\";\n\t}\n\n\t@GetMapping(path = \"/hello-world-bean\")\n\tpublic HelloWorldBean helloWorldBean() {\n\t\t//throw new RuntimeException(\"Some Error has Happened! Contact Support at ***-***\");\n\t\treturn new HelloWorldBean(\"Hello World - Changed\");\n\t}\n\t\n\t///hello-world/path-variable/in28minutes\n\t@GetMapping(path = \"/hello-world/path-variable/{name}\")\n\tpublic HelloWorldBean helloWorldPathVariable(@PathVariable String name) {\n\t\treturn new HelloWorldBean(String.format(\"Hello World, %s\", name));\n\t}\n}\n"
  },
  {
    "path": "01-spring-boot-hello-world-rest-api/src/main/java/com/in28minutes/rest/webservices/restfulwebservices/RestfulWebServicesApplication.java",
    "content": "package com.in28minutes.rest.webservices.restfulwebservices;\n\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boot.autoconfigure.SpringBootApplication;\n\n@SpringBootApplication\npublic class RestfulWebServicesApplication {\n\n\tpublic static void main(String[] args) {\n\t\tSpringApplication.run(RestfulWebServicesApplication.class, args);\n\t}\n}"
  },
  {
    "path": "01-spring-boot-hello-world-rest-api/src/main/resources/application.properties",
    "content": "logging.level.org.springframework = debug\n\n#AWS Elastic Beanstalk assumes that the application will listen on port 5000.\nserver.port=5000 "
  },
  {
    "path": "01-spring-boot-hello-world-rest-api/src/test/java/com/in28minutes/rest/webservices/restfulwebservices/RestfulWebServicesApplicationTests.java",
    "content": "package com.in28minutes.rest.webservices.restfulwebservices;\n\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.springframework.boot.test.context.SpringBootTest;\nimport org.springframework.test.context.junit4.SpringRunner;\n\n@RunWith(SpringRunner.class)\n@SpringBootTest\npublic class RestfulWebServicesApplicationTests {\n\n\t@Test\n\tpublic void contextLoads() {\n\t}\n\n}\n"
  },
  {
    "path": "02-spring-boot-todo-rest-api-h2/pom.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n\txsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\">\n\t<modelVersion>4.0.0</modelVersion>\n\n\t<groupId>com.in28minutes.rest.webservices</groupId>\n\t<artifactId>02-todo-rest-api-h2</artifactId>\n\t<version>0.0.1-SNAPSHOT</version>\n\t<packaging>jar</packaging>\n\n\t<description>Demo project for Spring Boot</description>\n\n\t<parent>\n\t\t<groupId>org.springframework.boot</groupId>\n\t\t<artifactId>spring-boot-starter-parent</artifactId>\n\t\t<version>2.1.0.RELEASE</version>\n\t\t<relativePath /> <!-- lookup parent from repository -->\n\t</parent>\n\n\t<properties>\n\t\t<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>\n\t\t<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>\n\t\t<java.version>1.8</java.version>\n\t</properties>\n\n\t<dependencies>\n\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t<artifactId>spring-boot-starter-data-jpa</artifactId>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t<artifactId>spring-boot-starter-web</artifactId>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t<artifactId>spring-boot-devtools</artifactId>\n\t\t\t<scope>runtime</scope>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>com.h2database</groupId>\n\t\t\t<artifactId>h2</artifactId>\n\t\t\t<scope>runtime</scope>\n\t\t</dependency>\n\n\n\n\t\t<dependency>\n\t\t\t<groupId>javax.xml.bind</groupId>\n\t\t\t<artifactId>jaxb-api</artifactId>\n\t\t\t<version>2.3.0</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>com.sun.xml.bind</groupId>\n\t\t\t<artifactId>jaxb-impl</artifactId>\n\t\t\t<version>2.3.0</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>org.glassfish.jaxb</groupId>\n\t\t\t<artifactId>jaxb-runtime</artifactId>\n\t\t\t<version>2.3.0</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>javax.activation</groupId>\n\t\t\t<artifactId>activation</artifactId>\n\t\t\t<version>1.1.1</version>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t<artifactId>spring-boot-starter-test</artifactId>\n\t\t\t<scope>test</scope>\n\t\t</dependency>\n\t</dependencies>\n\n\t<build>\n\t\t<plugins>\n\t\t\t<plugin>\n\t\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t\t<artifactId>spring-boot-maven-plugin</artifactId>\n\t\t\t</plugin>\n\t\t</plugins>\n\t</build>\n\n\t<repositories>\n\t\t<repository>\n\t\t\t<id>spring-snapshots</id>\n\t\t\t<name>Spring Snapshots</name>\n\t\t\t<url>https://repo.spring.io/snapshot</url>\n\t\t\t<snapshots>\n\t\t\t\t<enabled>true</enabled>\n\t\t\t</snapshots>\n\t\t</repository>\n\t\t<repository>\n\t\t\t<id>spring-milestones</id>\n\t\t\t<name>Spring Milestones</name>\n\t\t\t<url>https://repo.spring.io/milestone</url>\n\t\t\t<snapshots>\n\t\t\t\t<enabled>false</enabled>\n\t\t\t</snapshots>\n\t\t</repository>\n\t</repositories>\n\n\t<pluginRepositories>\n\t\t<pluginRepository>\n\t\t\t<id>spring-snapshots</id>\n\t\t\t<name>Spring Snapshots</name>\n\t\t\t<url>https://repo.spring.io/snapshot</url>\n\t\t\t<snapshots>\n\t\t\t\t<enabled>true</enabled>\n\t\t\t</snapshots>\n\t\t</pluginRepository>\n\t\t<pluginRepository>\n\t\t\t<id>spring-milestones</id>\n\t\t\t<name>Spring Milestones</name>\n\t\t\t<url>https://repo.spring.io/milestone</url>\n\t\t\t<snapshots>\n\t\t\t\t<enabled>false</enabled>\n\t\t\t</snapshots>\n\t\t</pluginRepository>\n\t</pluginRepositories>\n\n\n</project>\n"
  },
  {
    "path": "02-spring-boot-todo-rest-api-h2/readme.md",
    "content": "# Todo and Hello World Rest APIs Connecting to H2 In memory database running on port 5000\n\nRun com.in28minutes.rest.webservices.restfulwebservices.RestfulWebServicesApplication as a Java Application.\n\n\n## Hello World Resource\n\n- http://localhost:5000/hello-world\n\n```txt\nHello World\n```\n\n- http://localhost:5000/hello-world-bean\n\n```json\n{\"message\":\"Hello World - Changed\"}\n```\n\n- http://localhost:5000/hello-world/path-variable/in28minutes\n\n```json\n{\"message\":\"Hello World, in28minutes\"}\n```\n\n\n## Todo Resource\n\n- GET - http://localhost:5000/jpa/users/in28minutes/todos\n\n```\n[\n  {\n    \"id\": 10001,\n    \"username\": \"in28minutes\",\n    \"description\": \"Learn JPA\",\n    \"targetDate\": \"2019-06-27T06:30:30.696+0000\",\n    \"done\": false\n  },\n  {\n    \"id\": 10002,\n    \"username\": \"in28minutes\",\n    \"description\": \"Learn Data JPA\",\n    \"targetDate\": \"2019-06-27T06:30:30.700+0000\",\n    \"done\": false\n  },\n  {\n    \"id\": 10003,\n    \"username\": \"in28minutes\",\n    \"description\": \"Learn Microservices\",\n    \"targetDate\": \"2019-06-27T06:30:30.701+0000\",\n    \"done\": false\n  }\n]\n```\n\n#### Retrieve a specific todo\n\n- GET - http://localhost:5000/jpa/users/in28minutes/todos/10001\n\n```\n{\n  \"id\": 10001,\n  \"username\": \"in28minutes\",\n  \"description\": \"Learn JPA\",\n  \"targetDate\": \"2019-06-27T06:30:30.696+0000\",\n  \"done\": false\n}\n```\n\n#### Creating a new todo\n\n\n\n- POST to http://localhost:5000/jpa/users/in28minutes/todos with BODY of Request given below\n\n```\n{\n  \"username\": \"in28minutes\",\n  \"description\": \"Learn to Drive a Car\",\n  \"targetDate\": \"2030-11-09T10:49:23.566+0000\",\n  \"done\": false\n}\n```\n\n#### Updating an existing todo\n\n- PUT Request to http://localhost:5000/jpa/users/in28minutes/todos/10001 with BODY of Request given below\n\n```\n{\n  \"id\": 10001,\n  \"username\": \"in28minutes\",\n  \"description\": \"Learn to Drive a Car\",\n  \"targetDate\": \"2045-11-09T10:49:23.566+0000\",\n  \"done\": false\n}\n```\n\n#### Delete todo\n\n- DELETE to http://localhost:5000/jpa/users/in28minutes/todos/10001\n\n\n## H2 Console\n\n- http://localhost:5000/h2-console\n- Use `jdbc:h2:mem:testdb` as JDBC URL \n\n\n## Build Spec for AWS Code Pipeline\n```\nversion: 0.2\n            \nphases:\n  install:\n    runtime-versions:\n      java: openjdk8\n    commands:\n      - echo install\n  pre_build:\n    commands:\n      - echo pre_build\n  build:\n    commands:\n      - mvn package\n      - echo build\n  post_build:\n    commands:\n      - echo post_build\n\nartifacts:\n  files:\n    - target/spring-boot-todo-rest-api-h2-aws-codepipeline-0.0.1-SNAPSHOT.jar\n```"
  },
  {
    "path": "02-spring-boot-todo-rest-api-h2/src/main/java/com/in28minutes/rest/webservices/restfulwebservices/RestfulWebServicesApplication.java",
    "content": "package com.in28minutes.rest.webservices.restfulwebservices;\n\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boot.autoconfigure.SpringBootApplication;\n\n@SpringBootApplication\npublic class RestfulWebServicesApplication {\n\n\tpublic static void main(String[] args) {\n\t\tSpringApplication.run(RestfulWebServicesApplication.class, args);\n\t}\n}\n"
  },
  {
    "path": "02-spring-boot-todo-rest-api-h2/src/main/java/com/in28minutes/rest/webservices/restfulwebservices/helloworld/HelloWorldBean.java",
    "content": "package com.in28minutes.rest.webservices.restfulwebservices.helloworld;\n\npublic class HelloWorldBean {\n\n\tprivate String message;\n\n\tpublic HelloWorldBean(String message) {\n\t\tthis.message = message;\n\t}\n\n\tpublic String getMessage() {\n\t\treturn message;\n\t}\n\n\tpublic void setMessage(String message) {\n\t\tthis.message = message;\n\t}\n\n\t@Override\n\tpublic String toString() {\n\t\treturn String.format(\"HelloWorldBean [message=%s]\", message);\n\t}\n\n}\n"
  },
  {
    "path": "02-spring-boot-todo-rest-api-h2/src/main/java/com/in28minutes/rest/webservices/restfulwebservices/helloworld/HelloWorldController.java",
    "content": "package com.in28minutes.rest.webservices.restfulwebservices.helloworld;\n\nimport org.springframework.web.bind.annotation.GetMapping;\nimport org.springframework.web.bind.annotation.PathVariable;\nimport org.springframework.web.bind.annotation.RestController;\n\n//Controller\n@RestController\npublic class HelloWorldController {\n\n\t@GetMapping(path = \"/\")\n\tpublic String successResponse() {\n\t\treturn \"successResponse\";\n\t}\n\n\t@GetMapping(path = \"/hello-world\")\n\tpublic String helloWorld() {\n\t\treturn \"Hello World\";\n\t}\n\n\t@GetMapping(path = \"/hello-world-bean\")\n\tpublic HelloWorldBean helloWorldBean() {\n\t\treturn new HelloWorldBean(\"Hello World\");\n\t}\n\t\n\t///hello-world/path-variable/in28minutes\n\t@GetMapping(path = \"/hello-world/path-variable/{name}\")\n\tpublic HelloWorldBean helloWorldPathVariable(@PathVariable String name) {\n\t\t//throw new RuntimeException(\"Something went wrong\");\n\t\treturn new HelloWorldBean(String.format(\"Hello World, %s\", name));\n\t}\n}\n"
  },
  {
    "path": "02-spring-boot-todo-rest-api-h2/src/main/java/com/in28minutes/rest/webservices/restfulwebservices/todo/Todo.java",
    "content": "package com.in28minutes.rest.webservices.restfulwebservices.todo;\n\nimport java.util.Date;\n\nimport javax.persistence.Entity;\nimport javax.persistence.GeneratedValue;\nimport javax.persistence.Id;\n\n@Entity\npublic class Todo {\n\t@Id\n\t@GeneratedValue\n\tprivate Long id;\n\tprivate String username;\n\tprivate String description;\n\tprivate Date targetDate;\n\tprivate boolean isDone;\n\t\n\tpublic Todo() {\n\t\t\n\t}\n\n\tpublic Todo(long id, String username, String description, Date targetDate, boolean isDone) {\n\t\tsuper();\n\t\tthis.id = id;\n\t\tthis.username = username;\n\t\tthis.description = description;\n\t\tthis.targetDate = targetDate;\n\t\tthis.isDone = isDone;\n\t}\n\n\tpublic Long getId() {\n\t\treturn id;\n\t}\n\n\tpublic void setId(Long id) {\n\t\tthis.id = id;\n\t}\n\n\tpublic String getUsername() {\n\t\treturn username;\n\t}\n\n\tpublic void setUsername(String username) {\n\t\tthis.username = username;\n\t}\n\n\tpublic String getDescription() {\n\t\treturn description;\n\t}\n\n\tpublic void setDescription(String description) {\n\t\tthis.description = description;\n\t}\n\n\tpublic Date getTargetDate() {\n\t\treturn targetDate;\n\t}\n\n\tpublic void setTargetDate(Date targetDate) {\n\t\tthis.targetDate = targetDate;\n\t}\n\n\tpublic boolean isDone() {\n\t\treturn isDone;\n\t}\n\n\tpublic void setDone(boolean isDone) {\n\t\tthis.isDone = isDone;\n\t}\n\n\t@Override\n\tpublic int hashCode() {\n\t\tfinal int prime = 31;\n\t\tint result = 1;\n\t\tresult = prime * result + (int) (id ^ (id >>> 32));\n\t\treturn result;\n\t}\n\n\t@Override\n\tpublic boolean equals(Object obj) {\n\t\tif (this == obj)\n\t\t\treturn true;\n\t\tif (obj == null)\n\t\t\treturn false;\n\t\tif (getClass() != obj.getClass())\n\t\t\treturn false;\n\t\tTodo other = (Todo) obj;\n\t\tif (id != other.id)\n\t\t\treturn false;\n\t\treturn true;\n\t}\n\n\t\n}"
  },
  {
    "path": "02-spring-boot-todo-rest-api-h2/src/main/java/com/in28minutes/rest/webservices/restfulwebservices/todo/TodoJpaRepository.java",
    "content": "package com.in28minutes.rest.webservices.restfulwebservices.todo;\n\nimport java.util.List;\n\nimport org.springframework.data.jpa.repository.JpaRepository;\nimport org.springframework.stereotype.Repository;\n\n@Repository\npublic interface TodoJpaRepository extends JpaRepository<Todo, Long>{\n\tList<Todo> findByUsername(String username);\n}"
  },
  {
    "path": "02-spring-boot-todo-rest-api-h2/src/main/java/com/in28minutes/rest/webservices/restfulwebservices/todo/TodoJpaResource.java",
    "content": "package com.in28minutes.rest.webservices.restfulwebservices.todo;\n\nimport java.net.URI;\nimport java.util.List;\n\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.http.HttpStatus;\nimport org.springframework.http.ResponseEntity;\nimport org.springframework.web.bind.annotation.DeleteMapping;\nimport org.springframework.web.bind.annotation.GetMapping;\nimport org.springframework.web.bind.annotation.PathVariable;\nimport org.springframework.web.bind.annotation.PostMapping;\nimport org.springframework.web.bind.annotation.PutMapping;\nimport org.springframework.web.bind.annotation.RequestBody;\nimport org.springframework.web.bind.annotation.RestController;\nimport org.springframework.web.servlet.support.ServletUriComponentsBuilder;\n\n@RestController\npublic class TodoJpaResource {\n\t\n\t@Autowired\n\tprivate TodoJpaRepository todoJpaRepository;\n\n\t\n\t@GetMapping(\"/jpa/users/{username}/todos\")\n\tpublic List<Todo> getAllTodos(@PathVariable String username){\n\t\treturn todoJpaRepository.findByUsername(username);\n\t}\n\n\t@GetMapping(\"/jpa/users/{username}/todos/{id}\")\n\tpublic Todo getTodo(@PathVariable String username, @PathVariable long id){\n\t\treturn todoJpaRepository.findById(id).get();\n\t}\n\n\t@DeleteMapping(\"/jpa/users/{username}/todos/{id}\")\n\tpublic ResponseEntity<Void> deleteTodo(\n\t\t\t@PathVariable String username, @PathVariable long id) {\n\n\t\ttodoJpaRepository.deleteById(id);\n\n\t\treturn ResponseEntity.noContent().build();\n\t}\n\t\n\n\t@PutMapping(\"/jpa/users/{username}/todos/{id}\")\n\tpublic ResponseEntity<Todo> updateTodo(\n\t\t\t@PathVariable String username,\n\t\t\t@PathVariable long id, @RequestBody Todo todo){\n\t\t\n\t\ttodo.setUsername(username);\n\t\t\n\t\tTodo todoUpdated = todoJpaRepository.save(todo);\n\t\t\n\t\treturn new ResponseEntity<Todo>(todoUpdated, HttpStatus.OK);\n\t}\n\t\n\t@PostMapping(\"/jpa/users/{username}/todos\")\n\tpublic ResponseEntity<Void> createTodo(\n\t\t\t@PathVariable String username, @RequestBody Todo todo){\n\t\t\n\t\ttodo.setId(-1L);\n\t\t\t\t\n\t\tTodo createdTodo = todoJpaRepository.save(todo);\n\t\t\n\t\t//Location\n\t\t//Get current resource url\n\t\t///{id}\n\t\tURI uri = ServletUriComponentsBuilder.fromCurrentRequest()\n\t\t\t\t.path(\"/{id}\").buildAndExpand(createdTodo.getId()).toUri();\n\t\t\n\t\treturn ResponseEntity.created(uri).build();\n\t}\n\t\t\n}\n"
  },
  {
    "path": "02-spring-boot-todo-rest-api-h2/src/main/resources/application.properties",
    "content": "spring.jpa.show-sql=true\nspring.h2.console.enabled=true\nspring.h2.console.settings.web-allow-others=true\n\nlogging.level.org.springframework = info\nserver.port=5000\n"
  },
  {
    "path": "02-spring-boot-todo-rest-api-h2/src/main/resources/data.sql",
    "content": "insert into todo(id, username,description,target_date,is_done)\nvalues(10001, 'in28minutes', 'Learn JPA', sysdate(), false);\n\ninsert into todo(id, username,description,target_date,is_done)\nvalues(10002, 'in28minutes', 'Learn Data JPA', sysdate(), false);\n\ninsert into todo(id, username,description,target_date,is_done)\nvalues(10003, 'in28minutes', 'Learn Microservices', sysdate(), false);"
  },
  {
    "path": "02-spring-boot-todo-rest-api-h2/src/test/java/com/in28minutes/rest/webservices/restfulwebservices/RestfulWebServicesApplicationTests.java",
    "content": "package com.in28minutes.rest.webservices.restfulwebservices;\n\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.springframework.boot.test.context.SpringBootTest;\nimport org.springframework.test.context.junit4.SpringRunner;\n\n@RunWith(SpringRunner.class)\n@SpringBootTest\npublic class RestfulWebServicesApplicationTests {\n\n\t@Test\n\tpublic void contextLoads() {\n\t}\n\n}\n"
  },
  {
    "path": "03-spring-boot-web-application-h2/log/cron",
    "content": "Jul  4 05:29:43 ip-172-31-17-226 crond[2616]: (CRON) STARTUP (1.4.4)\nJul  4 05:29:43 ip-172-31-17-226 crond[2616]: (CRON) INFO (RANDOM_DELAY will be scaled with factor 2% if used.)\nJul  4 05:29:43 ip-172-31-17-226 crond[2616]: (CRON) INFO (running with inotify support)\nJul  4 05:30:02 ip-172-31-17-226 CROND[3106]: (root) CMD (/usr/sbin/awslogs-nanny > /dev/null 2>&1)\nJul  4 05:30:02 ip-172-31-17-226 CROND[3107]: (root) CMD (publishLogs.py --de-dupe --conf-path '/opt/elasticbeanstalk/tasks/publishlogs.d/*' --location-prefix resources/environments/logs/publish/ --num-concurrent 2)\nJul  4 05:31:01 ip-172-31-17-226 CROND[3709]: (root) CMD (/usr/sbin/awslogs-nanny > /dev/null 2>&1)\nJul  4 05:32:01 ip-172-31-17-226 CROND[3737]: (root) CMD (/usr/sbin/awslogs-nanny > /dev/null 2>&1)\nJul  4 05:33:01 ip-172-31-17-226 CROND[3765]: (root) CMD (/usr/sbin/awslogs-nanny > /dev/null 2>&1)\nJul  4 05:34:01 ip-172-31-17-226 CROND[3793]: (root) CMD (/usr/sbin/awslogs-nanny > /dev/null 2>&1)\nJul  4 05:35:01 ip-172-31-17-226 CROND[3821]: (root) CMD (/usr/sbin/awslogs-nanny > /dev/null 2>&1)\nJul  4 05:36:01 ip-172-31-17-226 CROND[3851]: (root) CMD (/usr/sbin/awslogs-nanny > /dev/null 2>&1)\nJul  4 05:37:01 ip-172-31-17-226 CROND[3879]: (root) CMD (/usr/sbin/awslogs-nanny > /dev/null 2>&1)\nJul  4 05:38:01 ip-172-31-17-226 CROND[3907]: (root) CMD (/usr/sbin/awslogs-nanny > /dev/null 2>&1)\nJul  4 05:39:01 ip-172-31-17-226 CROND[3935]: (root) CMD (/usr/sbin/awslogs-nanny > /dev/null 2>&1)\nJul  4 05:40:01 ip-172-31-17-226 CROND[3963]: (root) CMD (/usr/sbin/awslogs-nanny > /dev/null 2>&1)\nJul  4 05:41:01 ip-172-31-17-226 CROND[3993]: (root) CMD (/usr/sbin/awslogs-nanny > /dev/null 2>&1)\nJul  4 05:42:01 ip-172-31-17-226 CROND[4021]: (root) CMD (/usr/sbin/awslogs-nanny > /dev/null 2>&1)\nJul  4 05:43:01 ip-172-31-17-226 CROND[4049]: (root) CMD (/usr/sbin/awslogs-nanny > /dev/null 2>&1)\nJul  4 05:44:01 ip-172-31-17-226 CROND[4077]: (root) CMD (/usr/sbin/awslogs-nanny > /dev/null 2>&1)\nJul  4 05:45:01 ip-172-31-17-226 CROND[4106]: (root) CMD (/usr/sbin/awslogs-nanny > /dev/null 2>&1)\nJul  4 05:45:01 ip-172-31-17-226 CROND[4107]: (root) CMD (clearStaleLogPublishingRecords.py)\nJul  4 05:46:01 ip-172-31-17-226 CROND[4136]: (root) CMD (/usr/sbin/awslogs-nanny > /dev/null 2>&1)\nJul  4 05:47:01 ip-172-31-17-226 CROND[4166]: (root) CMD (/usr/sbin/awslogs-nanny > /dev/null 2>&1)\nJul  4 05:48:01 ip-172-31-17-226 CROND[4194]: (root) CMD (/usr/sbin/awslogs-nanny > /dev/null 2>&1)\nJul  4 05:49:01 ip-172-31-17-226 CROND[4222]: (root) CMD (/usr/sbin/awslogs-nanny > /dev/null 2>&1)\nJul  4 05:50:01 ip-172-31-17-226 CROND[4280]: (root) CMD (publishLogs.py --de-dupe --conf-path '/opt/elasticbeanstalk/tasks/publishlogs.d/*' --location-prefix resources/environments/logs/publish/ --num-concurrent 2)\nJul  4 05:50:01 ip-172-31-17-226 CROND[4281]: (root) CMD (/usr/sbin/awslogs-nanny > /dev/null 2>&1)\nJul  4 05:51:01 ip-172-31-17-226 CROND[4312]: (root) CMD (/usr/sbin/awslogs-nanny > /dev/null 2>&1)\nJul  4 05:52:01 ip-172-31-17-226 CROND[4342]: (root) CMD (/usr/sbin/awslogs-nanny > /dev/null 2>&1)\nJul  4 05:53:01 ip-172-31-17-226 CROND[4370]: (root) CMD (/usr/sbin/awslogs-nanny > /dev/null 2>&1)\nJul  4 05:54:01 ip-172-31-17-226 CROND[4398]: (root) CMD (/usr/sbin/awslogs-nanny > /dev/null 2>&1)\nJul  4 05:55:01 ip-172-31-17-226 CROND[4461]: (root) CMD (/usr/sbin/awslogs-nanny > /dev/null 2>&1)\nJul  4 05:56:01 ip-172-31-17-226 CROND[5171]: (root) CMD (/usr/sbin/awslogs-nanny > /dev/null 2>&1)\nJul  4 05:57:01 ip-172-31-17-226 CROND[5199]: (root) CMD (/usr/sbin/awslogs-nanny > /dev/null 2>&1)\nJul  4 05:58:01 ip-172-31-17-226 CROND[5243]: (root) CMD (/usr/sbin/awslogs-nanny > /dev/null 2>&1)\nJul  4 05:59:01 ip-172-31-17-226 CROND[5271]: (root) CMD (/usr/sbin/awslogs-nanny > /dev/null 2>&1)\nJul  4 06:00:01 ip-172-31-17-226 CROND[5299]: (root) CMD (/usr/sbin/awslogs-nanny > /dev/null 2>&1)\nJul  4 06:01:01 ip-172-31-17-226 CROND[5330]: (root) CMD (run-parts /etc/cron.hourly)\nJul  4 06:01:01 ip-172-31-17-226 CROND[5331]: (root) CMD (/usr/sbin/awslogs-nanny > /dev/null 2>&1)\nJul  4 06:01:01 ip-172-31-17-226 run-parts(/etc/cron.hourly)[5330]: starting 0anacron\nJul  4 06:01:01 ip-172-31-17-226 anacron[5350]: Anacron started on 2019-07-04\nJul  4 06:01:01 ip-172-31-17-226 anacron[5350]: Will run job `cron.daily' in 11 min.\nJul  4 06:01:01 ip-172-31-17-226 anacron[5350]: Will run job `cron.weekly' in 31 min.\nJul  4 06:01:01 ip-172-31-17-226 anacron[5350]: Will run job `cron.monthly' in 51 min.\nJul  4 06:01:01 ip-172-31-17-226 anacron[5350]: Jobs will be executed sequentially\nJul  4 06:01:01 ip-172-31-17-226 run-parts(/etc/cron.hourly)[5353]: finished 0anacron\nJul  4 06:01:01 ip-172-31-17-226 run-parts(/etc/cron.hourly)[5330]: starting cron.logcleanup.elasticbeanstalk.healthd.httpd.conf\nJul  4 06:01:01 ip-172-31-17-226 run-parts(/etc/cron.hourly)[5368]: finished cron.logcleanup.elasticbeanstalk.healthd.httpd.conf\nJul  4 06:01:01 ip-172-31-17-226 run-parts(/etc/cron.hourly)[5330]: starting cron.logcleanup.elasticbeanstalk.healthd.nginx.conf\nJul  4 06:01:01 ip-172-31-17-226 run-parts(/etc/cron.hourly)[5379]: finished cron.logcleanup.elasticbeanstalk.healthd.nginx.conf\nJul  4 06:01:01 ip-172-31-17-226 run-parts(/etc/cron.hourly)[5330]: starting cron.logrotate.elasticbeanstalk.awslogs.conf\nJul  4 06:01:01 ip-172-31-17-226 run-parts(/etc/cron.hourly)[5386]: finished cron.logrotate.elasticbeanstalk.awslogs.conf\nJul  4 06:01:01 ip-172-31-17-226 run-parts(/etc/cron.hourly)[5330]: starting cron.logrotate.elasticbeanstalk.healthd.conf\nJul  4 06:01:01 ip-172-31-17-226 run-parts(/etc/cron.hourly)[5393]: finished cron.logrotate.elasticbeanstalk.healthd.conf\nJul  4 06:01:01 ip-172-31-17-226 run-parts(/etc/cron.hourly)[5330]: starting cron.logrotate.elasticbeanstalk.httpd.conf\nJul  4 06:01:01 ip-172-31-17-226 run-parts(/etc/cron.hourly)[5400]: finished cron.logrotate.elasticbeanstalk.httpd.conf\nJul  4 06:01:01 ip-172-31-17-226 run-parts(/etc/cron.hourly)[5330]: starting cron.logrotate.elasticbeanstalk.tomcat8.conf\nJul  4 06:01:01 ip-172-31-17-226 run-parts(/etc/cron.hourly)[5407]: finished cron.logrotate.elasticbeanstalk.tomcat8.conf\n"
  },
  {
    "path": "03-spring-boot-web-application-h2/log/httpd/access_log",
    "content": "117.98.145.230 - - [04/Jul/2019:05:49:19 +0000] \"GET / HTTP/1.1\" 302 - \"-\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 - - [04/Jul/2019:05:49:20 +0000] \"GET /login HTTP/1.1\" 200 622 \"-\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 - - [04/Jul/2019:05:49:21 +0000] \"GET /favicon.ico HTTP/1.1\" 200 946 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/login\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 - - [04/Jul/2019:05:49:31 +0000] \"POST /login HTTP/1.1\" 302 - \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/login\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 - - [04/Jul/2019:05:49:33 +0000] \"POST /login HTTP/1.1\" 302 - \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/login\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 - - [04/Jul/2019:05:49:32 +0000] \"GET / HTTP/1.1\" 200 478 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/login\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 - - [04/Jul/2019:05:49:33 +0000] \"GET / HTTP/1.1\" 200 478 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/login\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 - - [04/Jul/2019:05:49:34 +0000] \"GET /webjars/bootstrap/3.3.6/css/bootstrap.min.css HTTP/1.1\" 200 19799 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 - - [04/Jul/2019:05:49:34 +0000] \"GET /webjars/jquery/1.9.1/jquery.min.js HTTP/1.1\" 200 33029 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 - - [04/Jul/2019:05:49:34 +0000] \"GET /webjars/bootstrap/3.3.6/js/bootstrap.min.js HTTP/1.1\" 200 9863 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 - - [04/Jul/2019:05:49:34 +0000] \"GET /webjars/bootstrap-datepicker/1.0.1/js/bootstrap-datepicker.js HTTP/1.1\" 200 8446 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 - - [04/Jul/2019:05:49:38 +0000] \"GET /list-todos HTTP/1.1\" 200 717 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 - - [04/Jul/2019:05:49:39 +0000] \"GET /webjars/bootstrap/3.3.6/js/bootstrap.min.js HTTP/1.1\" 200 9863 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/list-todos\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 - - [04/Jul/2019:05:49:39 +0000] \"GET /webjars/bootstrap-datepicker/1.0.1/js/bootstrap-datepicker.js HTTP/1.1\" 200 8446 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/list-todos\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 - - [04/Jul/2019:05:49:39 +0000] \"GET /webjars/bootstrap/3.3.6/css/bootstrap.min.css HTTP/1.1\" 200 19779 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/list-todos\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 - - [04/Jul/2019:05:49:39 +0000] \"GET /webjars/jquery/1.9.1/jquery.min.js HTTP/1.1\" 200 32884 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/list-todos\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 - - [04/Jul/2019:05:49:52 +0000] \"GET /h2-console HTTP/1.1\" 302 - \"-\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 - - [04/Jul/2019:05:49:53 +0000] \"GET /h2-console/ HTTP/1.1\" 200 408 \"-\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n148.163.128.145 - - [04/Jul/2019:05:51:33 +0000] \"GET / HTTP/1.1\" 302 - \"-\" \"Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0\"\n148.163.128.145 - - [04/Jul/2019:05:51:33 +0000] \"GET /login HTTP/1.1\" 200 622 \"-\" \"Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0\"\n117.98.145.230 - - [04/Jul/2019:05:55:46 +0000] \"GET /h2-console/ HTTP/1.1\" 200 615 \"-\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 - - [04/Jul/2019:05:55:47 +0000] \"GET /h2-console/stylesheet.css HTTP/1.1\" 200 1222 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/h2-console/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 - - [04/Jul/2019:05:55:47 +0000] \"GET /h2-console/login.jsp?jsessionid=a03a95bb03374ed3c500540ad5d01967 HTTP/1.1\" 200 2538 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/h2-console/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 - - [04/Jul/2019:05:55:47 +0000] \"GET /h2-console/background.gif HTTP/1.1\" 200 169 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/h2-console/stylesheet.css\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 - - [04/Jul/2019:05:55:48 +0000] \"GET /favicon.ico HTTP/1.1\" 200 946 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/h2-console/login.jsp?jsessionid=a03a95bb03374ed3c500540ad5d01967\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 - - [04/Jul/2019:05:57:07 +0000] \"POST /h2-console/login.do?jsessionid=a03a95bb03374ed3c500540ad5d01967 HTTP/1.1\" 200 591 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/h2-console/login.jsp?jsessionid=a03a95bb03374ed3c500540ad5d01967\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 - - [04/Jul/2019:05:57:09 +0000] \"GET /h2-console/stylesheet.css HTTP/1.1\" 200 1222 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/h2-console/login.do?jsessionid=a03a95bb03374ed3c500540ad5d01967\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 - - [04/Jul/2019:05:57:09 +0000] \"GET /h2-console/header.jsp?jsessionid=a03a95bb03374ed3c500540ad5d01967 HTTP/1.1\" 200 1343 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/h2-console/login.do?jsessionid=a03a95bb03374ed3c500540ad5d01967\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 - - [04/Jul/2019:05:57:10 +0000] \"GET /h2-console/query.jsp?jsessionid=a03a95bb03374ed3c500540ad5d01967 HTTP/1.1\" 200 4414 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/h2-console/login.do?jsessionid=a03a95bb03374ed3c500540ad5d01967\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 - - [04/Jul/2019:05:57:10 +0000] \"GET /h2-console/help.jsp?jsessionid=a03a95bb03374ed3c500540ad5d01967 HTTP/1.1\" 200 2148 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/h2-console/login.do?jsessionid=a03a95bb03374ed3c500540ad5d01967\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 - - [04/Jul/2019:05:57:10 +0000] \"GET /h2-console/icon_line.gif HTTP/1.1\" 200 818 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/h2-console/header.jsp?jsessionid=a03a95bb03374ed3c500540ad5d01967\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 - - [04/Jul/2019:05:57:10 +0000] \"GET /h2-console/icon_disconnect.gif HTTP/1.1\" 200 114 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/h2-console/header.jsp?jsessionid=a03a95bb03374ed3c500540ad5d01967\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 - - [04/Jul/2019:05:57:10 +0000] \"GET /h2-console/icon_refresh.gif HTTP/1.1\" 200 327 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/h2-console/header.jsp?jsessionid=a03a95bb03374ed3c500540ad5d01967\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 - - [04/Jul/2019:05:57:10 +0000] \"GET /h2-console/icon_run_selected.gif HTTP/1.1\" 200 312 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/h2-console/header.jsp?jsessionid=a03a95bb03374ed3c500540ad5d01967\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 - - [04/Jul/2019:05:57:10 +0000] \"GET /h2-console/icon_help.gif HTTP/1.1\" 200 373 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/h2-console/header.jsp?jsessionid=a03a95bb03374ed3c500540ad5d01967\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 - - [04/Jul/2019:05:57:10 +0000] \"GET /h2-console/icon_history.gif HTTP/1.1\" 200 216 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/h2-console/header.jsp?jsessionid=a03a95bb03374ed3c500540ad5d01967\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 - - [04/Jul/2019:05:57:10 +0000] \"GET /h2-console/icon_stop.gif HTTP/1.1\" 200 215 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/h2-console/header.jsp?jsessionid=a03a95bb03374ed3c500540ad5d01967\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 - - [04/Jul/2019:05:57:10 +0000] \"GET /h2-console/icon_rollback.gif HTTP/1.1\" 200 331 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/h2-console/header.jsp?jsessionid=a03a95bb03374ed3c500540ad5d01967\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 - - [04/Jul/2019:05:57:10 +0000] \"GET /h2-console/icon_commit.gif HTTP/1.1\" 200 323 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/h2-console/header.jsp?jsessionid=a03a95bb03374ed3c500540ad5d01967\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 - - [04/Jul/2019:05:57:10 +0000] \"GET /h2-console/icon_run.gif HTTP/1.1\" 200 379 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/h2-console/header.jsp?jsessionid=a03a95bb03374ed3c500540ad5d01967\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 - - [04/Jul/2019:05:57:09 +0000] \"GET /h2-console/tables.do?jsessionid=a03a95bb03374ed3c500540ad5d01967 HTTP/1.1\" 200 1371 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/h2-console/login.do?jsessionid=a03a95bb03374ed3c500540ad5d01967\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 - - [04/Jul/2019:05:57:11 +0000] \"GET /h2-console/tree.js HTTP/1.1\" 200 1043 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/h2-console/tables.do?jsessionid=a03a95bb03374ed3c500540ad5d01967\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 - - [04/Jul/2019:05:57:11 +0000] \"GET /h2-console/tree_table.gif HTTP/1.1\" 200 343 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/h2-console/tables.do?jsessionid=a03a95bb03374ed3c500540ad5d01967\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 - - [04/Jul/2019:05:57:11 +0000] \"GET /h2-console/tree_plus.gif HTTP/1.1\" 200 870 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/h2-console/tables.do?jsessionid=a03a95bb03374ed3c500540ad5d01967\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 - - [04/Jul/2019:05:57:11 +0000] \"GET /h2-console/tree_column.gif HTTP/1.1\" 200 317 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/h2-console/tables.do?jsessionid=a03a95bb03374ed3c500540ad5d01967\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 - - [04/Jul/2019:05:57:11 +0000] \"GET /h2-console/tree_empty.gif HTTP/1.1\" 200 62 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/h2-console/tables.do?jsessionid=a03a95bb03374ed3c500540ad5d01967\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 - - [04/Jul/2019:05:57:11 +0000] \"GET /h2-console/tree_database.gif HTTP/1.1\" 200 545 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/h2-console/tables.do?jsessionid=a03a95bb03374ed3c500540ad5d01967\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 - - [04/Jul/2019:05:57:11 +0000] \"GET /h2-console/tree_minus.gif HTTP/1.1\" 200 861 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/h2-console/tables.do?jsessionid=a03a95bb03374ed3c500540ad5d01967\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 - - [04/Jul/2019:05:57:11 +0000] \"GET /h2-console/tree_sequences.gif HTTP/1.1\" 200 114 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/h2-console/tables.do?jsessionid=a03a95bb03374ed3c500540ad5d01967\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 - - [04/Jul/2019:05:57:11 +0000] \"GET /h2-console/tree_info.gif HTTP/1.1\" 200 267 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/h2-console/tables.do?jsessionid=a03a95bb03374ed3c500540ad5d01967\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 - - [04/Jul/2019:05:57:11 +0000] \"GET /h2-console/tree_index_az.gif HTTP/1.1\" 200 157 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/h2-console/tables.do?jsessionid=a03a95bb03374ed3c500540ad5d01967\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 - - [04/Jul/2019:05:57:11 +0000] \"GET /h2-console/tree_folder.gif HTTP/1.1\" 200 372 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/h2-console/tables.do?jsessionid=a03a95bb03374ed3c500540ad5d01967\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 - - [04/Jul/2019:05:57:11 +0000] \"GET /h2-console/tree_type.gif HTTP/1.1\" 200 197 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/h2-console/tables.do?jsessionid=a03a95bb03374ed3c500540ad5d01967\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 - - [04/Jul/2019:05:57:11 +0000] \"GET /h2-console/tree_users.gif HTTP/1.1\" 200 601 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/h2-console/tables.do?jsessionid=a03a95bb03374ed3c500540ad5d01967\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 - - [04/Jul/2019:05:57:12 +0000] \"GET /h2-console/tree_index.gif HTTP/1.1\" 200 152 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/h2-console/tables.do?jsessionid=a03a95bb03374ed3c500540ad5d01967\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 - - [04/Jul/2019:05:57:12 +0000] \"GET /h2-console/tree_user.gif HTTP/1.1\" 200 500 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/h2-console/tables.do?jsessionid=a03a95bb03374ed3c500540ad5d01967\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 - - [04/Jul/2019:05:57:12 +0000] \"GET /h2-console/tree_sequence.gif HTTP/1.1\" 200 91 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/h2-console/tables.do?jsessionid=a03a95bb03374ed3c500540ad5d01967\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 - - [04/Jul/2019:05:57:13 +0000] \"POST /h2-console/query.do?jsessionid=a03a95bb03374ed3c500540ad5d01967 HTTP/1.1\" 200 776 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/h2-console/query.jsp?jsessionid=a03a95bb03374ed3c500540ad5d01967\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 - - [04/Jul/2019:05:57:13 +0000] \"GET /h2-console/table.js HTTP/1.1\" 200 2587 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/h2-console/query.do?jsessionid=a03a95bb03374ed3c500540ad5d01967\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 - - [04/Jul/2019:05:57:19 +0000] \"GET /delete-todo?id=10001 HTTP/1.1\" 302 - \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/list-todos\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 - - [04/Jul/2019:05:57:19 +0000] \"GET /login HTTP/1.1\" 200 622 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/list-todos\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 - - [04/Jul/2019:05:57:26 +0000] \"POST /login HTTP/1.1\" 302 - \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/login\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 - - [04/Jul/2019:05:57:27 +0000] \"GET /delete-todo?id=10001 HTTP/1.1\" 302 - \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/login\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 - - [04/Jul/2019:05:57:27 +0000] \"POST /login HTTP/1.1\" 302 - \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/login\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 - - [04/Jul/2019:05:57:28 +0000] \"GET / HTTP/1.1\" 200 478 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/login\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 - - [04/Jul/2019:05:57:27 +0000] \"GET /list-todos HTTP/1.1\" 200 695 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/login\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 - - [04/Jul/2019:05:57:29 +0000] \"GET /webjars/bootstrap/3.3.6/js/bootstrap.min.js HTTP/1.1\" 200 9863 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 - - [04/Jul/2019:05:57:29 +0000] \"GET /webjars/bootstrap-datepicker/1.0.1/js/bootstrap-datepicker.js HTTP/1.1\" 200 8446 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 - - [04/Jul/2019:05:57:29 +0000] \"GET /webjars/bootstrap/3.3.6/css/bootstrap.min.css HTTP/1.1\" 200 19871 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 - - [04/Jul/2019:05:57:29 +0000] \"GET /webjars/jquery/1.9.1/jquery.min.js HTTP/1.1\" 200 32930 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 - - [04/Jul/2019:05:57:33 +0000] \"GET /list-todos HTTP/1.1\" 200 695 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 - - [04/Jul/2019:05:57:33 +0000] \"GET /webjars/bootstrap-datepicker/1.0.1/js/bootstrap-datepicker.js HTTP/1.1\" 200 8446 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/list-todos\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 - - [04/Jul/2019:05:57:33 +0000] \"GET /webjars/bootstrap/3.3.6/js/bootstrap.min.js HTTP/1.1\" 200 9863 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/list-todos\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 - - [04/Jul/2019:05:57:33 +0000] \"GET /webjars/bootstrap/3.3.6/css/bootstrap.min.css HTTP/1.1\" 200 19871 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/list-todos\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 - - [04/Jul/2019:05:57:33 +0000] \"GET /webjars/jquery/1.9.1/jquery.min.js HTTP/1.1\" 200 32812 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/list-todos\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 - - [04/Jul/2019:05:57:41 +0000] \"POST /h2-console/query.do?jsessionid=a03a95bb03374ed3c500540ad5d01967 HTTP/1.1\" 200 757 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/h2-console/query.jsp?jsessionid=a03a95bb03374ed3c500540ad5d01967\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 - - [04/Jul/2019:05:57:42 +0000] \"GET /h2-console/table.js HTTP/1.1\" 200 2560 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/h2-console/query.do?jsessionid=a03a95bb03374ed3c500540ad5d01967\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 - - [04/Jul/2019:05:57:42 +0000] \"GET /h2-console/stylesheet.css HTTP/1.1\" 200 1222 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/h2-console/query.do?jsessionid=a03a95bb03374ed3c500540ad5d01967\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 - - [04/Jul/2019:05:58:26 +0000] \"GET /logout HTTP/1.1\" 302 - \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/list-todos\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 - - [04/Jul/2019:05:58:26 +0000] \"GET /login?logout HTTP/1.1\" 200 662 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/list-todos\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n"
  },
  {
    "path": "03-spring-boot-web-application-h2/log/httpd/elasticbeanstalk-access_log",
    "content": "117.98.145.230 (-) - - [04/Jul/2019:05:49:19 +0000] \"GET / HTTP/1.1\" 302 - \"-\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 (-) - - [04/Jul/2019:05:49:20 +0000] \"GET /login HTTP/1.1\" 200 622 \"-\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 (-) - - [04/Jul/2019:05:49:21 +0000] \"GET /favicon.ico HTTP/1.1\" 200 946 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/login\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 (-) - - [04/Jul/2019:05:49:31 +0000] \"POST /login HTTP/1.1\" 302 - \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/login\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 (-) - - [04/Jul/2019:05:49:33 +0000] \"POST /login HTTP/1.1\" 302 - \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/login\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 (-) - - [04/Jul/2019:05:49:32 +0000] \"GET / HTTP/1.1\" 200 478 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/login\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 (-) - - [04/Jul/2019:05:49:33 +0000] \"GET / HTTP/1.1\" 200 478 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/login\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 (-) - - [04/Jul/2019:05:49:34 +0000] \"GET /webjars/bootstrap/3.3.6/css/bootstrap.min.css HTTP/1.1\" 200 19799 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 (-) - - [04/Jul/2019:05:49:34 +0000] \"GET /webjars/jquery/1.9.1/jquery.min.js HTTP/1.1\" 200 33029 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 (-) - - [04/Jul/2019:05:49:34 +0000] \"GET /webjars/bootstrap/3.3.6/js/bootstrap.min.js HTTP/1.1\" 200 9863 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 (-) - - [04/Jul/2019:05:49:34 +0000] \"GET /webjars/bootstrap-datepicker/1.0.1/js/bootstrap-datepicker.js HTTP/1.1\" 200 8446 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 (-) - - [04/Jul/2019:05:49:38 +0000] \"GET /list-todos HTTP/1.1\" 200 717 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 (-) - - [04/Jul/2019:05:49:39 +0000] \"GET /webjars/jquery/1.9.1/jquery.min.js HTTP/1.1\" 200 32884 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/list-todos\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 (-) - - [04/Jul/2019:05:49:39 +0000] \"GET /webjars/bootstrap/3.3.6/js/bootstrap.min.js HTTP/1.1\" 200 9863 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/list-todos\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 (-) - - [04/Jul/2019:05:49:39 +0000] \"GET /webjars/bootstrap-datepicker/1.0.1/js/bootstrap-datepicker.js HTTP/1.1\" 200 8446 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/list-todos\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 (-) - - [04/Jul/2019:05:49:39 +0000] \"GET /webjars/bootstrap/3.3.6/css/bootstrap.min.css HTTP/1.1\" 200 19779 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/list-todos\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 (-) - - [04/Jul/2019:05:49:52 +0000] \"GET /h2-console HTTP/1.1\" 302 - \"-\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 (-) - - [04/Jul/2019:05:49:53 +0000] \"GET /h2-console/ HTTP/1.1\" 200 408 \"-\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n148.163.128.145 (-) - - [04/Jul/2019:05:51:33 +0000] \"GET / HTTP/1.1\" 302 - \"-\" \"Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0\"\n148.163.128.145 (-) - - [04/Jul/2019:05:51:33 +0000] \"GET /login HTTP/1.1\" 200 622 \"-\" \"Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0\"\n117.98.145.230 (-) - - [04/Jul/2019:05:55:46 +0000] \"GET /h2-console/ HTTP/1.1\" 200 615 \"-\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 (-) - - [04/Jul/2019:05:55:47 +0000] \"GET /h2-console/stylesheet.css HTTP/1.1\" 200 1222 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/h2-console/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 (-) - - [04/Jul/2019:05:55:47 +0000] \"GET /h2-console/login.jsp?jsessionid=a03a95bb03374ed3c500540ad5d01967 HTTP/1.1\" 200 2538 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/h2-console/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 (-) - - [04/Jul/2019:05:55:47 +0000] \"GET /h2-console/background.gif HTTP/1.1\" 200 169 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/h2-console/stylesheet.css\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 (-) - - [04/Jul/2019:05:55:48 +0000] \"GET /favicon.ico HTTP/1.1\" 200 946 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/h2-console/login.jsp?jsessionid=a03a95bb03374ed3c500540ad5d01967\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 (-) - - [04/Jul/2019:05:57:07 +0000] \"POST /h2-console/login.do?jsessionid=a03a95bb03374ed3c500540ad5d01967 HTTP/1.1\" 200 591 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/h2-console/login.jsp?jsessionid=a03a95bb03374ed3c500540ad5d01967\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 (-) - - [04/Jul/2019:05:57:09 +0000] \"GET /h2-console/stylesheet.css HTTP/1.1\" 200 1222 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/h2-console/login.do?jsessionid=a03a95bb03374ed3c500540ad5d01967\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 (-) - - [04/Jul/2019:05:57:09 +0000] \"GET /h2-console/header.jsp?jsessionid=a03a95bb03374ed3c500540ad5d01967 HTTP/1.1\" 200 1343 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/h2-console/login.do?jsessionid=a03a95bb03374ed3c500540ad5d01967\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 (-) - - [04/Jul/2019:05:57:10 +0000] \"GET /h2-console/query.jsp?jsessionid=a03a95bb03374ed3c500540ad5d01967 HTTP/1.1\" 200 4414 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/h2-console/login.do?jsessionid=a03a95bb03374ed3c500540ad5d01967\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 (-) - - [04/Jul/2019:05:57:10 +0000] \"GET /h2-console/help.jsp?jsessionid=a03a95bb03374ed3c500540ad5d01967 HTTP/1.1\" 200 2148 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/h2-console/login.do?jsessionid=a03a95bb03374ed3c500540ad5d01967\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 (-) - - [04/Jul/2019:05:57:10 +0000] \"GET /h2-console/icon_line.gif HTTP/1.1\" 200 818 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/h2-console/header.jsp?jsessionid=a03a95bb03374ed3c500540ad5d01967\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 (-) - - [04/Jul/2019:05:57:10 +0000] \"GET /h2-console/icon_disconnect.gif HTTP/1.1\" 200 114 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/h2-console/header.jsp?jsessionid=a03a95bb03374ed3c500540ad5d01967\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 (-) - - [04/Jul/2019:05:57:10 +0000] \"GET /h2-console/icon_refresh.gif HTTP/1.1\" 200 327 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/h2-console/header.jsp?jsessionid=a03a95bb03374ed3c500540ad5d01967\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 (-) - - [04/Jul/2019:05:57:10 +0000] \"GET /h2-console/icon_run_selected.gif HTTP/1.1\" 200 312 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/h2-console/header.jsp?jsessionid=a03a95bb03374ed3c500540ad5d01967\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 (-) - - [04/Jul/2019:05:57:10 +0000] \"GET /h2-console/icon_help.gif HTTP/1.1\" 200 373 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/h2-console/header.jsp?jsessionid=a03a95bb03374ed3c500540ad5d01967\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 (-) - - [04/Jul/2019:05:57:10 +0000] \"GET /h2-console/icon_history.gif HTTP/1.1\" 200 216 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/h2-console/header.jsp?jsessionid=a03a95bb03374ed3c500540ad5d01967\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 (-) - - [04/Jul/2019:05:57:10 +0000] \"GET /h2-console/icon_stop.gif HTTP/1.1\" 200 215 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/h2-console/header.jsp?jsessionid=a03a95bb03374ed3c500540ad5d01967\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 (-) - - [04/Jul/2019:05:57:10 +0000] \"GET /h2-console/icon_rollback.gif HTTP/1.1\" 200 331 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/h2-console/header.jsp?jsessionid=a03a95bb03374ed3c500540ad5d01967\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 (-) - - [04/Jul/2019:05:57:10 +0000] \"GET /h2-console/icon_commit.gif HTTP/1.1\" 200 323 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/h2-console/header.jsp?jsessionid=a03a95bb03374ed3c500540ad5d01967\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 (-) - - [04/Jul/2019:05:57:10 +0000] \"GET /h2-console/icon_run.gif HTTP/1.1\" 200 379 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/h2-console/header.jsp?jsessionid=a03a95bb03374ed3c500540ad5d01967\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 (-) - - [04/Jul/2019:05:57:09 +0000] \"GET /h2-console/tables.do?jsessionid=a03a95bb03374ed3c500540ad5d01967 HTTP/1.1\" 200 1371 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/h2-console/login.do?jsessionid=a03a95bb03374ed3c500540ad5d01967\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 (-) - - [04/Jul/2019:05:57:11 +0000] \"GET /h2-console/tree.js HTTP/1.1\" 200 1043 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/h2-console/tables.do?jsessionid=a03a95bb03374ed3c500540ad5d01967\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 (-) - - [04/Jul/2019:05:57:11 +0000] \"GET /h2-console/tree_table.gif HTTP/1.1\" 200 343 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/h2-console/tables.do?jsessionid=a03a95bb03374ed3c500540ad5d01967\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 (-) - - [04/Jul/2019:05:57:11 +0000] \"GET /h2-console/tree_plus.gif HTTP/1.1\" 200 870 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/h2-console/tables.do?jsessionid=a03a95bb03374ed3c500540ad5d01967\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 (-) - - [04/Jul/2019:05:57:11 +0000] \"GET /h2-console/tree_column.gif HTTP/1.1\" 200 317 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/h2-console/tables.do?jsessionid=a03a95bb03374ed3c500540ad5d01967\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 (-) - - [04/Jul/2019:05:57:11 +0000] \"GET /h2-console/tree_empty.gif HTTP/1.1\" 200 62 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/h2-console/tables.do?jsessionid=a03a95bb03374ed3c500540ad5d01967\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 (-) - - [04/Jul/2019:05:57:11 +0000] \"GET /h2-console/tree_database.gif HTTP/1.1\" 200 545 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/h2-console/tables.do?jsessionid=a03a95bb03374ed3c500540ad5d01967\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 (-) - - [04/Jul/2019:05:57:11 +0000] \"GET /h2-console/tree_minus.gif HTTP/1.1\" 200 861 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/h2-console/tables.do?jsessionid=a03a95bb03374ed3c500540ad5d01967\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 (-) - - [04/Jul/2019:05:57:11 +0000] \"GET /h2-console/tree_sequences.gif HTTP/1.1\" 200 114 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/h2-console/tables.do?jsessionid=a03a95bb03374ed3c500540ad5d01967\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 (-) - - [04/Jul/2019:05:57:11 +0000] \"GET /h2-console/tree_info.gif HTTP/1.1\" 200 267 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/h2-console/tables.do?jsessionid=a03a95bb03374ed3c500540ad5d01967\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 (-) - - [04/Jul/2019:05:57:11 +0000] \"GET /h2-console/tree_index_az.gif HTTP/1.1\" 200 157 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/h2-console/tables.do?jsessionid=a03a95bb03374ed3c500540ad5d01967\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 (-) - - [04/Jul/2019:05:57:11 +0000] \"GET /h2-console/tree_folder.gif HTTP/1.1\" 200 372 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/h2-console/tables.do?jsessionid=a03a95bb03374ed3c500540ad5d01967\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 (-) - - [04/Jul/2019:05:57:11 +0000] \"GET /h2-console/tree_type.gif HTTP/1.1\" 200 197 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/h2-console/tables.do?jsessionid=a03a95bb03374ed3c500540ad5d01967\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 (-) - - [04/Jul/2019:05:57:11 +0000] \"GET /h2-console/tree_users.gif HTTP/1.1\" 200 601 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/h2-console/tables.do?jsessionid=a03a95bb03374ed3c500540ad5d01967\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 (-) - - [04/Jul/2019:05:57:12 +0000] \"GET /h2-console/tree_index.gif HTTP/1.1\" 200 152 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/h2-console/tables.do?jsessionid=a03a95bb03374ed3c500540ad5d01967\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 (-) - - [04/Jul/2019:05:57:12 +0000] \"GET /h2-console/tree_user.gif HTTP/1.1\" 200 500 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/h2-console/tables.do?jsessionid=a03a95bb03374ed3c500540ad5d01967\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 (-) - - [04/Jul/2019:05:57:12 +0000] \"GET /h2-console/tree_sequence.gif HTTP/1.1\" 200 91 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/h2-console/tables.do?jsessionid=a03a95bb03374ed3c500540ad5d01967\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 (-) - - [04/Jul/2019:05:57:13 +0000] \"POST /h2-console/query.do?jsessionid=a03a95bb03374ed3c500540ad5d01967 HTTP/1.1\" 200 776 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/h2-console/query.jsp?jsessionid=a03a95bb03374ed3c500540ad5d01967\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 (-) - - [04/Jul/2019:05:57:13 +0000] \"GET /h2-console/table.js HTTP/1.1\" 200 2587 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/h2-console/query.do?jsessionid=a03a95bb03374ed3c500540ad5d01967\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 (-) - - [04/Jul/2019:05:57:19 +0000] \"GET /delete-todo?id=10001 HTTP/1.1\" 302 - \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/list-todos\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 (-) - - [04/Jul/2019:05:57:19 +0000] \"GET /login HTTP/1.1\" 200 622 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/list-todos\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 (-) - - [04/Jul/2019:05:57:26 +0000] \"POST /login HTTP/1.1\" 302 - \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/login\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 (-) - - [04/Jul/2019:05:57:27 +0000] \"GET /delete-todo?id=10001 HTTP/1.1\" 302 - \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/login\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 (-) - - [04/Jul/2019:05:57:27 +0000] \"POST /login HTTP/1.1\" 302 - \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/login\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 (-) - - [04/Jul/2019:05:57:28 +0000] \"GET / HTTP/1.1\" 200 478 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/login\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 (-) - - [04/Jul/2019:05:57:27 +0000] \"GET /list-todos HTTP/1.1\" 200 695 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/login\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 (-) - - [04/Jul/2019:05:57:29 +0000] \"GET /webjars/bootstrap/3.3.6/js/bootstrap.min.js HTTP/1.1\" 200 9863 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 (-) - - [04/Jul/2019:05:57:29 +0000] \"GET /webjars/bootstrap-datepicker/1.0.1/js/bootstrap-datepicker.js HTTP/1.1\" 200 8446 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 (-) - - [04/Jul/2019:05:57:29 +0000] \"GET /webjars/bootstrap/3.3.6/css/bootstrap.min.css HTTP/1.1\" 200 19871 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 (-) - - [04/Jul/2019:05:57:29 +0000] \"GET /webjars/jquery/1.9.1/jquery.min.js HTTP/1.1\" 200 32930 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 (-) - - [04/Jul/2019:05:57:33 +0000] \"GET /list-todos HTTP/1.1\" 200 695 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 (-) - - [04/Jul/2019:05:57:33 +0000] \"GET /webjars/bootstrap-datepicker/1.0.1/js/bootstrap-datepicker.js HTTP/1.1\" 200 8446 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/list-todos\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 (-) - - [04/Jul/2019:05:57:33 +0000] \"GET /webjars/bootstrap/3.3.6/js/bootstrap.min.js HTTP/1.1\" 200 9863 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/list-todos\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 (-) - - [04/Jul/2019:05:57:33 +0000] \"GET /webjars/bootstrap/3.3.6/css/bootstrap.min.css HTTP/1.1\" 200 19871 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/list-todos\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 (-) - - [04/Jul/2019:05:57:33 +0000] \"GET /webjars/jquery/1.9.1/jquery.min.js HTTP/1.1\" 200 32812 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/list-todos\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 (-) - - [04/Jul/2019:05:57:41 +0000] \"POST /h2-console/query.do?jsessionid=a03a95bb03374ed3c500540ad5d01967 HTTP/1.1\" 200 757 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/h2-console/query.jsp?jsessionid=a03a95bb03374ed3c500540ad5d01967\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 (-) - - [04/Jul/2019:05:57:42 +0000] \"GET /h2-console/table.js HTTP/1.1\" 200 2560 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/h2-console/query.do?jsessionid=a03a95bb03374ed3c500540ad5d01967\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 (-) - - [04/Jul/2019:05:57:42 +0000] \"GET /h2-console/stylesheet.css HTTP/1.1\" 200 1222 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/h2-console/query.do?jsessionid=a03a95bb03374ed3c500540ad5d01967\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 (-) - - [04/Jul/2019:05:58:26 +0000] \"GET /logout HTTP/1.1\" 302 - \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/list-todos\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n117.98.145.230 (-) - - [04/Jul/2019:05:58:26 +0000] \"GET /login?logout HTTP/1.1\" 200 662 \"http://web-application-in28minutes-dev.sdfez6dmr4.us-east-1.elasticbeanstalk.com/list-todos\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36\"\n"
  },
  {
    "path": "03-spring-boot-web-application-h2/log/httpd/elasticbeanstalk-error_log",
    "content": ""
  },
  {
    "path": "03-spring-boot-web-application-h2/log/httpd/error_log",
    "content": "[Thu Jul 04 05:30:23.959963 2019] [ssl:warn] [pid 3513:tid 140069899278400] AH01873: Init: Session Cache is not configured [hint: SSLSessionCache]\n[Thu Jul 04 05:30:23.967147 2019] [mpm_worker:notice] [pid 3513:tid 140069899278400] AH00292: Apache/2.4.39 (Amazon) OpenSSL/1.0.2k-fips configured -- resuming normal operations\n[Thu Jul 04 05:30:23.967169 2019] [core:notice] [pid 3513:tid 140069899278400] AH00094: Command line: '/usr/sbin/httpd'\n[Thu Jul 04 05:55:22.551397 2019] [mpm_worker:notice] [pid 3513:tid 140069899278400] AH00295: caught SIGTERM, shutting down\n[Thu Jul 04 05:55:24.092778 2019] [ssl:warn] [pid 4953:tid 140106423265344] AH01873: Init: Session Cache is not configured [hint: SSLSessionCache]\n[Thu Jul 04 05:55:24.093788 2019] [mpm_worker:notice] [pid 4953:tid 140106423265344] AH00292: Apache/2.4.39 (Amazon) OpenSSL/1.0.2k-fips configured -- resuming normal operations\n[Thu Jul 04 05:55:24.093808 2019] [core:notice] [pid 4953:tid 140106423265344] AH00094: Command line: '/usr/sbin/httpd'\n"
  },
  {
    "path": "03-spring-boot-web-application-h2/log/messages",
    "content": "Jul  4 05:29:41 ip-172-31-17-226 kernel: imklog 5.8.10, log source = /proc/kmsg started.\nJul  4 05:29:41 ip-172-31-17-226 rsyslogd: [origin software=\"rsyslogd\" swVersion=\"5.8.10\" x-pid=\"2279\" x-info=\"http://www.rsyslog.com\"] start\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.000000] Linux version 4.14.123-86.109.amzn1.x86_64 (mockbuild@koji-pdx-corp-builder-64004) (gcc version 7.2.1 20170915 (Red Hat 7.2.1-2) (GCC)) #1 SMP Mon Jun 10 19:44:53 UTC 2019\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.000000] Command line: root=LABEL=/ console=tty1 console=ttyS0 selinux=0 nvme_core.io_timeout=4294967295 LANG=en_US.UTF-8 KEYTABLE=us\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.000000] x86/fpu: Supporting XSAVE feature 0x001: 'x87 floating point registers'\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.000000] x86/fpu: Supporting XSAVE feature 0x002: 'SSE registers'\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.000000] x86/fpu: Supporting XSAVE feature 0x004: 'AVX registers'\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.000000] x86/fpu: xstate_offset[2]:  576, xstate_sizes[2]:  256\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.000000] x86/fpu: Enabled xstate features 0x7, context size is 832 bytes, using 'standard' format.\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.000000] e820: BIOS-provided physical RAM map:\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009dfff] usable\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.000000] BIOS-e820: [mem 0x000000000009e000-0x000000000009ffff] reserved\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.000000] BIOS-e820: [mem 0x00000000000e0000-0x00000000000fffff] reserved\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.000000] BIOS-e820: [mem 0x0000000000100000-0x000000003fffffff] usable\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.000000] BIOS-e820: [mem 0x00000000fc000000-0x00000000ffffffff] reserved\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.000000] NX (Execute Disable) protection: active\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.000000] SMBIOS 2.7 present.\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.000000] DMI: Xen HVM domU, BIOS 4.2.amazon 08/24/2006\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.000000] Hypervisor detected: Xen HVM\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.000000] Xen version 4.2.\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.000000] Netfront and the Xen platform PCI driver have been compiled for this kernel: unplug emulated NICs.\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.000000] Blkfront and the Xen platform PCI driver have been compiled for this kernel: unplug emulated disks.\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.000000] You might have to change the root device\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.000000] from /dev/hd[a-d] to /dev/xvd[a-d]\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.000000] in your root= kernel command line option\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.000000] tsc: Fast TSC calibration using PIT\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.000000] e820: last_pfn = 0x40000 max_arch_pfn = 0x400000000\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.000000] x86/PAT: Configuration [0-7]: WB  WC  UC- UC  WB  WP  UC- WT  \nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.000000] found SMP MP-table at [mem 0x000fbc50-0x000fbc5f]\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.000000] RAMDISK: [mem 0x3707c000-0x37feffff]\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.000000] ACPI: Early table checksum verification disabled\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.000000] ACPI: RSDP 0x00000000000EA020 000024 (v02 Xen   )\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.000000] ACPI: XSDT 0x00000000FC00E2A0 000054 (v01 Xen    HVM      00000000 HVML 00000000)\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.000000] ACPI: FACP 0x00000000FC00DF60 0000F4 (v04 Xen    HVM      00000000 HVML 00000000)\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.000000] ACPI: DSDT 0x00000000FC0021C0 00BD19 (v02 Xen    HVM      00000000 INTL 20090123)\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.000000] ACPI: FACS 0x00000000FC002180 000040\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.000000] ACPI: FACS 0x00000000FC002180 000040\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.000000] ACPI: APIC 0x00000000FC00E060 0000D8 (v02 Xen    HVM      00000000 HVML 00000000)\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.000000] ACPI: HPET 0x00000000FC00E1B0 000038 (v01 Xen    HVM      00000000 HVML 00000000)\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.000000] ACPI: WAET 0x00000000FC00E1F0 000028 (v01 Xen    HVM      00000000 HVML 00000000)\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.000000] ACPI: SSDT 0x00000000FC00E220 000031 (v02 Xen    HVM      00000000 INTL 20090123)\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.000000] ACPI: SSDT 0x00000000FC00E260 000033 (v02 Xen    HVM      00000000 INTL 20090123)\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.000000] No NUMA configuration found\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.000000] Faking a node at [mem 0x0000000000000000-0x000000003fffffff]\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.000000] NODE_DATA(0) allocated [mem 0x3ffde000-0x3fffffff]\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.000000] Zone ranges:\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.000000]   DMA      [mem 0x0000000000001000-0x0000000000ffffff]\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.000000]   DMA32    [mem 0x0000000001000000-0x000000003fffffff]\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.000000]   Normal   empty\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.000000] Movable zone start for each node\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.000000] Early memory node ranges\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.000000]   node   0: [mem 0x0000000000001000-0x000000000009dfff]\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.000000]   node   0: [mem 0x0000000000100000-0x000000003fffffff]\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.000000] Initmem setup node 0 [mem 0x0000000000001000-0x000000003fffffff]\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.000000] ACPI: PM-Timer IO Port: 0xb008\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.000000] IOAPIC[0]: apic_id 1, version 17, address 0xfec00000, GSI 0-47\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 0 global_irq 2 dfl dfl)\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 5 global_irq 5 low level)\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 10 global_irq 10 low level)\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 11 global_irq 11 low level)\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.000000] Using ACPI (MADT) for SMP configuration information\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.000000] ACPI: HPET id: 0x8086a201 base: 0xfed00000\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.000000] smpboot: Allowing 15 CPUs, 14 hotplug CPUs\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.000000] PM: Registered nosave memory: [mem 0x00000000-0x00000fff]\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.000000] PM: Registered nosave memory: [mem 0x0009e000-0x0009ffff]\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.000000] PM: Registered nosave memory: [mem 0x000a0000-0x000dffff]\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.000000] PM: Registered nosave memory: [mem 0x000e0000-0x000fffff]\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.000000] e820: [mem 0x40000000-0xfbffffff] available for PCI devices\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.000000] Booting paravirtualized kernel on Xen HVM\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.000000] clocksource: refined-jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645519600211568 ns\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.000000] setup_percpu: NR_CPUS:8192 nr_cpumask_bits:15 nr_cpu_ids:15 nr_node_ids:1\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.000000] percpu: Embedded 44 pages/cpu s140120 r8192 d31912 u262144\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.000000] PV qspinlock hash table entries: 256 (order: 0, 4096 bytes)\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.000000] Built 1 zonelists, mobility grouping on.  Total pages: 257928\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.000000] Policy zone: DMA32\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.000000] Kernel command line: root=LABEL=/ console=tty1 console=ttyS0 selinux=0 nvme_core.io_timeout=4294967295 LANG=en_US.UTF-8 KEYTABLE=us\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.000000] PID hash table entries: 4096 (order: 3, 32768 bytes)\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.000000] Memory: 988204K/1048180K available (8204K kernel code, 1922K rwdata, 2696K rodata, 2052K init, 3876K bss, 59976K reserved, 0K cma-reserved)\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=15, Nodes=1\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.000000] Kernel/User page tables isolation: enabled\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.000000] ftrace: allocating 25812 entries in 101 pages\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.004000] Hierarchical RCU implementation.\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.004000] \tRCU restricting CPUs from NR_CPUS=8192 to nr_cpu_ids=15.\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.004000] RCU: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=15\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.004000] NR_IRQS: 524544, nr_irqs: 952, preallocated irqs: 16\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.004000] xen:events: Using 2-level ABI\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.004000] xen:events: Xen HVM callback vector for event delivery is enabled\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.004000] Console: colour VGA+ 80x25\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.004000] console [tty1] enabled\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.004000] Cannot get hvm parameter CONSOLE_EVTCHN (18): -22!\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.004000] console [ttyS0] enabled\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.004000] clocksource: hpet: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 30580167144 ns\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.008000] tsc: Fast TSC calibration using PIT\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.020004] tsc: Detected 2400.065 MHz processor\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.024009] Calibrating delay loop (skipped), value calculated using timer frequency.. 4800.19 BogoMIPS (lpj=9600392)\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.032004] pid_max: default: 32768 minimum: 301\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.036019] ACPI: Core revision 20170728\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.043601] ACPI: 3 ACPI AML tables successfully acquired and loaded\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.044029] Security Framework initialized\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.048186] Dentry cache hash table entries: 131072 (order: 8, 1048576 bytes)\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.052094] Inode-cache hash table entries: 65536 (order: 7, 524288 bytes)\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.056019] Mount-cache hash table entries: 2048 (order: 2, 16384 bytes)\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.060006] Mountpoint-cache hash table entries: 2048 (order: 2, 16384 bytes)\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.068232] mce: CPU supports 2 MCE banks\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.071562] Last level iTLB entries: 4KB 1024, 2MB 1024, 4MB 1024\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.072006] Last level dTLB entries: 4KB 1024, 2MB 1024, 4MB 1024, 1GB 4\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.076005] Spectre V2 : Mitigation: Full generic retpoline\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.080004] Spectre V2 : Spectre v2 / SpectreRSB mitigation: Filling RSB on context switch\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.088005] Speculative Store Bypass: Vulnerable\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.092031] MDS: Vulnerable: Clear CPU buffers attempted, no microcode\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.104267] smpboot: Max logical packages: 15\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.108861] x2apic: IRQ remapping doesn't support X2APIC mode\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.116003] Switched APIC routing to physical flat.\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.122818] ..TIMER: vector=0x30 apic1=0 pin1=2 apic2=0 pin2=0\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.167088] clocksource: xen: mask: 0xffffffffffffffff max_cycles: 0x1cd42e4dffb, max_idle_ns: 881590591483 ns\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.172019] installing Xen timer for CPU 0\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.176081] smpboot: CPU0: Intel(R) Xeon(R) CPU E5-2676 v3 @ 2.40GHz (family: 0x6, model: 0x3f, stepping: 0x2)\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.180034] cpu 0 spinlock event irq 53\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.183302] Performance Events: unsupported p6 CPU model 63 no PMU driver, software events only.\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.184052] Hierarchical SRCU implementation.\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.187377] NMI watchdog: Perf event create on CPU 0 failed with -2\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.188005] NMI watchdog: Perf NMI watchdog permanently disabled\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.192204] smp: Bringing up secondary CPUs ...\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.195880] smp: Brought up 1 node, 1 CPU\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.196006] smpboot: Total of 1 processors activated (4800.19 BogoMIPS)\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.200481] devtmpfs: initialized\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.203640] x86/mm: Memory block size: 128MB\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.204182] random: get_random_bytes called from setup_net+0x3c/0x140 with crng_init=0\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.208068] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645041785100000 ns\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.212017] futex hash table entries: 4096 (order: 6, 262144 bytes)\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.216255] NET: Registered protocol family 16\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.220254] cpuidle: using governor ladder\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.224007] cpuidle: using governor menu\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.227427] ACPI: bus type PCI registered\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.228009] acpiphp: ACPI Hot Plug PCI Controller Driver version: 0.5\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.232336] PCI: Using configuration type 1 for base access\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.238755] HugeTLB registered 2.00 MiB page size, pre-allocated 0 pages\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.240210] ACPI: Added _OSI(Module Device)\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.243158] ACPI: Added _OSI(Processor Device)\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.244012] ACPI: Added _OSI(3.0 _SCP Extensions)\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.247570] ACPI: Added _OSI(Processor Aggregator Device)\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.251079] ACPI: Interpreter enabled\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.252019] ACPI: (supports S0 S4 S5)\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.254720] ACPI: Using IOAPIC for interrupt routing\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.256037] PCI: Using host bridge windows from ACPI; if necessary, use \"pci=nocrs\" and report a bug\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.260361] ACPI: Enabled 2 GPEs in block 00 to 0F\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.306588] ACPI: PCI Root Bridge [PCI0] (domain 0000 [bus 00-ff])\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.308012] acpi PNP0A03:00: _OSC: OS supports [ASPM ClockPM Segments MSI]\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.312016] acpi PNP0A03:00: _OSC failed (AE_NOT_FOUND); disabling ASPM\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.316020] acpi PNP0A03:00: fail to add MMCONFIG information, can't access extended PCI configuration space under this bridge.\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.321111] acpiphp: Slot [0] registered\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.324832] acpiphp: Slot [3] registered\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.328113] acpiphp: Slot [4] registered\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.332362] acpiphp: Slot [5] registered\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.335606] acpiphp: Slot [6] registered\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.336401] acpiphp: Slot [7] registered\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.339679] acpiphp: Slot [8] registered\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.340365] acpiphp: Slot [9] registered\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.343601] acpiphp: Slot [10] registered\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.344362] acpiphp: Slot [11] registered\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.347611] acpiphp: Slot [12] registered\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.348473] acpiphp: Slot [13] registered\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.351633] acpiphp: Slot [14] registered\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.352423] acpiphp: Slot [15] registered\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.355645] acpiphp: Slot [16] registered\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.356848] acpiphp: Slot [17] registered\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.360122] acpiphp: Slot [18] registered\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.363385] acpiphp: Slot [19] registered\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.364405] acpiphp: Slot [20] registered\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.368000] acpiphp: Slot [21] registered\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.368386] acpiphp: Slot [22] registered\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.372010] acpiphp: Slot [23] registered\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.375627] acpiphp: Slot [24] registered\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.376504] acpiphp: Slot [25] registered\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.380052] acpiphp: Slot [26] registered\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.383804] acpiphp: Slot [27] registered\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.384409] acpiphp: Slot [28] registered\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.388163] acpiphp: Slot [29] registered\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.391814] acpiphp: Slot [30] registered\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.392478] acpiphp: Slot [31] registered\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.396220] PCI host bridge to bus 0000:00\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.399621] pci_bus 0000:00: root bus resource [io  0x0000-0x0cf7 window]\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.400007] pci_bus 0000:00: root bus resource [io  0x0d00-0xffff window]\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.404008] pci_bus 0000:00: root bus resource [mem 0x000a0000-0x000bffff window]\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.408005] pci_bus 0000:00: root bus resource [mem 0xf0000000-0xfbffffff window]\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.412006] pci_bus 0000:00: root bus resource [bus 00-ff]\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.423413] pci 0000:00:01.1: legacy IDE quirk: reg 0x10: [io  0x01f0-0x01f7]\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.424006] pci 0000:00:01.1: legacy IDE quirk: reg 0x14: [io  0x03f6]\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.428004] pci 0000:00:01.1: legacy IDE quirk: reg 0x18: [io  0x0170-0x0177]\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.432005] pci 0000:00:01.1: legacy IDE quirk: reg 0x1c: [io  0x0376]\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.436808] * Found PM-Timer Bug on the chipset. Due to workarounds for a bug,\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.436808] * this clock source is slow. Consider trying other clock sources\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.441819] pci 0000:00:01.3: quirk: [io  0xb000-0xb03f] claimed by PIIX4 ACPI\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.451854] ACPI: PCI Interrupt Link [LNKA] (IRQs *5 10 11)\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.452231] ACPI: PCI Interrupt Link [LNKB] (IRQs 5 *10 11)\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.456256] ACPI: PCI Interrupt Link [LNKC] (IRQs 5 10 *11)\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.460244] ACPI: PCI Interrupt Link [LNKD] (IRQs *5 10 11)\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.484060] xen:balloon: Initialising balloon driver\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.500426] pci 0000:00:02.0: vgaarb: setting as boot VGA device\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.504000] pci 0000:00:02.0: vgaarb: VGA device added: decodes=io+mem,owns=io+mem,locks=none\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.504023] pci 0000:00:02.0: vgaarb: bridge control possible\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.508006] vgaarb: loaded\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.511108] EDAC MC: Ver: 3.0.0\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.512528] PCI: Using ACPI for IRQ routing\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.516524] NetLabel: Initializing\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.519633] NetLabel:  domain hash size = 128\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.520006] NetLabel:  protocols = UNLABELED CIPSOv4 CALIPSO\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.524021] NetLabel:  unlabeled traffic allowed by default\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.528066] HPET: 3 timers in total, 0 timers will be used for per-cpu timer\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.532022] hpet0: at MMIO 0xfed00000, IRQs 2, 8, 0\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.536000] hpet0: 3 comparators, 64-bit 62.500000 MHz counter\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.539195] clocksource: Switched to clocksource xen\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.547615] VFS: Disk quotas dquot_6.6.0\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.551138] VFS: Dquot-cache hash table entries: 512 (order 0, 4096 bytes)\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.556592] pnp: PnP ACPI init\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.559497] system 00:00: [mem 0x00000000-0x0009ffff] could not be reserved\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.564894] system 00:01: [io  0x08a0-0x08a3] has been reserved\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.569578] system 00:01: [io  0x0cc0-0x0ccf] has been reserved\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.574315] system 00:01: [io  0x04d0-0x04d1] has been reserved\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.579343] system 00:07: [io  0x10c0-0x1141] has been reserved\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.584916] system 00:07: [io  0xb044-0xb047] has been reserved\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.609646] pnp: PnP ACPI: found 8 devices\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.619705] clocksource: acpi_pm: mask: 0xffffff max_cycles: 0xffffff, max_idle_ns: 2085701024 ns\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.627285] NET: Registered protocol family 2\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.631127] TCP established hash table entries: 8192 (order: 4, 65536 bytes)\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.636589] TCP bind hash table entries: 8192 (order: 5, 131072 bytes)\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.641582] TCP: Hash tables configured (established 8192 bind 8192)\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.646589] UDP hash table entries: 512 (order: 2, 16384 bytes)\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.651569] UDP-Lite hash table entries: 512 (order: 2, 16384 bytes)\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.656402] NET: Registered protocol family 1\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.659874] pci 0000:00:00.0: Limiting direct PCI/PCI transfers\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.664323] pci 0000:00:01.0: PIIX3: Enabling Passive Release\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.668711] pci 0000:00:01.0: Activating ISA DMA hang workarounds\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.673343] pci 0000:00:02.0: Video device with shadowed ROM at [mem 0x000c0000-0x000dffff]\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.680468] Unpacking initramfs...\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.808062] random: fast init done\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.924737] Freeing initrd memory: 15824K\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.928480] audit: initializing netlink subsys (disabled)\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.933819] Initialise system trusted keyrings\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.937392] Key type blacklist registered\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.940803] audit: type=2000 audit(1562218176.830:1): state=initialized audit_enabled=0 res=1\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.947640] workingset: timestamp_bits=36 max_order=18 bucket_order=0\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    0.953843] zbud: loaded\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    1.229452] Key type asymmetric registered\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    1.233297] Asymmetric key parser 'x509' registered\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    1.237366] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 253)\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    1.243354] io scheduler noop registered (default)\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    1.247789] xen:grant_table: Grant tables using version 1 layout\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    1.252438] Grant table initialized\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    1.255811] Cannot get hvm parameter CONSOLE_EVTCHN (18): -22!\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    1.260444] Serial: 8250/16550 driver, 4 ports, IRQ sharing disabled\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    1.294166] 00:06: ttyS0 at I/O 0x3f8 (irq = 4, base_baud = 115200) is a 16550A\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    1.301027] xen_netfront: Initialising Xen virtual ethernet driver\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    1.307579] i8042: PNP: PS/2 Controller [PNP0303:PS2K,PNP0f13:PS2M] at 0x60,0x64 irq 1,12\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    1.316114] serio: i8042 KBD port at 0x60,0x64 irq 1\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    1.320035] serio: i8042 AUX port at 0x60,0x64 irq 12\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    1.325384] input: AT Translated Set 2 keyboard as /devices/platform/i8042/serio0/input/input0\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    1.333799] rtc_cmos 00:02: rtc core: registered rtc_cmos as rtc0\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    1.338941] rtc_cmos 00:02: alarms up to one day, 114 bytes nvram, hpet irqs\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    1.344630] hidraw: raw HID events driver (C) Jiri Kosina\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    1.349033] NET: Registered protocol family 17\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    1.353208] sched_clock: Marking stable (1352950103, 0)->(2070469841, -717519738)\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    1.359869] registered taskstats version 1\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    1.363600] Loading compiled-in X.509 certificates\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    1.367715] zswap: loaded using pool lzo/zbud\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    1.472096] xenbus_probe_frontend: Device with no driver: device/vbd/51712\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    1.477874] rtc_cmos 00:02: setting system clock to 2019-07-04 05:29:37 UTC (1562218177)\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    1.486636] Freeing unused kernel memory: 2052K\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    1.496082] Write protecting the kernel read-only data: 14336k\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    1.501211] Freeing unused kernel memory: 2016K\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    1.507678] Freeing unused kernel memory: 1400K\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    1.529215] device-mapper: uevent: version 1.0.3\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    1.533508] device-mapper: ioctl: 4.37.0-ioctl (2017-09-20) initialised: dm-devel@redhat.com\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    1.600239] SCSI subsystem initialized\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    1.655484] scsi host0: ata_piix\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    1.692117] scsi host1: ata_piix\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    1.695296] ata1: PATA max MWDMA2 cmd 0x1f0 ctl 0x3f6 bmdma 0xc100 irq 14\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    1.700801] ata2: PATA max MWDMA2 cmd 0x170 ctl 0x376 bmdma 0xc108 irq 15\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    1.730315] Invalid max_queues (4), will use default max: 1.\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    1.761243] blkfront: xvda: barrier or flush: disabled; persistent grants: disabled; indirect descriptors: enabled;\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    1.774089]  xvda: xvda1\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    1.936545] EXT4-fs (xvda1): mounted filesystem with ordered data mode. Opts: (null)\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    1.952820] tsc: Refined TSC clocksource calibration: 2400.002 MHz\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    1.957681] clocksource: tsc: mask: 0xffffffffffffffff max_cycles: 0x22983938a92, max_idle_ns: 440795216168 ns\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    1.968659] EXT4-fs (xvda1): mounted filesystem with ordered data mode. Opts: (null)\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    2.049130] random: init: uninitialized urandom read (12 bytes read)\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    2.216852] input: Power Button as /devices/LNXSYSTM:00/LNXPWRBN:00/input/input3\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    2.238931] input: ImExPS/2 Generic Explorer Mouse as /devices/platform/i8042/serio1/input/input4\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    2.298572] ACPI: Power Button [PWRF]\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    2.301772] input: Sleep Button as /devices/LNXSYSTM:00/LNXSLPBN:00/input/input5\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    2.361282] ACPI: Sleep Button [SLPF]\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    2.410084] mousedev: PS/2 mouse device common for all mice\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    3.405708] random: lvm: uninitialized urandom read (4 bytes read)\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    3.461469] EXT4-fs (xvda1): re-mounted. Opts: (null)\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    3.490166] random: dd: uninitialized urandom read (4096 bytes read)\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    3.598729] random: vgs: uninitialized urandom read (4 bytes read)\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    3.684477] NET: Registered protocol family 10\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    3.694069] Segment Routing with IPv6\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    3.869422] netlink: 12 bytes leftover after parsing attributes in process `ip'.\nJul  4 05:29:41 ip-172-31-17-226 irqbalance: Balancing is ineffective on systems with a single cpu.  Shutting down\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    5.480973] urandom_read: 1 callbacks suppressed\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    5.480974] random: rngd: uninitialized urandom read (16 bytes read)\nJul  4 05:29:41 ip-172-31-17-226 kernel: [    5.521865] random: crng init done\nJul  4 05:29:41 ip-172-31-17-226 dhclient[2213]: XMT: Solicit on eth0, interval 1090ms.\nJul  4 05:29:41 ip-172-31-17-226 rpc.statd[2346]: Version 1.3.0 starting\nJul  4 05:29:41 ip-172-31-17-226 sm-notify[2347]: Version 1.3.0 starting\nJul  4 05:29:41 ip-172-31-17-226 acpid: starting up with netlink and the input layer\nJul  4 05:29:41 ip-172-31-17-226 acpid: skipping incomplete file /etc/acpi/events/videoconf\nJul  4 05:29:41 ip-172-31-17-226 acpid: 2 rules loaded\nJul  4 05:29:41 ip-172-31-17-226 acpid: waiting for events: event logging is off\nJul  4 05:29:41 ip-172-31-17-226 udevadm[2419]: --type=failed is deprecated and will be removed from a future udev release.\nJul  4 05:29:41 ip-172-31-17-226 ec2net: [ec2ifscan] Scanning for unconfigured interfaces\nJul  4 05:29:42 ip-172-31-17-226 dhclient[2213]: XMT: Solicit on eth0, interval 2080ms.\nJul  4 05:29:43 ip-172-31-17-226 hibinit-agent: Instance Launch has not enabled Hibernation Configured Flag. hibinit-agent exiting!!\nJul  4 05:29:43 ip-172-31-17-226 acpid: exiting\nJul  4 05:29:43 ip-172-31-17-226 acpid: starting up with netlink and the input layer\nJul  4 05:29:43 ip-172-31-17-226 acpid: skipping incomplete file /etc/acpi/events/videoconf\nJul  4 05:29:43 ip-172-31-17-226 acpid: 2 rules loaded\nJul  4 05:29:43 ip-172-31-17-226 acpid: waiting for events: event logging is off\nJul  4 05:29:43 ip-172-31-17-226 ntpd[2572]: ntpd 4.2.8p12@1.3728-o Fri May  3 15:36:34 UTC 2019 (1): Starting\nJul  4 05:29:43 ip-172-31-17-226 ntpd[2572]: Command line: ntpd -u ntp:ntp -p /var/run/ntpd.pid -g\nJul  4 05:29:43 ip-172-31-17-226 ntpd[2574]: proto: precision = 0.625 usec (-21)\nJul  4 05:29:43 ip-172-31-17-226 ntpd[2574]: Listen and drop on 0 v4wildcard 0.0.0.0:123\nJul  4 05:29:43 ip-172-31-17-226 ntpd[2574]: Listen normally on 1 lo 127.0.0.1:123\nJul  4 05:29:43 ip-172-31-17-226 ntpd[2574]: Listen normally on 2 eth0 172.31.17.226:123\nJul  4 05:29:43 ip-172-31-17-226 ntpd[2574]: Listening on routing socket on fd #19 for interface updates\nJul  4 05:29:43 ip-172-31-17-226 ntpd[2574]: kernel reports TIME_ERROR: 0x41: Clock Unsynchronized\nJul  4 05:29:43 ip-172-31-17-226 ntpd[2574]: kernel reports TIME_ERROR: 0x41: Clock Unsynchronized\nJul  4 05:29:44 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:44Z] Started EB User Data\nJul  4 05:29:44 ip-172-31-17-226 [eb-cfn-init]: + SLEEP_TIME=10\nJul  4 05:29:44 ip-172-31-17-226 [eb-cfn-init]: + SLEEP_TIME_MAX=3600\nJul  4 05:29:44 ip-172-31-17-226 [eb-cfn-init]: + true\nJul  4 05:29:44 ip-172-31-17-226 [eb-cfn-init]: + curl https://s3.dualstack.us-east-1.amazonaws.com/elasticbeanstalk-env-resources-us-east-1/stalks/eb_tomcat_4.0.1.202048.0_1560646799/lib/UserDataScript.sh\nJul  4 05:29:44 ip-172-31-17-226 [eb-cfn-init]:   % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current\nJul  4 05:29:44 ip-172-31-17-226 [eb-cfn-init]:                                  Dload  Upload   Total   Spent    Left  Speed\nJul  4 05:29:44 ip-172-31-17-226 [eb-cfn-init]: #015  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0#015100 12536  100 12536    0     0   322k      0 --:--:-- --:--:-- --:--:--  330k\nJul  4 05:29:44 ip-172-31-17-226 [eb-cfn-init]: + RESULT=0\nJul  4 05:29:44 ip-172-31-17-226 [eb-cfn-init]: + [[ 0 -ne 0 ]]\nJul  4 05:29:44 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:44.266Z] Started EB Bootstrapping Script.\nJul  4 05:29:44 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:44.309Z] Received parameters:\nJul  4 05:29:44 ip-172-31-17-226 [eb-cfn-init]:  RPMS = https://s3.dualstack.us-east-1.amazonaws.com/elasticbeanstalk-env-resources-us-east-1/stalks/eb_tomcat_4.0.1.202048.0_1560646799/lib/aws-elasticbeanstalk-tools-1.20-1.noarch.rpm\nJul  4 05:29:44 ip-172-31-17-226 [eb-cfn-init]:  TARBALLS = https://s3.dualstack.us-east-1.amazonaws.com/elasticbeanstalk-env-resources-us-east-1/stalks/eb_tomcat_4.0.1.202048.0_1560646799/lib/awseb-ruby-2.2.4-x86_64-20160503_1008.tar.gz https://s3.dualstack.us-east-1.amazonaws.com/elasticbeanstalk-env-resources-us-east-1/stalks/eb_tomcat_4.0.1.202048.0_1560646799/lib/basehooks.tar.gz\nJul  4 05:29:44 ip-172-31-17-226 [eb-cfn-init]: + /bin/bash /tmp/ebbootstrap.sh https://s3.dualstack.us-east-1.amazonaws.com/elasticbeanstalk-env-resources-us-east-1/stalks/eb_tomcat_4.0.1.202048.0_1560646799/lib/aws-elasticbeanstalk-tools-1.20-1.noarch.rpm 'https://s3.dualstack.us-east-1.amazonaws.com/elasticbeanstalk-env-resources-us-east-1/stalks/eb_tomcat_4.0.1.202048.0_1560646799/lib/awseb-ruby-2.2.4-x86_64-20160503_1008.tar.gz https://s3.dualstack.us-east-1.amazonaws.com/elasticbeanstalk-env-resources-us-east-1/stalks/eb_tomcat_4.0.1.202048.0_1560646799/lib/basehooks.tar.gz' 'https://s3.dualstack.us-east-1.amazonaws.com/elasticbeanstalk-env-resources-us-east-1/stalks/eb_tomcat_4.0.1.202048.0_1560646799/lib/beanstalk-core-2.12.gem https://s3.dualstack.us-east-1.amazonaws.com/elasticbeanstalk-env-resources-us-east-1/stalks/eb_tomcat_4.0.1.202048.0_1560646799/lib/beanstalk-core-healthd-1.1.gem https://s3.dualstack.us-east-1.amazonaws.com/elasticbeanstalk-env-resources-us-east-1/stalks/eb_tomcat_4.0.1.202048.0_1560646799/lib/executor-1.2.gem' 'https://c\nJul  4 05:29:44 ip-172-31-17-226 [eb-cfn-init]:  EB_GEMS = https://s3.dualstack.us-east-1.amazonaws.com/elasticbeanstalk-env-resources-us-east-1/stalks/eb_tomcat_4.0.1.202048.0_1560646799/lib/beanstalk-core-2.12.gem https://s3.dualstack.us-east-1.amazonaws.com/elasticbeanstalk-env-resources-us-east-1/stalks/eb_tomcat_4.0.1.202048.0_1560646799/lib/beanstalk-core-healthd-1.1.gem https://s3.dualstack.us-east-1.amazonaws.com/elasticbeanstalk-env-resources-us-east-1/stalks/eb_tomcat_4.0.1.202048.0_1560646799/lib/executor-1.2.gem\nJul  4 05:29:44 ip-172-31-17-226 ntpd[2574]: ntpd exiting on signal 15 (Terminated)\nJul  4 05:29:44 ip-172-31-17-226 ntpd[2574]: 169.254.169.123 local addr 172.31.17.226 -> <null>\nJul  4 05:29:44 ip-172-31-17-226 [eb-cfn-init]: loudformation-waitcondition-us-east-1.s3.amazonaws.com/arn%3Aaws%3Acloudformation%3Aus-east-1%3A825148403966%3Astack/awseb-e-nrncavevhv-stack/9312b360-9e1c-11e9-8002-0a62acea77ae/AWSEBInstanceLaunchWaitHandle?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20190704T052841Z&X-Amz-SignedHeaders=host&X-Amz-Expires=86399&X-Amz-Credential=AKIAIIT3CWAIMJYUTISA%2F20190704%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Signature=4546508d0e071fe06e86df149605ad3694ab89388e4c1478679060db5ccb8d6d' arn:aws:cloudformation:us-east-1:825148403966:stack/awseb-e-nrncavevhv-stack/9312b360-9e1c-11e9-8002-0a62acea77ae us-east-1 dbc9b135b190 1b9ec7da-82c8-4767-a4e7-aad9513ad158 '' apache ''\nJul  4 05:29:44 ip-172-31-17-226 [eb-cfn-init]:  SIGNAL_URL = https://cloudformation-waitcondition-us-east-1.s3.amazonaws.com/arn%3Aaws%3Acloudformation%3Aus-east-1%3A825148403966%3Astack/awseb-e-nrncavevhv-stack/9312b360-9e1c-11e9-8002-0a62acea77ae/AWSEBInstanceLaunchWaitHandle?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20190704T052841Z&X-Amz-SignedHeaders=host&X-Amz-Expires=86399&X-Amz-Credential=AKIAIIT3CWAIMJYUTISA%2F20190704%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Signature=4546508d0e071fe06e86df149605ad3694ab89388e4c1478679060db5ccb8d6d\nJul  4 05:29:44 ip-172-31-17-226 [eb-cfn-init]:  STACK_ID = arn:aws:cloudformation:us-east-1:825148403966:stack/awseb-e-nrncavevhv-stack/9312b360-9e1c-11e9-8002-0a62acea77ae\nJul  4 05:29:44 ip-172-31-17-226 [eb-cfn-init]:  REGION = us-east-1\nJul  4 05:29:44 ip-172-31-17-226 [eb-cfn-init]:  GUID = dbc9b135b190\nJul  4 05:29:44 ip-172-31-17-226 [eb-cfn-init]:  HEALTHD_GROUP_ID = 1b9ec7da-82c8-4767-a4e7-aad9513ad158\nJul  4 05:29:44 ip-172-31-17-226 [eb-cfn-init]:  HEALTHD_ENDPOINT = \nJul  4 05:29:44 ip-172-31-17-226 [eb-cfn-init]:  PROXY_SERVER = apache\nJul  4 05:29:44 ip-172-31-17-226 [eb-cfn-init]:  HEALTHD_PROXY_LOG_LOCATION =\nJul  4 05:29:44 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:44.324Z] Synchronizing network time in background.\nJul  4 05:29:44 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:44.359Z] yum repo has already been locked to dbc9b135b190.\nJul  4 05:29:44 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:44.363Z] yum update has already been done.\nJul  4 05:29:44 ip-172-31-17-226 [eb-cfn-init]: Shutting down ntpd: [2019-07-04T05:29:44.432Z] Completed creating AWS EB users and groups.\nJul  4 05:29:44 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:44.440Z] Started executing install_rpms https://s3.dualstack.us-east-1.amazonaws.com/elasticbeanstalk-env-resources-us-east-1/stalks/eb_tomcat_4.0.1.202048.0_1560646799/lib/aws-elasticbeanstalk-tools-1.20-1.noarch.rpm.\nJul  4 05:29:44 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:44.445Z] Installing RPM: https://s3.dualstack.us-east-1.amazonaws.com/elasticbeanstalk-env-resources-us-east-1/stalks/eb_tomcat_4.0.1.202048.0_1560646799/lib/aws-elasticbeanstalk-tools-1.20-1.noarch.rpm.\nJul  4 05:29:44 ip-172-31-17-226 [eb-cfn-init]: [  OK  ]#015\nJul  4 05:29:44 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:44.552Z] aws-elasticbeanstalk-tools-1.20-1.noarch has already been installed. Skip installing.\nJul  4 05:29:44 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:44.559Z] Command Returned: \nJul  4 05:29:44 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:44.563Z] Completed executing install_rpms.\nJul  4 05:29:44 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:44.568Z] Started executing install_tarballs https://s3.dualstack.us-east-1.amazonaws.com/elasticbeanstalk-env-resources-us-east-1/stalks/eb_tomcat_4.0.1.202048.0_1560646799/lib/awseb-ruby-2.2.4-x86_64-20160503_1008.tar.gz https://s3.dualstack.us-east-1.amazonaws.com/elasticbeanstalk-env-resources-us-east-1/stalks/eb_tomcat_4.0.1.202048.0_1560646799/lib/basehooks.tar.gz.\nJul  4 05:29:44 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:44.585Z] Installing tarball: https://s3.dualstack.us-east-1.amazonaws.com/elasticbeanstalk-env-resources-us-east-1/stalks/eb_tomcat_4.0.1.202048.0_1560646799/lib/awseb-ruby-2.2.4-x86_64-20160503_1008.tar.gz.\nJul  4 05:29:44 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:44.587Z] awseb-ruby-2.2.4-x86_64-20160503_1008.tar.gz has already been installed. Skip installing.\nJul  4 05:29:44 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:44.589Z] Installing tarball: https://s3.dualstack.us-east-1.amazonaws.com/elasticbeanstalk-env-resources-us-east-1/stalks/eb_tomcat_4.0.1.202048.0_1560646799/lib/basehooks.tar.gz.\nJul  4 05:29:44 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:44.654Z] Command Returned: \nJul  4 05:29:44 ip-172-31-17-226 [eb-cfn-init]: \nJul  4 05:29:44 ip-172-31-17-226 [eb-cfn-init]: 2019-07-04 05:29:44 URL:https://s3.dualstack.us-east-1.amazonaws.com/elasticbeanstalk-env-resources-us-east-1/stalks/eb_tomcat_4.0.1.202048.0_1560646799/lib/basehooks.tar.gz [5896/5896] -> \"/tmp/basehooks.tar.gz\" [1]\nJul  4 05:29:44 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:44.668Z] Completed executing install_tarballs.\nJul  4 05:29:44 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:44.670Z] Started executing install_eb_gems https://s3.dualstack.us-east-1.amazonaws.com/elasticbeanstalk-env-resources-us-east-1/stalks/eb_tomcat_4.0.1.202048.0_1560646799/lib/beanstalk-core-2.12.gem https://s3.dualstack.us-east-1.amazonaws.com/elasticbeanstalk-env-resources-us-east-1/stalks/eb_tomcat_4.0.1.202048.0_1560646799/lib/beanstalk-core-healthd-1.1.gem https://s3.dualstack.us-east-1.amazonaws.com/elasticbeanstalk-env-resources-us-east-1/stalks/eb_tomcat_4.0.1.202048.0_1560646799/lib/executor-1.2.gem.\nJul  4 05:29:44 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:44.709Z] Installing EB Gem: https://s3.dualstack.us-east-1.amazonaws.com/elasticbeanstalk-env-resources-us-east-1/stalks/eb_tomcat_4.0.1.202048.0_1560646799/lib/beanstalk-core-2.12.gem.\nJul  4 05:29:44 ip-172-31-17-226 dhclient[2213]: XMT: Solicit on eth0, interval 4260ms.\nJul  4 05:29:45 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:45.004Z] beanstalk-core-2.12 has already been installed. Skip installing.\nJul  4 05:29:45 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:45.011Z] Installing EB Gem: https://s3.dualstack.us-east-1.amazonaws.com/elasticbeanstalk-env-resources-us-east-1/stalks/eb_tomcat_4.0.1.202048.0_1560646799/lib/beanstalk-core-healthd-1.1.gem.\nJul  4 05:29:45 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:45.186Z] beanstalk-core-healthd-1.1 has already been installed. Skip installing.\nJul  4 05:29:45 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:45.193Z] Installing EB Gem: https://s3.dualstack.us-east-1.amazonaws.com/elasticbeanstalk-env-resources-us-east-1/stalks/eb_tomcat_4.0.1.202048.0_1560646799/lib/executor-1.2.gem.\nJul  4 05:29:45 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:45.367Z] executor-1.2 has already been installed. Skip installing.\nJul  4 05:29:45 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:45.373Z] Command Returned: \nJul  4 05:29:45 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:45.378Z] Completed executing install_eb_gems.\nJul  4 05:29:45 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:45.383Z] Starting healthd\nJul  4 05:29:45 ip-172-31-17-226 [eb-cfn-init]: initctl: Unknown instance: \nJul  4 05:29:45 ip-172-31-17-226 [eb-cfn-init]: healthd start/running, process 2759\nJul  4 05:29:45 ip-172-31-17-226 su: (to healthd) root on none\nJul  4 05:29:45 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:45.606Z] First init of instance.\nJul  4 05:29:45 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:45.614Z] Started executing cfn_init _OnInstanceBoot first_init.\nJul  4 05:29:45 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:45.626Z] Running cfn-init ConfigSet: _OnInstanceBoot.\nJul  4 05:29:46 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:46.449Z] Command Returned: \nJul  4 05:29:46 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:46.453Z] Completed executing cfn_init.\nJul  4 05:29:46 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:46.535Z] Check whether controlled by launch workflow...\nJul  4 05:29:47 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:47.039Z] Worflow running.\nJul  4 05:29:47 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:47.043Z] Workflow controlled instance. Running container provisioning...\nJul  4 05:29:47 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:47.052Z] Started executing start_cfn_hup.\nJul  4 05:29:47 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:47.061Z] Starting cfn-hup.\nJul  4 05:29:47 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:47.074Z] Command Returned: cfn-hup start/running, process 2837\nJul  4 05:29:47 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:47.082Z] Completed executing start_cfn_hup.\nJul  4 05:29:47 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:47.094Z] Started executing run_eb_command { \"api_version\" : \"1.0\", \"request_id\": \"0\", \"command_name\": \"CMD-PreInit\" } .\nJul  4 05:29:47 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:47.106Z] Running EB Command: { \"api_version\" : \"1.0\", \"request_id\": \"0\", \"command_name\": \"CMD-PreInit\" } .\nJul  4 05:29:48 ip-172-31-17-226 yum[2861]: Installed: aws-cli-plugin-cloudwatch-logs-1.4.4-1.16.amzn1.noarch\nJul  4 05:29:49 ip-172-31-17-226 dhclient[2213]: XMT: Solicit on eth0, interval 8470ms.\nJul  4 05:29:49 ip-172-31-17-226 yum[2861]: Installed: awslogs-1.1.4-1.12.amzn1.noarch\nJul  4 05:29:52 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:52.502Z] Command Returned: {\"status\":\"SUCCESS\",\"api_version\":\"1.0\",\"results\":[{\"status\":\"SUCCESS\",\"msg\":\"\",\"returncode\":0,\"events\":[]}]}\nJul  4 05:29:52 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:52.514Z] Completed executing run_eb_command.\nJul  4 05:29:52 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:52.516Z] Successfully bootstrapped instance.\nJul  4 05:29:52 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:52.622Z] Sending signal 0 to CFN wait condition https://cloudformation-waitcondition-us-east-1.s3.amazonaws.com/arn%3Aaws%3Acloudformation%3Aus-east-1%3A825148403966%3Astack/awseb-e-nrncavevhv-stack/9312b360-9e1c-11e9-8002-0a62acea77ae/AWSEBInstanceLaunchWaitHandle?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20190704T052841Z&X-Amz-SignedHeaders=host&X-Amz-Expires=86399&X-Amz-Credential=AKIAIIT3CWAIMJYUTISA%2F20190704%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Signature=4546508d0e071fe06e86df149605ad3694ab89388e4c1478679060db5ccb8d6d\nJul  4 05:29:52 ip-172-31-17-226 [eb-cfn-init]: CloudFormation signaled successfully with SUCCESS.\nJul  4 05:29:53 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:53.002Z] Tailing /var/log/eb-commandprocessor.log\nJul  4 05:29:53 ip-172-31-17-226 [eb-cfn-init]: \nJul  4 05:29:53 ip-172-31-17-226 [eb-cfn-init]: ******************* eb-commandprocessor taillog *******************\nJul  4 05:29:53 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:47.409Z] DEBUG [2847]  : Reading config file: /etc/elasticbeanstalk/.aws-eb-stack.properties\nJul  4 05:29:53 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:47.410Z] DEBUG [2847]  : Checking if the command processor should execute...\nJul  4 05:29:53 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:47.415Z] DEBUG [2847]  : Checking whether the command is applicable to instance (i-0297856d09027860c)..\nJul  4 05:29:53 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:47.415Z] INFO  [2847]  : Command is applicable to this instance (i-0297856d09027860c)..\nJul  4 05:29:53 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:47.415Z] DEBUG [2847]  : Checking if the received command stage is valid..\nJul  4 05:29:53 ip-172-31-17-226 [eb-cfn-init]: + exit 0\nJul  4 05:29:53 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:47.415Z] INFO  [2847]  : No stage_num in command. Valid stage..\nJul  4 05:29:53 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:47.415Z] INFO  [2847]  : Received command CMD-PreInit: {\"api_version\"=>\"1.0\", \"request_id\"=>\"0\", \"command_name\"=>\"CMD-PreInit\"}\nJul  4 05:29:53 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:47.415Z] INFO  [2847]  : Command processor should execute command.\nJul  4 05:29:53 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:47.415Z] DEBUG [2847]  : Storing current stage..\nJul  4 05:29:53 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:47.415Z] DEBUG [2847]  : Stage_num does not exist. Not saving null stage. Returning..\nJul  4 05:29:53 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:47.415Z] DEBUG [2847]  : Reading config file: /etc/elasticbeanstalk/.aws-eb-stack.properties\nJul  4 05:29:53 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:47.415Z] DEBUG [2847]  : Retrieving metadata for key: AWS::ElasticBeanstalk::Ext||_ContainerConfigFileContent||commands..\nJul  4 05:29:53 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:47.416Z] DEBUG [2847]  : Retrieving metadata for key: AWS::ElasticBeanstalk::Ext||_API||_Commands..\nJul  4 05:29:53 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:47.416Z] INFO  [2847]  : Found enabled addons: [\"logstreaming\", \"logpublish\"].\nJul  4 05:29:53 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:47.417Z] INFO  [2847]  : Updating Command definition of addon logstreaming.\nJul  4 05:29:53 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:47.417Z] INFO  [2847]  : Updating Command definition of addon logpublish.\nJul  4 05:29:53 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:47.417Z] DEBUG [2847]  : Refreshing metadata...\nJul  4 05:29:53 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:47.422Z] DEBUG [2847]  : Using cached environment metadata.\nJul  4 05:29:53 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:47.422Z] INFO  [2847]  : Recreated directory /opt/elasticbeanstalk/deploy/configuration/.\nJul  4 05:29:53 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:47.422Z] DEBUG [2847]  : Retrieving metadata for key: AWS::ElasticBeanstalk::Ext||_AppSourceUrlFileContent||url..\nJul  4 05:29:53 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:47.423Z] INFO  [2847]  : Created appsource url file at /opt/elasticbeanstalk/deploy/configuration/appsourceurl.\nJul  4 05:29:53 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:47.423Z] DEBUG [2847]  : Retrieving metadata for key: AWS::ElasticBeanstalk::Ext||_ContainerConfigFileContent..\nJul  4 05:29:53 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:47.424Z] INFO  [2847]  : Created container config file at /opt/elasticbeanstalk/deploy/configuration/containerconfiguration.\nJul  4 05:29:53 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:47.424Z] DEBUG [2847]  : Retrieving metadata for key: AWS::ElasticBeanstalk::Ext||_ContainerConfigFileContent||commands..\nJul  4 05:29:53 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:47.425Z] DEBUG [2847]  : Retrieving metadata for key: AWS::ElasticBeanstalk::Ext||_API||_Commands..\nJul  4 05:29:53 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:47.426Z] INFO  [2847]  : Found enabled addons: [\"logstreaming\", \"logpublish\"].\nJul  4 05:29:53 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:47.430Z] INFO  [2847]  : Updating Command definition of addon logstreaming.\nJul  4 05:29:53 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:47.430Z] INFO  [2847]  : Updating Command definition of addon logpublish.\nJul  4 05:29:53 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:47.430Z] DEBUG [2847]  : Retrieving metadata for key: AWS::CloudFormation::Init||Infra-WriteApplication2||files..\nJul  4 05:29:53 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:47.431Z] DEBUG [2847]  : Retrieving metadata for key: AWS::ElasticBeanstalk::Ext||ManifestFileS3Key..\nJul  4 05:29:53 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:47.685Z] INFO  [2847]  : Finding latest manifest from bucket 'elasticbeanstalk-us-east-1-825148403966' with prefix 'resources/environments/e-nrncavevhv/_runtime/versions/manifest_'.\nJul  4 05:29:53 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:47.779Z] INFO  [2847]  : Found manifest with key 'resources/environments/e-nrncavevhv/_runtime/versions/manifest_1562218117030'.\nJul  4 05:29:53 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:47.789Z] INFO  [2847]  : Updated manifest cache: deployment ID 1 and serial 1.\nJul  4 05:29:53 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:47.789Z] DEBUG [2847]  : Loaded definition of Command CMD-PreInit.\nJul  4 05:29:53 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:47.790Z] INFO  [2847]  : Executing Initialization\nJul  4 05:29:53 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:47.790Z] INFO  [2847]  : Executing command: CMD-PreInit...\nJul  4 05:29:53 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:47.790Z] INFO  [2847]  : Executing command CMD-PreInit activities...\nJul  4 05:29:53 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:47.790Z] DEBUG [2847]  : Setting environment variables..\nJul  4 05:29:53 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:47.790Z] INFO  [2847]  : Running AddonsBefore for command CMD-PreInit...\nJul  4 05:29:53 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:50.014Z] DEBUG [2847]  : Running stages of Command CMD-PreInit from stage 0 to stage 0...\nJul  4 05:29:53 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:50.014Z] INFO  [2847]  : Running stage 0 of command CMD-PreInit...\nJul  4 05:29:53 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:50.014Z] DEBUG [2847]  : Loaded 2 actions for stage 0.\nJul  4 05:29:53 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:50.014Z] INFO  [2847]  : Running 1 of 2 actions: DownloadSourceBundle...\nJul  4 05:29:53 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:51.110Z] INFO  [2847]  : Running 2 of 2 actions: PreInitHook...\nJul  4 05:29:53 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:52.488Z] INFO  [2847]  : Running AddonsAfter for command CMD-PreInit...\nJul  4 05:29:53 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:52.488Z] INFO  [2847]  : Command CMD-PreInit succeeded!\nJul  4 05:29:53 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:52.488Z] INFO  [2847]  : Command processor returning results: \nJul  4 05:29:53 ip-172-31-17-226 [eb-cfn-init]: {\"status\":\"SUCCESS\",\"api_version\":\"1.0\",\"results\":[{\"status\":\"SUCCESS\",\"msg\":\"\",\"returncode\":0,\"events\":[]}]}\nJul  4 05:29:53 ip-172-31-17-226 [eb-cfn-init]: ******************* End of taillog *******************\nJul  4 05:29:53 ip-172-31-17-226 [eb-cfn-init]: \nJul  4 05:29:53 ip-172-31-17-226 [eb-cfn-init]: \nJul  4 05:29:53 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:53.025Z] Tailing /var/log/eb-activity.log\nJul  4 05:29:53 ip-172-31-17-226 [eb-cfn-init]: \nJul  4 05:29:53 ip-172-31-17-226 [eb-cfn-init]: ******************* eb-activity taillog *******************\nJul  4 05:29:53 ip-172-31-17-226 [eb-cfn-init]:   ++ /opt/elasticbeanstalk/bin/get-config container -k tomcat_version\nJul  4 05:29:53 ip-172-31-17-226 [eb-cfn-init]:   + TOMCAT_VERSION=8.5\nJul  4 05:29:53 ip-172-31-17-226 [eb-cfn-init]:   + '[' 8.5 == 8.5 ']'\nJul  4 05:29:53 ip-172-31-17-226 [eb-cfn-init]:   + TOMCAT_VERSION=8\nJul  4 05:29:53 ip-172-31-17-226 [eb-cfn-init]:   + TOMCAT_NAME=tomcat8\nJul  4 05:29:53 ip-172-31-17-226 [eb-cfn-init]:   + TOMCAT_HOME=/usr/share/tomcat8\nJul  4 05:29:53 ip-172-31-17-226 [eb-cfn-init]:   + TOMCAT_CONF_HOME=/etc/tomcat8\nJul  4 05:29:53 ip-172-31-17-226 [eb-cfn-init]:   + SET_LIMIT_SH=/etc/elasticbeanstalk/set-ulimit.sh\nJul  4 05:29:53 ip-172-31-17-226 [eb-cfn-init]:   + echo 'Patching Tomcat 8 startup scripts'\nJul  4 05:29:53 ip-172-31-17-226 [eb-cfn-init]:   Patching Tomcat 8 startup scripts\nJul  4 05:29:53 ip-172-31-17-226 [eb-cfn-init]:   + '[' -f /opt/elasticbeanstalk/containerfiles/tomcat-elasticbeanstalk ']'\nJul  4 05:29:53 ip-172-31-17-226 [eb-cfn-init]:   + echo 'Installing tomcat-elasticbeanstalk script'\nJul  4 05:29:53 ip-172-31-17-226 [eb-cfn-init]:   Installing tomcat-elasticbeanstalk script\nJul  4 05:29:53 ip-172-31-17-226 [eb-cfn-init]:   + /bin/mv /opt/elasticbeanstalk/containerfiles/tomcat-elasticbeanstalk /usr/sbin\nJul  4 05:29:53 ip-172-31-17-226 [eb-cfn-init]:   + /bin/chown root:root /usr/sbin/tomcat-elasticbeanstalk\nJul  4 05:29:53 ip-172-31-17-226 [eb-cfn-init]:   + /bin/chmod 755 /usr/sbin/tomcat-elasticbeanstalk\nJul  4 05:29:53 ip-172-31-17-226 [eb-cfn-init]:   + echo 'Fixing Tomcat 8 init.d script'\nJul  4 05:29:53 ip-172-31-17-226 [eb-cfn-init]:   Fixing Tomcat 8 init.d script\nJul  4 05:29:53 ip-172-31-17-226 [eb-cfn-init]:   + /bin/sed -i -e 's/\\/usr\\/sbin\\/tomcat8/\\/usr\\/sbin\\/tomcat-elasticbeanstalk/g' /etc/init.d/tomcat8\nJul  4 05:29:53 ip-172-31-17-226 [eb-cfn-init]:   + grep -q /etc/elasticbeanstalk/set-ulimit.sh\nJul  4 05:29:53 ip-172-31-17-226 [eb-cfn-init]:   + cat /etc/init.d/tomcat8\nJul  4 05:29:53 ip-172-31-17-226 [eb-cfn-init]:   + sed -i '/function start() {/a \\ \\ \\ if [ -f /etc/elasticbeanstalk/set-ulimit.sh ]; then . /etc/elasticbeanstalk/set-ulimit.sh; fi' /etc/init.d/tomcat8\nJul  4 05:29:53 ip-172-31-17-226 [eb-cfn-init]:   + echo 'Adding X-Forwarded-Proto valve'\nJul  4 05:29:53 ip-172-31-17-226 [eb-cfn-init]:   Adding X-Forwarded-Proto valve\nJul  4 05:29:53 ip-172-31-17-226 [eb-cfn-init]:   + /bin/sed -i -e '/<\\/Host>/ i\\\nJul  4 05:29:53 ip-172-31-17-226 [eb-cfn-init]:       <Valve className=\"org.apache.catalina.valves.RemoteIpValve\" protocolHeader=\"X-Forwarded-Proto\" internalProxies=\"10\\.\\d+\\.\\d+\\.\\d+|192\\.168\\.\\d+\\.\\d+|169\\.254\\.\\d+\\.\\d+|127\\.\\d+\\.\\d+\\.\\d+|172\\.(1[6-9]|2[0-9]|3[0-1])\\.\\d+\\.\\d+\" \\/>\nJul  4 05:29:53 ip-172-31-17-226 [eb-cfn-init]:   ' /etc/tomcat8/server.xml\nJul  4 05:29:53 ip-172-31-17-226 [eb-cfn-init]:   + echo 'Setting UTF-8 support'\nJul  4 05:29:53 ip-172-31-17-226 [eb-cfn-init]:   Setting UTF-8 support\nJul  4 05:29:53 ip-172-31-17-226 [eb-cfn-init]:   + grep -q 'Elastic Beanstalk' /etc/tomcat8/server.xml\nJul  4 05:29:53 ip-172-31-17-226 [eb-cfn-init]:   + sed -i '1 a\\<!-- Elastic Beanstalk Maintained -->' /etc/tomcat8/server.xml\nJul  4 05:29:53 ip-172-31-17-226 [eb-cfn-init]:   + sed -i 's/<Connector port=\\\"8080\\\" protocol=\\\"HTTP\\/1.1\\\"/&\nJul  4 05:29:53 ip-172-31-17-226 [eb-cfn-init]:                URIEncoding=\"UTF-8\"/g' /etc/tomcat8/server.xml\nJul  4 05:29:53 ip-172-31-17-226 [eb-cfn-init]:   + ln -sf /usr/share/java/apache-commons-pool.jar /usr/share/tomcat8/lib/\nJul  4 05:29:53 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:52.389Z] INFO  [2847]  - [Initialization/PreInitStage0/PreInitHook/03processmgrsetup.sh] : Starting activity...\nJul  4 05:29:54 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:52.488Z] INFO  [2847]  - [Initialization/PreInitStage0/PreInitHook/03processmgrsetup.sh] : Completed activity. Result:\nJul  4 05:29:54 ip-172-31-17-226 [eb-cfn-init]:   ++ /opt/elasticbeanstalk/bin/get-config container -k tomcat_version\nJul  4 05:29:54 ip-172-31-17-226 [eb-cfn-init]:   + TOMCAT_VERSION=8.5\nJul  4 05:29:54 ip-172-31-17-226 [eb-cfn-init]:   + '[' 8.5 == 8.5 ']'\nJul  4 05:29:54 ip-172-31-17-226 [eb-cfn-init]:   + TOMCAT_VERSION=8\nJul  4 05:29:54 ip-172-31-17-226 [eb-cfn-init]:   + MONIT_TOMCAT_CONF=monit-tomcat8.conf\nJul  4 05:29:54 ip-172-31-17-226 [eb-cfn-init]:   + /bin/cp -f /opt/elasticbeanstalk/containerfiles/monit-tomcat8.conf /etc/monit.d/\nJul  4 05:29:54 ip-172-31-17-226 [eb-cfn-init]:   + chmod 0600 /etc/monit.d/monit-tomcat8.conf\nJul  4 05:29:54 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:52.488Z] INFO  [2847]  - [Initialization/PreInitStage0/PreInitHook] : Completed activity. Result:\nJul  4 05:29:54 ip-172-31-17-226 [eb-cfn-init]:   Successfully execute hooks in directory /opt/elasticbeanstalk/hooks/preinit.\nJul  4 05:29:54 ip-172-31-17-226 ntpd[3092]: ntpd 4.2.8p12@1.3728-o Fri May  3 15:36:34 UTC 2019 (1): Starting\nJul  4 05:29:54 ip-172-31-17-226 ntpd[3092]: Command line: ntpd -u ntp:ntp -p /var/run/ntpd.pid -g\nJul  4 05:29:54 ip-172-31-17-226 ntpd[3094]: proto: precision = 0.624 usec (-21)\nJul  4 05:29:54 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:52.488Z] INFO  [2847]  - [Initialization/PreInitStage0] : Completed activity. Result:\nJul  4 05:29:54 ip-172-31-17-226 ntpd[3094]: Listen and drop on 0 v4wildcard 0.0.0.0:123\nJul  4 05:29:54 ip-172-31-17-226 ntpd[3094]: Listen normally on 1 lo 127.0.0.1:123\nJul  4 05:29:54 ip-172-31-17-226 ntpd[3094]: Listen normally on 2 eth0 172.31.17.226:123\nJul  4 05:29:54 ip-172-31-17-226 ntpd[3094]: Listening on routing socket on fd #19 for interface updates\nJul  4 05:29:54 ip-172-31-17-226 ntpd[3094]: kernel reports TIME_ERROR: 0x41: Clock Unsynchronized\nJul  4 05:29:54 ip-172-31-17-226 ntpd[3094]: kernel reports TIME_ERROR: 0x41: Clock Unsynchronized\nJul  4 05:29:54 ip-172-31-17-226 [eb-cfn-init]:   Initialization - Command CMD-PreInit stage 0 completed\nJul  4 05:29:54 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:52.488Z] INFO  [2847]  - [Initialization/AddonsAfter] : Starting activity...\nJul  4 05:29:54 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:52.488Z] INFO  [2847]  - [Initialization/AddonsAfter] : Completed activity.\nJul  4 05:29:54 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:52.488Z] INFO  [2847]  - [Initialization] : Completed activity. Result:\nJul  4 05:29:54 ip-172-31-17-226 [eb-cfn-init]:   Initialization - Command CMD-PreInit succeeded\nJul  4 05:29:54 ip-172-31-17-226 [eb-cfn-init]: ******************* End of taillog *******************\nJul  4 05:29:54 ip-172-31-17-226 [eb-cfn-init]: \nJul  4 05:29:54 ip-172-31-17-226 [eb-cfn-init]: \nJul  4 05:29:54 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:53.034Z] Tailing /var/log/eb-tools.log\nJul  4 05:29:54 ip-172-31-17-226 [eb-cfn-init]: \nJul  4 05:29:54 ip-172-31-17-226 [eb-cfn-init]: ******************* eb-tools taillog *******************\nJul  4 05:29:54 ip-172-31-17-226 [eb-cfn-init]: ***eb-tools is not available yet.***\nJul  4 05:29:54 ip-172-31-17-226 [eb-cfn-init]: ******************* End of taillog *******************\nJul  4 05:29:54 ip-172-31-17-226 [eb-cfn-init]: \nJul  4 05:29:54 ip-172-31-17-226 [eb-cfn-init]: \nJul  4 05:29:54 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:53.043Z] Tailing /var/log/eb-version-deployment.log\nJul  4 05:29:54 ip-172-31-17-226 [eb-cfn-init]: \nJul  4 05:29:54 ip-172-31-17-226 [eb-cfn-init]: ******************* eb-version-deployment taillog *******************\nJul  4 05:29:54 ip-172-31-17-226 [eb-cfn-init]: ***eb-version-deployment is not available yet.***\nJul  4 05:29:54 ip-172-31-17-226 [eb-cfn-init]: ******************* End of taillog *******************\nJul  4 05:29:54 ip-172-31-17-226 [eb-cfn-init]: \nJul  4 05:29:54 ip-172-31-17-226 [eb-cfn-init]: \nJul  4 05:29:54 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:53.045Z] Tailing /var/log/cfn-init.log\nJul  4 05:29:54 ip-172-31-17-226 [eb-cfn-init]: \nJul  4 05:29:54 ip-172-31-17-226 [eb-cfn-init]: ******************* cfn-init taillog *******************\nJul  4 05:29:54 ip-172-31-17-226 [eb-cfn-init]: 2019-07-04 05:29:46,286 [INFO] -----------------------Starting build-----------------------\nJul  4 05:29:54 ip-172-31-17-226 [eb-cfn-init]: 2019-07-04 05:29:46,292 [INFO] Running configSets: _OnInstanceBoot\nJul  4 05:29:54 ip-172-31-17-226 [eb-cfn-init]: 2019-07-04 05:29:46,295 [INFO] Running configSet _OnInstanceBoot\nJul  4 05:29:54 ip-172-31-17-226 [eb-cfn-init]: 2019-07-04 05:29:46,300 [INFO] Running config AWSEBBaseConfig\nJul  4 05:29:54 ip-172-31-17-226 [eb-cfn-init]: 2019-07-04 05:29:46,306 [INFO] Command clearbackupfiles succeeded\nJul  4 05:29:54 ip-172-31-17-226 [eb-cfn-init]: 2019-07-04 05:29:46,311 [INFO] Running config AWSEBMessageOfTheDay\nJul  4 05:29:54 ip-172-31-17-226 [eb-cfn-init]: 2019-07-04 05:29:46,316 [INFO] Command 01clearoriginal succeeded\nJul  4 05:29:54 ip-172-31-17-226 [eb-cfn-init]: 2019-07-04 05:29:46,320 [INFO] Command 02createbanner succeeded\nJul  4 05:29:54 ip-172-31-17-226 [eb-cfn-init]: 2019-07-04 05:29:46,331 [INFO] Command 03updatebanner succeeded\nJul  4 05:29:54 ip-172-31-17-226 [eb-cfn-init]: 2019-07-04 05:29:46,337 [INFO] Running config AWSEBULimitConfig\nJul  4 05:29:54 ip-172-31-17-226 [eb-cfn-init]: 2019-07-04 05:29:46,341 [INFO] Command 00removebackup succeeded\nJul  4 05:29:54 ip-172-31-17-226 [eb-cfn-init]: 2019-07-04 05:29:46,347 [INFO] Running config Infra-InstallContainerHooksPkg\nJul  4 05:29:54 ip-172-31-17-226 [eb-cfn-init]: 2019-07-04 05:29:46,351 [INFO] Command 00mkdir succeeded\nJul  4 05:29:54 ip-172-31-17-226 [eb-cfn-init]: 2019-07-04 05:29:46,390 [INFO] Command 01download_container_hooks succeeded\nJul  4 05:29:54 ip-172-31-17-226 [eb-cfn-init]: 2019-07-04 05:29:46,398 [INFO] Command 02install_container_hooks succeeded\nJul  4 05:29:54 ip-172-31-17-226 [eb-cfn-init]: 2019-07-04 05:29:46,402 [INFO] Command 03cleanup succeeded\nJul  4 05:29:54 ip-172-31-17-226 [eb-cfn-init]: 2019-07-04 05:29:46,407 [INFO] Running config Infra-WriteLeaderTestScript\nJul  4 05:29:54 ip-172-31-17-226 [eb-cfn-init]: 2019-07-04 05:29:46,412 [INFO] Running config Infra-WriteTailLogsConf\nJul  4 05:29:54 ip-172-31-17-226 [eb-cfn-init]: 2019-07-04 05:29:46,417 [INFO] Running config Infra-WriteSystemTailLogsConf\nJul  4 05:29:54 ip-172-31-17-226 [eb-cfn-init]: 2019-07-04 05:29:46,422 [INFO] Running config Infra-WriteBundleLogsConf\nJul  4 05:29:54 ip-172-31-17-226 [eb-cfn-init]: 2019-07-04 05:29:46,427 [INFO] Running config Infra-WritePublishLogsConf\nJul  4 05:29:54 ip-172-31-17-226 [eb-cfn-init]: 2019-07-04 05:29:46,431 [INFO] Running config Infra-WritePublishLogsCron\nJul  4 05:29:54 ip-172-31-17-226 [eb-cfn-init]: 2019-07-04 05:29:46,432 [INFO] ConfigSets completed\nJul  4 05:29:54 ip-172-31-17-226 [eb-cfn-init]: 2019-07-04 05:29:46,432 [INFO] -----------------------Build complete-----------------------\nJul  4 05:29:54 ip-172-31-17-226 [eb-cfn-init]: ******************* End of taillog *******************\nJul  4 05:29:54 ip-172-31-17-226 [eb-cfn-init]: \nJul  4 05:29:54 ip-172-31-17-226 [eb-cfn-init]: \nJul  4 05:29:54 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:53.055Z] Tailing /var/log/cfn-hup.log\nJul  4 05:29:54 ip-172-31-17-226 [eb-cfn-init]: \nJul  4 05:29:54 ip-172-31-17-226 [eb-cfn-init]: ******************* cfn-hup taillog *******************\nJul  4 05:29:54 ip-172-31-17-226 [eb-cfn-init]: 2019-07-04 05:29:47,612 [DEBUG] CloudFormation client initialized with endpoint https://cloudformation.us-east-1.amazonaws.com\nJul  4 05:29:54 ip-172-31-17-226 [eb-cfn-init]: 2019-07-04 05:29:47,613 [DEBUG] SQS client initialized with endpoint https://queue.amazonaws.com\nJul  4 05:29:54 ip-172-31-17-226 [eb-cfn-init]: 2019-07-04 05:29:47,613 [DEBUG] CloudFormation client initialized with endpoint https://cloudformation.us-east-1.amazonaws.com\nJul  4 05:29:54 ip-172-31-17-226 [eb-cfn-init]: 2019-07-04 05:29:47,613 [DEBUG] Enabled single threading mode.\nJul  4 05:29:54 ip-172-31-17-226 [eb-cfn-init]: 2019-07-04 05:29:47,613 [DEBUG] Creating /var/lib/cfn-hup/data\nJul  4 05:29:54 ip-172-31-17-226 [eb-cfn-init]: 2019-07-04 05:29:47,623 [INFO] No umask value specified in config file. Using the default one: 022\nJul  4 05:29:54 ip-172-31-17-226 [eb-cfn-init]: 2019-07-04 05:29:47,644 [DEBUG] Registering listener i-0297856d09027860c for stack arn:aws:cloudformation:us-east-1:825148403966:stack/awseb-e-nrncavevhv-stack/9312b360-9e1c-11e9-8002-0a62acea77ae\nJul  4 05:29:54 ip-172-31-17-226 [eb-cfn-init]: 2019-07-04 05:29:48,260 [INFO] Refreshing listener credentials\nJul  4 05:29:54 ip-172-31-17-226 [eb-cfn-init]: 2019-07-04 05:29:48,261 [DEBUG] Get listener credentials for listener i-0297856d09027860c in stack arn:aws:cloudformation:us-east-1:825148403966:stack/awseb-e-nrncavevhv-stack/9312b360-9e1c-11e9-8002-0a62acea77ae\nJul  4 05:29:54 ip-172-31-17-226 [eb-cfn-init]: 2019-07-04 05:29:48,375 [INFO] Scheduling next credential refresh in 7200 seconds\nJul  4 05:29:54 ip-172-31-17-226 [eb-cfn-init]: 2019-07-04 05:29:48,376 [DEBUG] Receiving messages for queue https://queue.amazonaws.com/668920780829/6e093f27c5cd3c417dec4f3a3f1273ae414e3efa9cbe9cbc05ac955569b5b16b\nJul  4 05:29:54 ip-172-31-17-226 [eb-cfn-init]: ******************* End of taillog *******************\nJul  4 05:29:54 ip-172-31-17-226 [eb-cfn-init]: \nJul  4 05:29:54 ip-172-31-17-226 [eb-cfn-init]: \nJul  4 05:29:54 ip-172-31-17-226 [eb-cfn-init]: [2019-07-04T05:29:53.070Z] Completed EB Bootstrapping Script.\nJul  4 05:29:54 ip-172-31-17-226 [eb-cfn-init]:  4 Jul 05:29:54 ntpdate[2688]: step time server 74.208.26.225 offset 0.524304 sec\nJul  4 05:29:54 ip-172-31-17-226 [eb-cfn-init]: Starting ntpd: [  OK  ]#015\nJul  4 05:29:56 ip-172-31-17-226 ntpd[3094]: Soliciting pool server 198.50.238.163\nJul  4 05:29:57 ip-172-31-17-226 ntpd[3094]: Soliciting pool server 50.116.52.97\nJul  4 05:29:58 ip-172-31-17-226 dhclient[2213]: XMT: Solicit on eth0, interval 17150ms.\nJul  4 05:29:58 ip-172-31-17-226 ntpd[3094]: Soliciting pool server 66.220.10.2\nJul  4 05:30:15 ip-172-31-17-226 dhclient[2213]: XMT: Solicit on eth0, interval 33500ms.\nJul  4 05:30:22 ip-172-31-17-226 init: xray main process (2256) terminated with status 1\nJul  4 05:30:26 ip-172-31-17-226 init: healthd main process (2759) terminated with status 1\nJul  4 05:30:26 ip-172-31-17-226 su: (to healthd) root on none\nJul  4 05:30:48 ip-172-31-17-226 dhclient[2213]: XMT: Solicit on eth0, interval 69010ms.\nJul  4 05:31:04 ip-172-31-17-226 ntpd[3094]: Soliciting pool server 74.208.26.225\nJul  4 05:31:57 ip-172-31-17-226 dhclient[2213]: XMT: Solicit on eth0, interval 110620ms.\nJul  4 05:33:48 ip-172-31-17-226 dhclient[2213]: XMT: Solicit on eth0, interval 108500ms.\nJul  4 05:35:07 ip-172-31-17-226 ntpd[3094]: kernel reports TIME_ERROR: 0x41: Clock Unsynchronized\nJul  4 05:35:37 ip-172-31-17-226 dhclient[2213]: XMT: Solicit on eth0, interval 123310ms.\nJul  4 05:37:40 ip-172-31-17-226 dhclient[2213]: XMT: Solicit on eth0, interval 109030ms.\nJul  4 05:39:29 ip-172-31-17-226 dhclient[2213]: XMT: Solicit on eth0, interval 124030ms.\nJul  4 05:41:33 ip-172-31-17-226 dhclient[2213]: XMT: Solicit on eth0, interval 120680ms.\nJul  4 05:43:34 ip-172-31-17-226 dhclient[2213]: XMT: Solicit on eth0, interval 119920ms.\nJul  4 05:45:34 ip-172-31-17-226 dhclient[2213]: XMT: Solicit on eth0, interval 116750ms.\nJul  4 05:47:31 ip-172-31-17-226 dhclient[2213]: XMT: Solicit on eth0, interval 119500ms.\nJul  4 05:49:30 ip-172-31-17-226 dhclient[2213]: XMT: Solicit on eth0, interval 127060ms.\nJul  4 05:51:38 ip-172-31-17-226 dhclient[2213]: XMT: Solicit on eth0, interval 131690ms.\nJul  4 05:53:49 ip-172-31-17-226 dhclient[2213]: XMT: Solicit on eth0, interval 117510ms.\nJul  4 05:54:32 ip-172-31-17-226 dhclient[2110]: DHCPREQUEST on eth0 to 172.31.16.1 port 67 (xid=0x28e8d534)\nJul  4 05:54:32 ip-172-31-17-226 dhclient[2110]: DHCPACK from 172.31.16.1 (xid=0x28e8d534)\nJul  4 05:54:32 ip-172-31-17-226 dhclient[2110]: bound to 172.31.17.226 -- renewal in 1672 seconds.\nJul  4 05:54:32 ip-172-31-17-226 ec2net: [get_meta] Trying to get http://169.254.169.254/latest/meta-data/network/interfaces/macs/0a:e0:bb:e2:03:74/local-ipv4s\nJul  4 05:54:32 ip-172-31-17-226 ec2net: [rewrite_aliases] Rewriting aliases of eth0\nJul  4 05:55:26 ip-172-31-17-226 init: healthd main process (3629) terminated with status 1\nJul  4 05:55:26 ip-172-31-17-226 su: (to healthd) root on none\nJul  4 05:55:47 ip-172-31-17-226 dhclient[2213]: XMT: Solicit on eth0, interval 128810ms.\nJul  4 05:57:56 ip-172-31-17-226 dhclient[2213]: XMT: Solicit on eth0, interval 124550ms.\nJul  4 06:00:01 ip-172-31-17-226 dhclient[2213]: XMT: Solicit on eth0, interval 127520ms.\n"
  },
  {
    "path": "03-spring-boot-web-application-h2/log/monit",
    "content": "[UTC Jul  4 05:30:23] info     : monit: generated unique Monit id f33fa9d1d8279ce6159bab470de18393 and stored to '/root/.monit.id'\n[UTC Jul  4 05:30:27] info     : Starting monit HTTP server at [localhost:2812]\n[UTC Jul  4 05:30:27] info     : monit HTTP server started\n[UTC Jul  4 05:30:27] info     : 'system_ip-172-31-17-226.ec2.internal' Monit started\n[UTC Jul  4 05:55:20] info     : unmonitor service 'tomcat' on user request\n[UTC Jul  4 05:55:20] info     : monit daemon at 3645 awakened\n[UTC Jul  4 05:55:20] info     : Awakened by User defined signal 1\n[UTC Jul  4 05:55:20] info     : 'tomcat' unmonitor action done\n[UTC Jul  4 05:55:23] info     : monitor service 'tomcat' on user request\n[UTC Jul  4 05:55:23] info     : monit daemon at 3645 awakened\n[UTC Jul  4 05:55:23] info     : Awakened by User defined signal 1\n[UTC Jul  4 05:55:23] info     : 'tomcat' monitor action done\n"
  },
  {
    "path": "03-spring-boot-web-application-h2/log/tomcat8/catalina.out",
    "content": "OpenJDK 64-Bit Server VM warning: ignoring option MaxPermSize=64m; support was removed in 8.0\n04-Jul-2019 05:30:25.258 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version:        Apache Tomcat/8.5.40\n04-Jul-2019 05:30:25.267 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server built:          May 2 2019 18:02:51 UTC\n04-Jul-2019 05:30:25.267 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server number:         8.5.40.0\n04-Jul-2019 05:30:25.267 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Name:               Linux\n04-Jul-2019 05:30:25.267 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Version:            4.14.123-86.109.amzn1.x86_64\n04-Jul-2019 05:30:25.267 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Architecture:          amd64\n04-Jul-2019 05:30:25.267 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Java Home:             /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.201.b09-0.43.amzn1.x86_64/jre\n04-Jul-2019 05:30:25.267 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Version:           1.8.0_201-b09\n04-Jul-2019 05:30:25.267 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Vendor:            Oracle Corporation\n04-Jul-2019 05:30:25.268 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_BASE:         /usr/share/tomcat8\n04-Jul-2019 05:30:25.268 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_HOME:         /usr/share/tomcat8\n04-Jul-2019 05:30:25.268 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: [/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib]\n04-Jul-2019 05:30:25.478 INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler [\"http-nio-8080\"]\n04-Jul-2019 05:30:25.512 INFO [main] org.apache.tomcat.util.net.NioSelectorPool.getSharedSelector Using a shared selector for servlet write/read\n04-Jul-2019 05:30:25.546 INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler [\"ajp-nio-8009\"]\n04-Jul-2019 05:30:25.547 INFO [main] org.apache.tomcat.util.net.NioSelectorPool.getSharedSelector Using a shared selector for servlet write/read\n04-Jul-2019 05:30:25.554 INFO [main] org.apache.catalina.startup.Catalina.load Initialization processed in 1205 ms\n04-Jul-2019 05:30:25.603 INFO [main] org.apache.catalina.core.StandardService.startInternal Starting service [Catalina]\n04-Jul-2019 05:30:25.604 INFO [main] org.apache.catalina.core.StandardEngine.startInternal Starting Servlet Engine: Apache Tomcat/8.5.40\n04-Jul-2019 05:30:25.630 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/var/lib/tomcat8/webapps/ROOT]\n\n  .   ____          _            __ _ _\n /\\\\ / ___'_ __ _ _(_)_ __  __ _ \\ \\ \\ \\\n( ( )\\___ | '_ | '_| | '_ \\/ _` | \\ \\ \\ \\\n \\\\/  ___)| |_)| | | | | || (_| |  ) ) ) )\n  '  |____| .__|_| |_|_| |_\\__, | / / / /\n =========|_|==============|___/=/_/_/_/\n :: Spring Boot ::        (v2.1.0.RELEASE)\n\n2019-07-04 05:30:31.669  INFO 3448 --- [ost-startStop-1] c.i.s.web.SpringBootFirstWebApplication  : Starting SpringBootFirstWebApplication v0.0.1-SNAPSHOT on ip-172-31-17-226 with PID 3448 (/var/lib/tomcat8/webapps/ROOT/WEB-INF/classes started by tomcat in /usr/share/tomcat8)\n2019-07-04 05:30:31.685  INFO 3448 --- [ost-startStop-1] c.i.s.web.SpringBootFirstWebApplication  : No active profile set, falling back to default profiles: default\n2019-07-04 05:30:31.792  INFO 3448 --- [ost-startStop-1] .e.DevToolsPropertyDefaultsPostProcessor : For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG'\n2019-07-04 05:30:33.523  INFO 3448 --- [ost-startStop-1] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data repositories in DEFAULT mode.\n2019-07-04 05:30:33.739  INFO 3448 --- [ost-startStop-1] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 197ms. Found 1 repository interfaces.\n2019-07-04 05:30:34.852  INFO 3448 --- [ost-startStop-1] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration' of type [org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration$$EnhancerBySpringCGLIB$$c2a45ba] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)\n2019-07-04 05:30:34.940  INFO 3448 --- [ost-startStop-1] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 3148 ms\n2019-07-04 05:30:35.570  INFO 3448 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'characterEncodingFilter' to: [/*]\n2019-07-04 05:30:35.571  INFO 3448 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'errorPageFilter' to: [/*]\n2019-07-04 05:30:35.571  INFO 3448 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'hiddenHttpMethodFilter' to: [/*]\n2019-07-04 05:30:35.571  INFO 3448 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'formContentFilter' to: [/*]\n2019-07-04 05:30:35.571  INFO 3448 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'requestContextFilter' to: [/*]\n2019-07-04 05:30:35.571  INFO 3448 --- [ost-startStop-1] .s.DelegatingFilterProxyRegistrationBean : Mapping filter: 'springSecurityFilterChain' to: [/*]\n2019-07-04 05:30:35.571  INFO 3448 --- [ost-startStop-1] o.s.b.w.servlet.ServletRegistrationBean  : Servlet dispatcherServlet mapped to [/]\n2019-07-04 05:30:35.574  INFO 3448 --- [ost-startStop-1] o.s.b.w.servlet.ServletRegistrationBean  : Servlet webServlet mapped to [/h2-console/*]\n2019-07-04 05:30:35.896  INFO 3448 --- [ost-startStop-1] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...\n2019-07-04 05:30:36.209  INFO 3448 --- [ost-startStop-1] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.\n2019-07-04 05:30:36.372  INFO 3448 --- [ost-startStop-1] o.hibernate.jpa.internal.util.LogHelper  : HHH000204: Processing PersistenceUnitInfo [\n\tname: default\n\t...]\n2019-07-04 05:30:36.528  INFO 3448 --- [ost-startStop-1] org.hibernate.Version                    : HHH000412: Hibernate Core {5.3.7.Final}\n2019-07-04 05:30:36.531  INFO 3448 --- [ost-startStop-1] org.hibernate.cfg.Environment            : HHH000206: hibernate.properties not found\n2019-07-04 05:30:36.892  INFO 3448 --- [ost-startStop-1] o.hibernate.annotations.common.Version   : HCANN000001: Hibernate Commons Annotations {5.0.4.Final}\n2019-07-04 05:30:37.232  INFO 3448 --- [ost-startStop-1] org.hibernate.dialect.Dialect            : HHH000400: Using dialect: org.hibernate.dialect.H2Dialect\nHibernate: drop table todo if exists\nHibernate: drop sequence if exists hibernate_sequence\nHibernate: create sequence hibernate_sequence start with 1 increment by 1\nHibernate: create table todo (id integer not null, desc varchar(255), is_done boolean not null, target_date timestamp, user varchar(255), primary key (id))\n2019-07-04 05:30:38.519  INFO 3448 --- [ost-startStop-1] o.h.t.schema.internal.SchemaCreatorImpl  : HHH000476: Executing import script 'org.hibernate.tool.schema.internal.exec.ScriptSourceInputNonExistentImpl@14ecef78'\n2019-07-04 05:30:38.523  INFO 3448 --- [ost-startStop-1] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'\n2019-07-04 05:30:39.998  INFO 3448 --- [ost-startStop-1] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'\n2019-07-04 05:30:40.112  WARN 3448 --- [ost-startStop-1] aWebConfiguration$JpaWebMvcConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning\n2019-07-04 05:30:40.746  INFO 3448 --- [ost-startStop-1] o.s.s.web.DefaultSecurityFilterChain     : Creating filter chain: any request, [org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@393f2113, org.springframework.security.web.context.SecurityContextPersistenceFilter@737e7a2d, org.springframework.security.web.header.HeaderWriterFilter@2c01423e, org.springframework.security.web.authentication.logout.LogoutFilter@49750f0c, org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter@7dfd094b, org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter@53ce196a, org.springframework.security.web.authentication.ui.DefaultLogoutPageGeneratingFilter@5a2f7dd9, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@7a63738d, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@6c60a008, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@e44012f, org.springframework.security.web.session.SessionManagementFilter@906f4cd, org.springframework.security.web.access.ExceptionTranslationFilter@7eb0a8a2, org.springframework.security.web.access.intercept.FilterSecurityInterceptor@33c1492]\n2019-07-04 05:30:40.877  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : ====== Environment and configuration ======\n2019-07-04 05:30:40.878  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : Active profiles: []\n2019-07-04 05:30:40.880  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : contextConfigLocation\n2019-07-04 05:30:40.880  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : java.vendor\n2019-07-04 05:30:40.881  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : sun.java.launcher\n2019-07-04 05:30:40.881  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : catalina.base\n2019-07-04 05:30:40.881  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : sun.management.compiler\n2019-07-04 05:30:40.881  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : catalina.useNaming\n2019-07-04 05:30:40.881  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : os.name\n2019-07-04 05:30:40.886  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : sun.boot.class.path\n2019-07-04 05:30:40.888  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : java.util.logging.config.file\n2019-07-04 05:30:40.888  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : java.vm.specification.vendor\n2019-07-04 05:30:40.888  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : java.runtime.version\n2019-07-04 05:30:40.888  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : JDBC_CONNECTION_STRING\n2019-07-04 05:30:40.888  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : user.name\n2019-07-04 05:30:40.888  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : tomcat.util.scan.StandardJarScanFilter.jarsToScan\n2019-07-04 05:30:40.888  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : shared.loader\n2019-07-04 05:30:40.888  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : tomcat.util.buf.StringCache.byte.enabled\n2019-07-04 05:30:40.888  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : user.language\n2019-07-04 05:30:40.888  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : java.naming.factory.initial\n2019-07-04 05:30:40.888  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : sun.boot.library.path\n2019-07-04 05:30:40.888  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : com.zaxxer.hikari.pool_number\n2019-07-04 05:30:40.888  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : PID\n2019-07-04 05:30:40.888  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : java.version\n2019-07-04 05:30:40.888  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : java.util.logging.manager\n2019-07-04 05:30:40.888  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : user.timezone\n2019-07-04 05:30:40.888  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : sun.arch.data.model\n2019-07-04 05:30:40.888  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : java.util.concurrent.ForkJoinPool.common.threadFactory\n2019-07-04 05:30:40.889  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : java.endorsed.dirs\n2019-07-04 05:30:40.890  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : sun.cpu.isalist\n2019-07-04 05:30:40.894  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : sun.jnu.encoding\n2019-07-04 05:30:40.894  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : file.encoding.pkg\n2019-07-04 05:30:40.894  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : package.access\n2019-07-04 05:30:40.894  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : file.separator\n2019-07-04 05:30:40.894  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : java.specification.name\n2019-07-04 05:30:40.894  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : java.class.version\n2019-07-04 05:30:40.894  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : user.country\n2019-07-04 05:30:40.894  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : java.home\n2019-07-04 05:30:40.894  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : java.vm.info\n2019-07-04 05:30:40.895  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : os.version\n2019-07-04 05:30:40.895  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : path.separator\n2019-07-04 05:30:40.895  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : java.vm.version\n2019-07-04 05:30:40.895  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : java.awt.printerjob\n2019-07-04 05:30:40.895  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : sun.io.unicode.encoding\n2019-07-04 05:30:40.895  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : awt.toolkit\n2019-07-04 05:30:40.895  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : package.definition\n2019-07-04 05:30:40.895  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : java.naming.factory.url.pkgs\n2019-07-04 05:30:40.895  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : user.home\n2019-07-04 05:30:40.895  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : java.specification.vendor\n2019-07-04 05:30:40.895  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : tomcat.util.scan.StandardJarScanFilter.jarsToSkip\n2019-07-04 05:30:40.895  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : java.library.path\n2019-07-04 05:30:40.895  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : java.vendor.url\n2019-07-04 05:30:40.895  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : spring.beaninfo.ignore\n2019-07-04 05:30:40.895  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : java.vm.vendor\n2019-07-04 05:30:40.895  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : common.loader\n2019-07-04 05:30:40.895  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : java.runtime.name\n2019-07-04 05:30:40.895  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : sun.java.command\n2019-07-04 05:30:40.895  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : java.class.path\n2019-07-04 05:30:40.895  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : java.vm.specification.name\n2019-07-04 05:30:40.895  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : java.vm.specification.version\n2019-07-04 05:30:40.895  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : catalina.home\n2019-07-04 05:30:40.895  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : sun.cpu.endian\n2019-07-04 05:30:40.895  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : sun.os.patch.level\n2019-07-04 05:30:40.895  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : java.awt.headless\n2019-07-04 05:30:40.895  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : java.io.tmpdir\n2019-07-04 05:30:40.895  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : java.vendor.url.bug\n2019-07-04 05:30:40.895  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : server.loader\n2019-07-04 05:30:40.895  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : os.arch\n2019-07-04 05:30:40.896  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : java.awt.graphicsenv\n2019-07-04 05:30:40.896  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : java.ext.dirs\n2019-07-04 05:30:40.896  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : user.dir\n2019-07-04 05:30:40.896  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : line.separator\n2019-07-04 05:30:40.896  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : java.vm.name\n2019-07-04 05:30:40.896  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : file.encoding\n2019-07-04 05:30:40.896  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : java.specification.version\n2019-07-04 05:30:40.896  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : PATH\n2019-07-04 05:30:40.896  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : LESS_TERMCAP_md\n2019-07-04 05:30:40.896  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : TOMCAT_USER\n2019-07-04 05:30:40.896  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : LESS_TERMCAP_me\n2019-07-04 05:30:40.896  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : HISTCONTROL\n2019-07-04 05:30:40.896  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : LESS_TERMCAP_mb\n2019-07-04 05:30:40.896  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : CATALINA_PID\n2019-07-04 05:30:40.896  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : SHUTDOWN_VERBOSE\n2019-07-04 05:30:40.896  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : TOMCAT_NAME\n2019-07-04 05:30:40.896  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : AWS_AUTO_SCALING_HOME\n2019-07-04 05:30:40.896  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : CATALINA_TMPDIR\n2019-07-04 05:30:40.896  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : LESS_TERMCAP_se\n2019-07-04 05:30:40.896  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : HISTSIZE\n2019-07-04 05:30:40.896  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : JAVA_HOME\n2019-07-04 05:30:40.896  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : AWS_ELB_HOME\n2019-07-04 05:30:40.896  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : JAVA_OPTS\n2019-07-04 05:30:40.896  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : LESS_TERMCAP_us\n2019-07-04 05:30:40.896  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : EC2_HOME\n2019-07-04 05:30:40.896  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : TERM\n2019-07-04 05:30:40.896  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : LANG\n2019-07-04 05:30:40.896  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : AWS_CLOUDWATCH_HOME\n2019-07-04 05:30:40.896  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : CATALINA_BASE\n2019-07-04 05:30:40.897  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : MAIL\n2019-07-04 05:30:40.897  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : LESS_TERMCAP_ue\n2019-07-04 05:30:40.897  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : LOGNAME\n2019-07-04 05:30:40.897  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : PWD\n2019-07-04 05:30:40.897  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : _\n2019-07-04 05:30:40.897  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : SHUTDOWN_WAIT\n2019-07-04 05:30:40.897  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : LESSOPEN\n2019-07-04 05:30:40.897  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : TOMCAT_CFG\n2019-07-04 05:30:40.897  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : SHELL\n2019-07-04 05:30:40.897  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : CATALINA_HOME\n2019-07-04 05:30:40.897  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : AWS_PATH\n2019-07-04 05:30:40.897  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : USER\n2019-07-04 05:30:40.897  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : SECURITY_MANAGER\n2019-07-04 05:30:40.897  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : KILL_SLEEP_WAIT\n2019-07-04 05:30:40.897  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : HOSTNAME\n2019-07-04 05:30:40.897  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : JASPER_HOME\n2019-07-04 05:30:40.897  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : EC2_AMITOOL_HOME\n2019-07-04 05:30:40.897  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : SHLVL\n2019-07-04 05:30:40.897  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : HOME\n2019-07-04 05:30:40.897  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : spring.mvc.view.prefix\n2019-07-04 05:30:40.897  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : spring.mvc.view.suffix\n2019-07-04 05:30:40.897  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : logging.level.org.springframework.web\n2019-07-04 05:30:40.897  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : spring.jpa.show-sql\n2019-07-04 05:30:40.897  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : spring.h2.console.enabled\n2019-07-04 05:30:40.897  INFO 3448 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : ===========================================\n2019-07-04 05:30:40.920  INFO 3448 --- [ost-startStop-1] c.i.s.web.SpringBootFirstWebApplication  : Started SpringBootFirstWebApplication in 10.577 seconds (JVM running for 17.249)\n04-Jul-2019 05:30:41.164 INFO [localhost-startStop-1] org.apache.jasper.servlet.TldScanner.scanJars At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.\n04-Jul-2019 05:30:41.278 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/var/lib/tomcat8/webapps/ROOT] has finished in [15,643] ms\n04-Jul-2019 05:30:41.280 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler [\"http-nio-8080\"]\n04-Jul-2019 05:30:41.310 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler [\"ajp-nio-8009\"]\n04-Jul-2019 05:30:41.327 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in 15772 ms\n2019-07-04 05:49:19.787  INFO 3448 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'\n2019-07-04 05:49:19.818  INFO 3448 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Completed initialization in 31 ms\n2019-07-04 05:49:38.508  INFO 3448 --- [nio-8080-exec-2] o.h.h.i.QueryTranslatorFactoryInitiator  : HHH000397: Using ASTQueryTranslatorFactory\nHibernate: select todo0_.id as id1_0_, todo0_.desc as desc2_0_, todo0_.is_done as is_done3_0_, todo0_.target_date as target_d4_0_, todo0_.user as user5_0_ from todo todo0_ where todo0_.user=?\nOpenJDK 64-Bit Server VM warning: ignoring option MaxPermSize=64m; support was removed in 8.0\n04-Jul-2019 05:55:20.787 INFO [main] org.apache.catalina.core.StandardServer.await A valid shutdown command was received via the shutdown port. Stopping the Server instance.\n04-Jul-2019 05:55:20.787 INFO [main] org.apache.coyote.AbstractProtocol.pause Pausing ProtocolHandler [\"http-nio-8080\"]\n04-Jul-2019 05:55:20.791 INFO [main] org.apache.coyote.AbstractProtocol.pause Pausing ProtocolHandler [\"ajp-nio-8009\"]\n04-Jul-2019 05:55:20.792 INFO [main] org.apache.catalina.core.StandardService.stopInternal Stopping service [Catalina]\nHibernate: drop table todo if exists\nHibernate: drop sequence if exists hibernate_sequence\n04-Jul-2019 05:55:20.895 WARNING [localhost-startStop-2] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesJdbc The web application [ROOT] registered the JDBC driver [org.h2.Driver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered.\n04-Jul-2019 05:55:20.911 INFO [main] org.apache.coyote.AbstractProtocol.stop Stopping ProtocolHandler [\"http-nio-8080\"]\n04-Jul-2019 05:55:20.914 INFO [main] org.apache.coyote.AbstractProtocol.stop Stopping ProtocolHandler [\"ajp-nio-8009\"]\n04-Jul-2019 05:55:20.915 INFO [main] org.apache.coyote.AbstractProtocol.destroy Destroying ProtocolHandler [\"http-nio-8080\"]\n04-Jul-2019 05:55:20.916 INFO [main] org.apache.coyote.AbstractProtocol.destroy Destroying ProtocolHandler [\"ajp-nio-8009\"]\nOpenJDK 64-Bit Server VM warning: ignoring option MaxPermSize=64m; support was removed in 8.0\n04-Jul-2019 05:55:24.961 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version:        Apache Tomcat/8.5.40\n04-Jul-2019 05:55:24.966 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server built:          May 2 2019 18:02:51 UTC\n04-Jul-2019 05:55:24.967 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server number:         8.5.40.0\n04-Jul-2019 05:55:24.967 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Name:               Linux\n04-Jul-2019 05:55:24.967 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Version:            4.14.123-86.109.amzn1.x86_64\n04-Jul-2019 05:55:24.967 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Architecture:          amd64\n04-Jul-2019 05:55:24.968 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Java Home:             /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.201.b09-0.43.amzn1.x86_64/jre\n04-Jul-2019 05:55:24.968 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Version:           1.8.0_201-b09\n04-Jul-2019 05:55:24.968 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Vendor:            Oracle Corporation\n04-Jul-2019 05:55:24.968 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_BASE:         /usr/share/tomcat8\n04-Jul-2019 05:55:24.969 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_HOME:         /usr/share/tomcat8\n04-Jul-2019 05:55:24.969 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: [/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib]\n04-Jul-2019 05:55:25.142 INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler [\"http-nio-8080\"]\n04-Jul-2019 05:55:25.166 INFO [main] org.apache.tomcat.util.net.NioSelectorPool.getSharedSelector Using a shared selector for servlet write/read\n04-Jul-2019 05:55:25.200 INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler [\"ajp-nio-8009\"]\n04-Jul-2019 05:55:25.203 INFO [main] org.apache.tomcat.util.net.NioSelectorPool.getSharedSelector Using a shared selector for servlet write/read\n04-Jul-2019 05:55:25.206 INFO [main] org.apache.catalina.startup.Catalina.load Initialization processed in 1260 ms\n04-Jul-2019 05:55:25.248 INFO [main] org.apache.catalina.core.StandardService.startInternal Starting service [Catalina]\n04-Jul-2019 05:55:25.250 INFO [main] org.apache.catalina.core.StandardEngine.startInternal Starting Servlet Engine: Apache Tomcat/8.5.40\n04-Jul-2019 05:55:25.273 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/var/lib/tomcat8/webapps/ROOT]\n\n  .   ____          _            __ _ _\n /\\\\ / ___'_ __ _ _(_)_ __  __ _ \\ \\ \\ \\\n( ( )\\___ | '_ | '_| | '_ \\/ _` | \\ \\ \\ \\\n \\\\/  ___)| |_)| | | | | || (_| |  ) ) ) )\n  '  |____| .__|_| |_|_| |_\\__, | / / / /\n =========|_|==============|___/=/_/_/_/\n :: Spring Boot ::        (v2.1.0.RELEASE)\n\n2019-07-04 05:55:31.206  INFO 4887 --- [ost-startStop-1] c.i.s.web.SpringBootFirstWebApplication  : Starting SpringBootFirstWebApplication v0.0.1-SNAPSHOT on ip-172-31-17-226 with PID 4887 (/var/lib/tomcat8/webapps/ROOT/WEB-INF/classes started by tomcat in /usr/share/tomcat8)\n2019-07-04 05:55:31.217  INFO 4887 --- [ost-startStop-1] c.i.s.web.SpringBootFirstWebApplication  : No active profile set, falling back to default profiles: default\n2019-07-04 05:55:31.332  INFO 4887 --- [ost-startStop-1] .e.DevToolsPropertyDefaultsPostProcessor : For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG'\n2019-07-04 05:55:32.992  INFO 4887 --- [ost-startStop-1] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data repositories in DEFAULT mode.\n2019-07-04 05:55:33.167  INFO 4887 --- [ost-startStop-1] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 152ms. Found 1 repository interfaces.\n2019-07-04 05:55:34.292  INFO 4887 --- [ost-startStop-1] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration' of type [org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration$$EnhancerBySpringCGLIB$$842ee2c1] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)\n2019-07-04 05:55:34.387  INFO 4887 --- [ost-startStop-1] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 3054 ms\n2019-07-04 05:55:34.994  INFO 4887 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'characterEncodingFilter' to: [/*]\n2019-07-04 05:55:34.998  INFO 4887 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'errorPageFilter' to: [/*]\n2019-07-04 05:55:34.998  INFO 4887 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'hiddenHttpMethodFilter' to: [/*]\n2019-07-04 05:55:34.998  INFO 4887 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'formContentFilter' to: [/*]\n2019-07-04 05:55:34.999  INFO 4887 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'requestContextFilter' to: [/*]\n2019-07-04 05:55:34.999  INFO 4887 --- [ost-startStop-1] .s.DelegatingFilterProxyRegistrationBean : Mapping filter: 'springSecurityFilterChain' to: [/*]\n2019-07-04 05:55:34.999  INFO 4887 --- [ost-startStop-1] o.s.b.w.servlet.ServletRegistrationBean  : Servlet dispatcherServlet mapped to [/]\n2019-07-04 05:55:35.001  INFO 4887 --- [ost-startStop-1] o.s.b.w.servlet.ServletRegistrationBean  : Servlet webServlet mapped to [/h2-console/*]\n2019-07-04 05:55:35.311  INFO 4887 --- [ost-startStop-1] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...\n2019-07-04 05:55:35.643  INFO 4887 --- [ost-startStop-1] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.\n2019-07-04 05:55:35.801  INFO 4887 --- [ost-startStop-1] o.hibernate.jpa.internal.util.LogHelper  : HHH000204: Processing PersistenceUnitInfo [\n\tname: default\n\t...]\n2019-07-04 05:55:35.982  INFO 4887 --- [ost-startStop-1] org.hibernate.Version                    : HHH000412: Hibernate Core {5.3.7.Final}\n2019-07-04 05:55:35.985  INFO 4887 --- [ost-startStop-1] org.hibernate.cfg.Environment            : HHH000206: hibernate.properties not found\n2019-07-04 05:55:36.304  INFO 4887 --- [ost-startStop-1] o.hibernate.annotations.common.Version   : HCANN000001: Hibernate Commons Annotations {5.0.4.Final}\n2019-07-04 05:55:36.517  INFO 4887 --- [ost-startStop-1] org.hibernate.dialect.Dialect            : HHH000400: Using dialect: org.hibernate.dialect.H2Dialect\nHibernate: drop table todo if exists\nHibernate: drop sequence if exists hibernate_sequence\nHibernate: create sequence hibernate_sequence start with 1 increment by 1\nHibernate: create table todo (id integer not null, desc varchar(255), is_done boolean not null, target_date timestamp, user varchar(255), primary key (id))\n2019-07-04 05:55:37.612  INFO 4887 --- [ost-startStop-1] o.h.t.schema.internal.SchemaCreatorImpl  : HHH000476: Executing import script 'org.hibernate.tool.schema.internal.exec.ScriptSourceInputNonExistentImpl@6382c0eb'\n2019-07-04 05:55:37.615  INFO 4887 --- [ost-startStop-1] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'\n2019-07-04 05:55:39.259  INFO 4887 --- [ost-startStop-1] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'\n2019-07-04 05:55:39.373  WARN 4887 --- [ost-startStop-1] aWebConfiguration$JpaWebMvcConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning\n2019-07-04 05:55:40.027  INFO 4887 --- [ost-startStop-1] o.s.s.web.DefaultSecurityFilterChain     : Creating filter chain: any request, [org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@5f9ec331, org.springframework.security.web.context.SecurityContextPersistenceFilter@6d657f, org.springframework.security.web.header.HeaderWriterFilter@5cbedefd, org.springframework.security.web.authentication.logout.LogoutFilter@3d5f1f8e, org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter@123985d9, org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter@61ce3e6e, org.springframework.security.web.authentication.ui.DefaultLogoutPageGeneratingFilter@3204060, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@21f95c74, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@65467ae9, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@5dcb2cca, org.springframework.security.web.session.SessionManagementFilter@52a191c2, org.springframework.security.web.access.ExceptionTranslationFilter@55b4bdd8, org.springframework.security.web.access.intercept.FilterSecurityInterceptor@391afea8]\n2019-07-04 05:55:40.154  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : ====== Environment and configuration ======\n2019-07-04 05:55:40.154  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : Active profiles: []\n2019-07-04 05:55:40.157  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : contextConfigLocation\n2019-07-04 05:55:40.159  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : java.vendor\n2019-07-04 05:55:40.159  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : sun.java.launcher\n2019-07-04 05:55:40.159  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : catalina.base\n2019-07-04 05:55:40.159  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : sun.management.compiler\n2019-07-04 05:55:40.159  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : catalina.useNaming\n2019-07-04 05:55:40.159  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : os.name\n2019-07-04 05:55:40.160  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : sun.boot.class.path\n2019-07-04 05:55:40.161  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : java.util.logging.config.file\n2019-07-04 05:55:40.166  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : java.vm.specification.vendor\n2019-07-04 05:55:40.166  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : java.runtime.version\n2019-07-04 05:55:40.166  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : JDBC_CONNECTION_STRING\n2019-07-04 05:55:40.166  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : user.name\n2019-07-04 05:55:40.166  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : tomcat.util.scan.StandardJarScanFilter.jarsToScan\n2019-07-04 05:55:40.166  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : shared.loader\n2019-07-04 05:55:40.166  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : tomcat.util.buf.StringCache.byte.enabled\n2019-07-04 05:55:40.166  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : user.language\n2019-07-04 05:55:40.166  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : java.naming.factory.initial\n2019-07-04 05:55:40.166  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : sun.boot.library.path\n2019-07-04 05:55:40.166  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : com.zaxxer.hikari.pool_number\n2019-07-04 05:55:40.166  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : PID\n2019-07-04 05:55:40.166  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : java.version\n2019-07-04 05:55:40.166  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : java.util.logging.manager\n2019-07-04 05:55:40.166  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : user.timezone\n2019-07-04 05:55:40.166  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : sun.arch.data.model\n2019-07-04 05:55:40.166  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : java.util.concurrent.ForkJoinPool.common.threadFactory\n2019-07-04 05:55:40.166  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : java.endorsed.dirs\n2019-07-04 05:55:40.166  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : sun.cpu.isalist\n2019-07-04 05:55:40.166  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : sun.jnu.encoding\n2019-07-04 05:55:40.166  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : file.encoding.pkg\n2019-07-04 05:55:40.167  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : package.access\n2019-07-04 05:55:40.167  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : file.separator\n2019-07-04 05:55:40.167  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : java.specification.name\n2019-07-04 05:55:40.167  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : java.class.version\n2019-07-04 05:55:40.167  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : user.country\n2019-07-04 05:55:40.167  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : java.home\n2019-07-04 05:55:40.167  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : java.vm.info\n2019-07-04 05:55:40.167  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : os.version\n2019-07-04 05:55:40.167  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : path.separator\n2019-07-04 05:55:40.167  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : java.vm.version\n2019-07-04 05:55:40.167  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : java.awt.printerjob\n2019-07-04 05:55:40.167  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : sun.io.unicode.encoding\n2019-07-04 05:55:40.167  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : awt.toolkit\n2019-07-04 05:55:40.167  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : package.definition\n2019-07-04 05:55:40.167  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : java.naming.factory.url.pkgs\n2019-07-04 05:55:40.167  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : user.home\n2019-07-04 05:55:40.167  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : java.specification.vendor\n2019-07-04 05:55:40.167  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : tomcat.util.scan.StandardJarScanFilter.jarsToSkip\n2019-07-04 05:55:40.167  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : java.library.path\n2019-07-04 05:55:40.167  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : java.vendor.url\n2019-07-04 05:55:40.167  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : spring.beaninfo.ignore\n2019-07-04 05:55:40.167  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : java.vm.vendor\n2019-07-04 05:55:40.167  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : common.loader\n2019-07-04 05:55:40.167  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : java.runtime.name\n2019-07-04 05:55:40.167  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : sun.java.command\n2019-07-04 05:55:40.167  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : java.class.path\n2019-07-04 05:55:40.168  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : java.vm.specification.name\n2019-07-04 05:55:40.168  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : java.vm.specification.version\n2019-07-04 05:55:40.168  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : catalina.home\n2019-07-04 05:55:40.168  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : sun.cpu.endian\n2019-07-04 05:55:40.168  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : sun.os.patch.level\n2019-07-04 05:55:40.168  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : java.awt.headless\n2019-07-04 05:55:40.168  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : java.io.tmpdir\n2019-07-04 05:55:40.168  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : java.vendor.url.bug\n2019-07-04 05:55:40.168  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : server.loader\n2019-07-04 05:55:40.168  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : os.arch\n2019-07-04 05:55:40.168  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : java.awt.graphicsenv\n2019-07-04 05:55:40.168  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : java.ext.dirs\n2019-07-04 05:55:40.168  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : user.dir\n2019-07-04 05:55:40.168  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : line.separator\n2019-07-04 05:55:40.168  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : java.vm.name\n2019-07-04 05:55:40.168  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : file.encoding\n2019-07-04 05:55:40.168  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : java.specification.version\n2019-07-04 05:55:40.168  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : PATH\n2019-07-04 05:55:40.168  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : LESS_TERMCAP_md\n2019-07-04 05:55:40.168  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : TOMCAT_USER\n2019-07-04 05:55:40.168  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : LESS_TERMCAP_me\n2019-07-04 05:55:40.168  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : HISTCONTROL\n2019-07-04 05:55:40.168  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : LESS_TERMCAP_mb\n2019-07-04 05:55:40.168  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : CATALINA_PID\n2019-07-04 05:55:40.168  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : SHUTDOWN_VERBOSE\n2019-07-04 05:55:40.168  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : TOMCAT_NAME\n2019-07-04 05:55:40.169  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : AWS_AUTO_SCALING_HOME\n2019-07-04 05:55:40.169  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : CATALINA_TMPDIR\n2019-07-04 05:55:40.169  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : LESS_TERMCAP_se\n2019-07-04 05:55:40.169  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : HISTSIZE\n2019-07-04 05:55:40.169  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : JAVA_HOME\n2019-07-04 05:55:40.169  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : AWS_ELB_HOME\n2019-07-04 05:55:40.169  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : JAVA_OPTS\n2019-07-04 05:55:40.169  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : LESS_TERMCAP_us\n2019-07-04 05:55:40.169  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : EC2_HOME\n2019-07-04 05:55:40.169  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : TERM\n2019-07-04 05:55:40.169  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : LANG\n2019-07-04 05:55:40.169  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : AWS_CLOUDWATCH_HOME\n2019-07-04 05:55:40.169  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : CATALINA_BASE\n2019-07-04 05:55:40.169  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : MAIL\n2019-07-04 05:55:40.169  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : LESS_TERMCAP_ue\n2019-07-04 05:55:40.169  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : LOGNAME\n2019-07-04 05:55:40.169  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : PWD\n2019-07-04 05:55:40.169  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : _\n2019-07-04 05:55:40.169  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : SHUTDOWN_WAIT\n2019-07-04 05:55:40.169  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : LESSOPEN\n2019-07-04 05:55:40.169  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : TOMCAT_CFG\n2019-07-04 05:55:40.169  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : SHELL\n2019-07-04 05:55:40.169  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : CATALINA_HOME\n2019-07-04 05:55:40.169  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : AWS_PATH\n2019-07-04 05:55:40.169  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : USER\n2019-07-04 05:55:40.169  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : SECURITY_MANAGER\n2019-07-04 05:55:40.170  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : KILL_SLEEP_WAIT\n2019-07-04 05:55:40.170  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : HOSTNAME\n2019-07-04 05:55:40.170  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : JASPER_HOME\n2019-07-04 05:55:40.170  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : EC2_AMITOOL_HOME\n2019-07-04 05:55:40.170  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : SHLVL\n2019-07-04 05:55:40.170  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : HOME\n2019-07-04 05:55:40.170  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : spring.mvc.view.prefix\n2019-07-04 05:55:40.170  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : spring.mvc.view.suffix\n2019-07-04 05:55:40.170  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : logging.level.org.springframework.web\n2019-07-04 05:55:40.170  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : spring.jpa.show-sql\n2019-07-04 05:55:40.170  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : spring.h2.console.enabled\n2019-07-04 05:55:40.170  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : spring.h2.console.settings.web-allow-others\n2019-07-04 05:55:40.176  INFO 4887 --- [ost-startStop-1] c.i.s.w.EnvironmentConfigurationLogger   : ===========================================\n2019-07-04 05:55:40.196  INFO 4887 --- [ost-startStop-1] c.i.s.web.SpringBootFirstWebApplication  : Started SpringBootFirstWebApplication in 10.273 seconds (JVM running for 16.637)\n04-Jul-2019 05:55:40.444 INFO [localhost-startStop-1] org.apache.jasper.servlet.TldScanner.scanJars At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.\n04-Jul-2019 05:55:40.546 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/var/lib/tomcat8/webapps/ROOT] has finished in [15,271] ms\n04-Jul-2019 05:55:40.552 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler [\"http-nio-8080\"]\n04-Jul-2019 05:55:40.579 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler [\"ajp-nio-8009\"]\n04-Jul-2019 05:55:40.597 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in 15390 ms\n2019-07-04 05:55:48.203  INFO 4887 --- [nio-8080-exec-5] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'\n2019-07-04 05:55:48.235  INFO 4887 --- [nio-8080-exec-5] o.s.web.servlet.DispatcherServlet        : Completed initialization in 32 ms\nHibernate: select todo0_.id as id1_0_0_, todo0_.desc as desc2_0_0_, todo0_.is_done as is_done3_0_0_, todo0_.target_date as target_d4_0_0_, todo0_.user as user5_0_0_ from todo todo0_ where todo0_.id=?\nHibernate: delete from todo where id=?\n2019-07-04 05:57:27.652  INFO 4887 --- [nio-8080-exec-2] o.h.h.i.QueryTranslatorFactoryInitiator  : HHH000397: Using ASTQueryTranslatorFactory\nHibernate: select todo0_.id as id1_0_, todo0_.desc as desc2_0_, todo0_.is_done as is_done3_0_, todo0_.target_date as target_d4_0_, todo0_.user as user5_0_ from todo todo0_ where todo0_.user=?\nHibernate: select todo0_.id as id1_0_, todo0_.desc as desc2_0_, todo0_.is_done as is_done3_0_, todo0_.target_date as target_d4_0_, todo0_.user as user5_0_ from todo todo0_ where todo0_.user=?\n"
  },
  {
    "path": "03-spring-boot-web-application-h2/log/tomcat8/localhost_access_log.txt",
    "content": "127.0.0.1 - - [04/Jul/2019:05:49:19 +0000] \"GET / HTTP/1.1\" 302 -\n127.0.0.1 - - [04/Jul/2019:05:49:20 +0000] \"GET /login HTTP/1.1\" 200 1317\n127.0.0.1 - - [04/Jul/2019:05:49:21 +0000] \"GET /favicon.ico HTTP/1.1\" 200 946\n127.0.0.1 - - [04/Jul/2019:05:49:32 +0000] \"POST /login HTTP/1.1\" 302 -\n127.0.0.1 - - [04/Jul/2019:05:49:33 +0000] \"POST /login HTTP/1.1\" 302 -\n127.0.0.1 - - [04/Jul/2019:05:49:33 +0000] \"GET / HTTP/1.1\" 200 1000\n127.0.0.1 - - [04/Jul/2019:05:49:33 +0000] \"GET / HTTP/1.1\" 200 1000\n127.0.0.1 - - [04/Jul/2019:05:49:34 +0000] \"GET /webjars/bootstrap/3.3.6/css/bootstrap.min.css HTTP/1.1\" 200 121260\n127.0.0.1 - - [04/Jul/2019:05:49:34 +0000] \"GET /webjars/jquery/1.9.1/jquery.min.js HTTP/1.1\" 200 92629\n127.0.0.1 - - [04/Jul/2019:05:49:34 +0000] \"GET /webjars/bootstrap/3.3.6/js/bootstrap.min.js HTTP/1.1\" 200 36868\n127.0.0.1 - - [04/Jul/2019:05:49:34 +0000] \"GET /webjars/bootstrap-datepicker/1.0.1/js/bootstrap-datepicker.js HTTP/1.1\" 200 32051\n127.0.0.1 - - [04/Jul/2019:05:49:39 +0000] \"GET /list-todos HTTP/1.1\" 200 2186\n127.0.0.1 - - [04/Jul/2019:05:49:39 +0000] \"GET /webjars/jquery/1.9.1/jquery.min.js HTTP/1.1\" 200 92629\n127.0.0.1 - - [04/Jul/2019:05:49:39 +0000] \"GET /webjars/bootstrap/3.3.6/js/bootstrap.min.js HTTP/1.1\" 200 36868\n127.0.0.1 - - [04/Jul/2019:05:49:39 +0000] \"GET /webjars/bootstrap/3.3.6/css/bootstrap.min.css HTTP/1.1\" 200 121260\n127.0.0.1 - - [04/Jul/2019:05:49:39 +0000] \"GET /webjars/bootstrap-datepicker/1.0.1/js/bootstrap-datepicker.js HTTP/1.1\" 200 32051\n127.0.0.1 - - [04/Jul/2019:05:49:52 +0000] \"GET /h2-console HTTP/1.1\" 302 -\n127.0.0.1 - - [04/Jul/2019:05:49:53 +0000] \"GET /h2-console/ HTTP/1.1\" 200 567\n127.0.0.1 - - [04/Jul/2019:05:51:33 +0000] \"GET / HTTP/1.1\" 302 -\n127.0.0.1 - - [04/Jul/2019:05:51:33 +0000] \"GET /login HTTP/1.1\" 200 1317\n127.0.0.1 - - [04/Jul/2019:05:55:46 +0000] \"GET /h2-console/ HTTP/1.1\" 200 949\n127.0.0.1 - - [04/Jul/2019:05:55:47 +0000] \"GET /h2-console/stylesheet.css HTTP/1.1\" 200 4938\n127.0.0.1 - - [04/Jul/2019:05:55:47 +0000] \"GET /h2-console/login.jsp?jsessionid=a03a95bb03374ed3c500540ad5d01967 HTTP/1.1\" 200 8903\n127.0.0.1 - - [04/Jul/2019:05:55:47 +0000] \"GET /h2-console/background.gif HTTP/1.1\" 200 180\n127.0.0.1 - - [04/Jul/2019:05:55:48 +0000] \"GET /favicon.ico HTTP/1.1\" 200 946\n127.0.0.1 - - [04/Jul/2019:05:57:09 +0000] \"POST /h2-console/login.do?jsessionid=a03a95bb03374ed3c500540ad5d01967 HTTP/1.1\" 200 1471\n127.0.0.1 - - [04/Jul/2019:05:57:09 +0000] \"GET /h2-console/stylesheet.css HTTP/1.1\" 200 4938\n127.0.0.1 - - [04/Jul/2019:05:57:09 +0000] \"GET /h2-console/header.jsp?jsessionid=a03a95bb03374ed3c500540ad5d01967 HTTP/1.1\" 200 8082\n127.0.0.1 - - [04/Jul/2019:05:57:10 +0000] \"GET /h2-console/query.jsp?jsessionid=a03a95bb03374ed3c500540ad5d01967 HTTP/1.1\" 200 16429\n127.0.0.1 - - [04/Jul/2019:05:57:10 +0000] \"GET /h2-console/help.jsp?jsessionid=a03a95bb03374ed3c500540ad5d01967 HTTP/1.1\" 200 5331\n127.0.0.1 - - [04/Jul/2019:05:57:10 +0000] \"GET /h2-console/icon_line.gif HTTP/1.1\" 200 830\n127.0.0.1 - - [04/Jul/2019:05:57:10 +0000] \"GET /h2-console/icon_disconnect.gif HTTP/1.1\" 200 125\n127.0.0.1 - - [04/Jul/2019:05:57:10 +0000] \"GET /h2-console/icon_refresh.gif HTTP/1.1\" 200 339\n127.0.0.1 - - [04/Jul/2019:05:57:10 +0000] \"GET /h2-console/icon_run_selected.gif HTTP/1.1\" 200 324\n127.0.0.1 - - [04/Jul/2019:05:57:10 +0000] \"GET /h2-console/icon_help.gif HTTP/1.1\" 200 385\n127.0.0.1 - - [04/Jul/2019:05:57:10 +0000] \"GET /h2-console/icon_history.gif HTTP/1.1\" 200 227\n127.0.0.1 - - [04/Jul/2019:05:57:10 +0000] \"GET /h2-console/icon_stop.gif HTTP/1.1\" 200 226\n127.0.0.1 - - [04/Jul/2019:05:57:10 +0000] \"GET /h2-console/icon_rollback.gif HTTP/1.1\" 200 343\n127.0.0.1 - - [04/Jul/2019:05:57:10 +0000] \"GET /h2-console/icon_commit.gif HTTP/1.1\" 200 335\n127.0.0.1 - - [04/Jul/2019:05:57:10 +0000] \"GET /h2-console/icon_run.gif HTTP/1.1\" 200 391\n127.0.0.1 - - [04/Jul/2019:05:57:11 +0000] \"GET /h2-console/tables.do?jsessionid=a03a95bb03374ed3c500540ad5d01967 HTTP/1.1\" 200 5468\n127.0.0.1 - - [04/Jul/2019:05:57:11 +0000] \"GET /h2-console/tree.js HTTP/1.1\" 200 3196\n127.0.0.1 - - [04/Jul/2019:05:57:11 +0000] \"GET /h2-console/tree_table.gif HTTP/1.1\" 200 355\n127.0.0.1 - - [04/Jul/2019:05:57:11 +0000] \"GET /h2-console/tree_plus.gif HTTP/1.1\" 200 882\n127.0.0.1 - - [04/Jul/2019:05:57:11 +0000] \"GET /h2-console/tree_column.gif HTTP/1.1\" 200 329\n127.0.0.1 - - [04/Jul/2019:05:57:11 +0000] \"GET /h2-console/tree_empty.gif HTTP/1.1\" 200 73\n127.0.0.1 - - [04/Jul/2019:05:57:11 +0000] \"GET /h2-console/tree_database.gif HTTP/1.1\" 200 557\n127.0.0.1 - - [04/Jul/2019:05:57:11 +0000] \"GET /h2-console/tree_minus.gif HTTP/1.1\" 200 873\n127.0.0.1 - - [04/Jul/2019:05:57:11 +0000] \"GET /h2-console/tree_index_az.gif HTTP/1.1\" 200 168\n127.0.0.1 - - [04/Jul/2019:05:57:11 +0000] \"GET /h2-console/tree_folder.gif HTTP/1.1\" 200 384\n127.0.0.1 - - [04/Jul/2019:05:57:11 +0000] \"GET /h2-console/tree_sequences.gif HTTP/1.1\" 200 125\n127.0.0.1 - - [04/Jul/2019:05:57:11 +0000] \"GET /h2-console/tree_info.gif HTTP/1.1\" 200 279\n127.0.0.1 - - [04/Jul/2019:05:57:11 +0000] \"GET /h2-console/tree_type.gif HTTP/1.1\" 200 208\n127.0.0.1 - - [04/Jul/2019:05:57:11 +0000] \"GET /h2-console/tree_users.gif HTTP/1.1\" 200 613\n127.0.0.1 - - [04/Jul/2019:05:57:12 +0000] \"GET /h2-console/tree_index.gif HTTP/1.1\" 200 163\n127.0.0.1 - - [04/Jul/2019:05:57:12 +0000] \"GET /h2-console/tree_user.gif HTTP/1.1\" 200 512\n127.0.0.1 - - [04/Jul/2019:05:57:12 +0000] \"GET /h2-console/tree_sequence.gif HTTP/1.1\" 200 102\n127.0.0.1 - - [04/Jul/2019:05:57:13 +0000] \"POST /h2-console/query.do?jsessionid=a03a95bb03374ed3c500540ad5d01967 HTTP/1.1\" 200 1423\n127.0.0.1 - - [04/Jul/2019:05:57:13 +0000] \"GET /h2-console/table.js HTTP/1.1\" 200 8279\n127.0.0.1 - - [04/Jul/2019:05:57:19 +0000] \"GET /delete-todo?id=10001 HTTP/1.1\" 302 -\n127.0.0.1 - - [04/Jul/2019:05:57:19 +0000] \"GET /login HTTP/1.1\" 200 1317\n127.0.0.1 - - [04/Jul/2019:05:57:26 +0000] \"POST /login HTTP/1.1\" 302 -\n127.0.0.1 - - [04/Jul/2019:05:57:27 +0000] \"GET /delete-todo?id=10001 HTTP/1.1\" 302 -\n127.0.0.1 - - [04/Jul/2019:05:57:28 +0000] \"POST /login HTTP/1.1\" 302 -\n127.0.0.1 - - [04/Jul/2019:05:57:29 +0000] \"GET / HTTP/1.1\" 200 1000\n127.0.0.1 - - [04/Jul/2019:05:57:29 +0000] \"GET /list-todos HTTP/1.1\" 200 1874\n127.0.0.1 - - [04/Jul/2019:05:57:29 +0000] \"GET /webjars/bootstrap/3.3.6/js/bootstrap.min.js HTTP/1.1\" 200 36868\n127.0.0.1 - - [04/Jul/2019:05:57:29 +0000] \"GET /webjars/bootstrap-datepicker/1.0.1/js/bootstrap-datepicker.js HTTP/1.1\" 200 32051\n127.0.0.1 - - [04/Jul/2019:05:57:29 +0000] \"GET /webjars/jquery/1.9.1/jquery.min.js HTTP/1.1\" 200 92629\n127.0.0.1 - - [04/Jul/2019:05:57:29 +0000] \"GET /webjars/bootstrap/3.3.6/css/bootstrap.min.css HTTP/1.1\" 200 121260\n127.0.0.1 - - [04/Jul/2019:05:57:33 +0000] \"GET /list-todos HTTP/1.1\" 200 1874\n127.0.0.1 - - [04/Jul/2019:05:57:33 +0000] \"GET /webjars/jquery/1.9.1/jquery.min.js HTTP/1.1\" 200 92629\n127.0.0.1 - - [04/Jul/2019:05:57:33 +0000] \"GET /webjars/bootstrap-datepicker/1.0.1/js/bootstrap-datepicker.js HTTP/1.1\" 200 32051\n127.0.0.1 - - [04/Jul/2019:05:57:33 +0000] \"GET /webjars/bootstrap/3.3.6/js/bootstrap.min.js HTTP/1.1\" 200 36868\n127.0.0.1 - - [04/Jul/2019:05:57:33 +0000] \"GET /webjars/bootstrap/3.3.6/css/bootstrap.min.css HTTP/1.1\" 200 121260\n127.0.0.1 - - [04/Jul/2019:05:57:41 +0000] \"POST /h2-console/query.do?jsessionid=a03a95bb03374ed3c500540ad5d01967 HTTP/1.1\" 200 1308\n127.0.0.1 - - [04/Jul/2019:05:57:42 +0000] \"GET /h2-console/table.js HTTP/1.1\" 200 8279\n127.0.0.1 - - [04/Jul/2019:05:57:42 +0000] \"GET /h2-console/stylesheet.css HTTP/1.1\" 200 4938\n127.0.0.1 - - [04/Jul/2019:05:58:26 +0000] \"GET /logout HTTP/1.1\" 302 -\n127.0.0.1 - - [04/Jul/2019:05:58:26 +0000] \"GET /login?logout HTTP/1.1\" 200 1393\n"
  },
  {
    "path": "03-spring-boot-web-application-h2/pom.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n\txmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n\txsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\">\n\t<modelVersion>4.0.0</modelVersion>\n\n\t<groupId>com.in28minutes.springboot.web</groupId>\n\t<artifactId>03-spring-boot-web-application-h2</artifactId>\n\t<version>0.0.1-SNAPSHOT</version>\n\t<packaging>war</packaging>\n\n\t<description>Demo project for Spring Boot</description>\n\n\t<parent>\n\t\t<groupId>org.springframework.boot</groupId>\n\t\t<artifactId>spring-boot-starter-parent</artifactId>\n\t\t<version>2.1.0.RELEASE</version>\n\t\t<relativePath /> <!-- lookup parent from repository -->\n\t</parent>\n\n\t<properties>\n\t\t<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>\n\t\t<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>\n\t\t<java.version>1.8</java.version>\n\t</properties>\n\n\t<dependencies>\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t<artifactId>spring-boot-starter-web</artifactId>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t<artifactId>spring-boot-starter-data-jpa</artifactId>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>com.h2database</groupId>\n\t\t\t<artifactId>h2</artifactId>\n\t\t\t<scope>runtime</scope>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t<artifactId>spring-boot-starter-security</artifactId>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>javax.servlet</groupId>\n\t\t\t<artifactId>jstl</artifactId>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>org.webjars</groupId>\n\t\t\t<artifactId>bootstrap</artifactId>\n\t\t\t<version>3.3.6</version>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>org.webjars</groupId>\n\t\t\t<artifactId>bootstrap-datepicker</artifactId>\n\t\t\t<version>1.0.1</version>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>org.webjars</groupId>\n\t\t\t<artifactId>jquery</artifactId>\n\t\t\t<version>1.9.1</version>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>org.apache.tomcat.embed</groupId>\n\t\t\t<artifactId>tomcat-embed-jasper</artifactId>\n\t\t\t<scope>provided</scope>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t<artifactId>spring-boot-starter-tomcat</artifactId>\n\t\t\t<scope>provided</scope>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t<artifactId>spring-boot-devtools</artifactId>\n\t\t\t<scope>runtime</scope>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t<artifactId>spring-boot-starter-test</artifactId>\n\t\t\t<scope>test</scope>\n\t\t</dependency>\n\t</dependencies>\n\n\t<build>\n\t\t<plugins>\n\t\t\t<plugin>\n\t\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t\t<artifactId>spring-boot-maven-plugin</artifactId>\n\t\t\t</plugin>\n\t\t</plugins>\n\t</build>\n\n\t<repositories>\n\t\t<repository>\n\t\t\t<id>spring-milestones</id>\n\t\t\t<name>Spring Milestones</name>\n\t\t\t<url>https://repo.spring.io/milestones</url>\n\t\t</repository>\n\t</repositories>\n\n\t<pluginRepositories>\n\t\t<pluginRepository>\n\t\t\t<id>spring-milestones</id>\n\t\t\t<name>Spring Milestones</name>\n\t\t\t<url>https://repo.spring.io/milestones</url>\n\t\t</pluginRepository>\n\t</pluginRepositories>\n\n</project>"
  },
  {
    "path": "03-spring-boot-web-application-h2/readme.md",
    "content": "# Todo Web Application using Spring Boot and H2 In memory database\n\nRun com.in28minutes.springboot.web.SpringBootFirstWebApplication as a Java Application.\n\nRuns on default port of Spring Boot - 8080 \n\n## Can be run as a Jar or a WAR\n\n`mvn clean install` generate a war which can deployed to your favorite web server.\n\nWe will deploy to Cloud as a WAR\n\n## Web Application\n\n- http://localhost:8080/login with in28minutes/dummy as credentials\n- You can add, delete and update your todos\n- Spring Security is used to secure the application\n- `com.in28minutes.springboot.web.security.SecurityConfiguration` contains the in memory security credential configuration.\n\n## H2 Console\n\n- http://localhost:8080/h2-console\n- Use `jdbc:h2:mem:testdb` as JDBC URL \n"
  },
  {
    "path": "03-spring-boot-web-application-h2/src/main/java/com/in28minutes/springboot/web/EnvironmentConfigurationLogger.java",
    "content": "package com.in28minutes.springboot.web;\n\nimport java.util.Arrays;\nimport java.util.stream.StreamSupport;\n\nimport org.slf4j.Logger;\nimport org.slf4j.LoggerFactory;\nimport org.springframework.context.event.ContextRefreshedEvent;\nimport org.springframework.context.event.EventListener;\nimport org.springframework.core.env.AbstractEnvironment;\nimport org.springframework.core.env.EnumerablePropertySource;\nimport org.springframework.core.env.Environment;\nimport org.springframework.core.env.MutablePropertySources;\nimport org.springframework.stereotype.Component;\n\n@Component\npublic class EnvironmentConfigurationLogger {\n\n\tprivate static final Logger LOGGER = LoggerFactory.getLogger(EnvironmentConfigurationLogger.class);\n\n\t@EventListener\n\tpublic void handleContextRefresh(ContextRefreshedEvent event) {\n\t\tfinal Environment environment = event.getApplicationContext().getEnvironment();\n\t\tLOGGER.info(\"====== Environment and configuration ======\");\n\t\tLOGGER.info(\"Active profiles: {}\", Arrays.toString(environment.getActiveProfiles()));\n\t\tfinal MutablePropertySources sources = ((AbstractEnvironment) environment).getPropertySources();\n\t\tStreamSupport.stream(sources.spliterator(), false).filter(ps -> ps instanceof EnumerablePropertySource)\n\t\t\t\t.map(ps -> ((EnumerablePropertySource) ps).getPropertyNames()).flatMap(Arrays::stream).distinct()\n\t\t\t\t.forEach(prop -> LOGGER.info(\"{}\", prop));// environment.getProperty(prop)\n\t\tLOGGER.info(\"===========================================\");\n\t}\n\n}"
  },
  {
    "path": "03-spring-boot-web-application-h2/src/main/java/com/in28minutes/springboot/web/SpringBootFirstWebApplication.java",
    "content": "package com.in28minutes.springboot.web;\n\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boot.autoconfigure.SpringBootApplication;\nimport org.springframework.boot.builder.SpringApplicationBuilder;\nimport org.springframework.boot.web.servlet.support.SpringBootServletInitializer;\nimport org.springframework.context.annotation.ComponentScan;\n\n@SpringBootApplication\n@ComponentScan(\"com.in28minutes.springboot.web\")\npublic class SpringBootFirstWebApplication extends SpringBootServletInitializer { // AWS\n\n\t@Override\n\tprotected SpringApplicationBuilder configure(SpringApplicationBuilder application) {\n\t\treturn application.sources(SpringBootFirstWebApplication.class);\n\t}\n\n\tpublic static void main(String[] args) {\n\t\tSpringApplication.run(SpringBootFirstWebApplication.class, args);\n\t}\n\n}\n"
  },
  {
    "path": "03-spring-boot-web-application-h2/src/main/java/com/in28minutes/springboot/web/controller/ErrorController.java",
    "content": "package com.in28minutes.springboot.web.controller;\n\nimport javax.servlet.http.HttpServletRequest;\n\nimport org.springframework.stereotype.Controller;\nimport org.springframework.web.bind.annotation.ExceptionHandler;\nimport org.springframework.web.servlet.ModelAndView;\n\n@Controller(\"error\")\npublic class ErrorController {\n\t\n\t@ExceptionHandler(Exception.class)\n\tpublic ModelAndView handleException\n\t\t(HttpServletRequest request, Exception ex){\n\t\tModelAndView mv = new ModelAndView();\n\n\t\tmv.addObject(\"exception\", ex.getLocalizedMessage());\n\t\tmv.addObject(\"url\", request.getRequestURL());\n\t\t\n\t\tmv.setViewName(\"error\");\n\t\treturn mv;\n\t}\n\n}\n"
  },
  {
    "path": "03-spring-boot-web-application-h2/src/main/java/com/in28minutes/springboot/web/controller/LogoutController.java",
    "content": "package com.in28minutes.springboot.web.controller;\n\nimport javax.servlet.http.HttpServletRequest;\nimport javax.servlet.http.HttpServletResponse;\n\nimport org.springframework.security.core.Authentication;\nimport org.springframework.security.core.context.SecurityContextHolder;\nimport org.springframework.security.web.authentication.logout.SecurityContextLogoutHandler;\nimport org.springframework.stereotype.Controller;\nimport org.springframework.web.bind.annotation.RequestMapping;\nimport org.springframework.web.bind.annotation.RequestMethod;\n\n@Controller\npublic class LogoutController {\n\n\t@RequestMapping(value = \"/logout\", method = RequestMethod.GET)\n\tpublic String logout(HttpServletRequest request,\n\t\t\tHttpServletResponse response) {\n\t\t\n\t\tAuthentication authentication = SecurityContextHolder.getContext()\n\t\t\t\t.getAuthentication();\n\t\t\n\t\tif (authentication != null) {\n\t\t\tnew SecurityContextLogoutHandler().logout(request, response,\n\t\t\t\t\tauthentication);\n\t\t}\n\n\t\treturn \"redirect:/\";\n\t}\n}\n"
  },
  {
    "path": "03-spring-boot-web-application-h2/src/main/java/com/in28minutes/springboot/web/controller/TodoController.java",
    "content": "package com.in28minutes.springboot.web.controller;\n\nimport java.text.SimpleDateFormat;\nimport java.util.Date;\n\nimport javax.validation.Valid;\n\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.beans.propertyeditors.CustomDateEditor;\nimport org.springframework.security.core.context.SecurityContextHolder;\nimport org.springframework.security.core.userdetails.UserDetails;\nimport org.springframework.stereotype.Controller;\nimport org.springframework.ui.ModelMap;\nimport org.springframework.validation.BindingResult;\nimport org.springframework.web.bind.WebDataBinder;\nimport org.springframework.web.bind.annotation.InitBinder;\nimport org.springframework.web.bind.annotation.RequestMapping;\nimport org.springframework.web.bind.annotation.RequestMethod;\nimport org.springframework.web.bind.annotation.RequestParam;\n\nimport com.in28minutes.springboot.web.model.Todo;\nimport com.in28minutes.springboot.web.service.TodoRepository;\n\n@Controller\npublic class TodoController {\n\t\n\t@Autowired\n\tTodoRepository repository;\n\n\t@InitBinder\n\tpublic void initBinder(WebDataBinder binder) {\n\t\t// Date - dd/MM/yyyy\n\t\tSimpleDateFormat dateFormat = new SimpleDateFormat(\"dd/MM/yyyy\");\n\t\tbinder.registerCustomEditor(Date.class, new CustomDateEditor(\n\t\t\t\tdateFormat, false));\n\t}\n\n\t@RequestMapping(value = \"/list-todos\", method = RequestMethod.GET)\n\tpublic String showTodos(ModelMap model) {\n\t\tString name = getLoggedInUserName(model);\n\t\tmodel.put(\"todos\", repository.findByUser(name));\n\t\t//model.put(\"todos\", service.retrieveTodos(name));\n\t\treturn \"list-todos\";\n\t}\n\n\tprivate String getLoggedInUserName(ModelMap model) {\n\t\tObject principal = SecurityContextHolder.getContext()\n\t\t\t\t.getAuthentication().getPrincipal();\n\t\t\n\t\tif (principal instanceof UserDetails) {\n\t\t\treturn ((UserDetails) principal).getUsername();\n\t\t}\n\t\t\n\t\treturn principal.toString();\n\t}\n\n\t@RequestMapping(value = \"/add-todo\", method = RequestMethod.GET)\n\tpublic String showAddTodoPage(ModelMap model) {\n\t\tmodel.addAttribute(\"todo\", new Todo(0, getLoggedInUserName(model),\n\t\t\t\t\"Default Desc\", new Date(), false));\n\t\treturn \"todo\";\n\t}\n\n\t@RequestMapping(value = \"/delete-todo\", method = RequestMethod.GET)\n\tpublic String deleteTodo(@RequestParam int id) {\n\n\t\t//if(id==1)\n\t\t\t//throw new RuntimeException(\"Something went wrong\");\n\t\trepository.deleteById(id);\n\t\t//service.deleteTodo(id);\n\t\treturn \"redirect:/list-todos\";\n\t}\n\n\t@RequestMapping(value = \"/update-todo\", method = RequestMethod.GET)\n\tpublic String showUpdateTodoPage(@RequestParam int id, ModelMap model) {\n\t\tTodo todo = repository.findById(id).get();\n\t\t//Todo todo = service.retrieveTodo(id);\n\t\tmodel.put(\"todo\", todo);\n\t\treturn \"todo\";\n\t}\n\n\t@RequestMapping(value = \"/update-todo\", method = RequestMethod.POST)\n\tpublic String updateTodo(ModelMap model, @Valid Todo todo,\n\t\t\tBindingResult result) {\n\n\t\tif (result.hasErrors()) {\n\t\t\treturn \"todo\";\n\t\t}\n\n\t\ttodo.setUser(getLoggedInUserName(model));\n\n\t\trepository.save(todo);\n\t\t//service.updateTodo(todo);\n\n\t\treturn \"redirect:/list-todos\";\n\t}\n\n\t@RequestMapping(value = \"/add-todo\", method = RequestMethod.POST)\n\tpublic String addTodo(ModelMap model, @Valid Todo todo, BindingResult result) {\n\n\t\tif (result.hasErrors()) {\n\t\t\treturn \"todo\";\n\t\t}\n\n\t\ttodo.setUser(getLoggedInUserName(model));\n\t\trepository.save(todo);\n\t\t/*service.addTodo(getLoggedInUserName(model), todo.getDesc(), todo.getTargetDate(),\n\t\t\t\tfalse);*/\n\t\treturn \"redirect:/list-todos\";\n\t}\n}\n"
  },
  {
    "path": "03-spring-boot-web-application-h2/src/main/java/com/in28minutes/springboot/web/controller/WelcomeController.java",
    "content": "package com.in28minutes.springboot.web.controller;\n\nimport org.springframework.security.core.context.SecurityContextHolder;\nimport org.springframework.security.core.userdetails.UserDetails;\nimport org.springframework.stereotype.Controller;\nimport org.springframework.ui.ModelMap;\nimport org.springframework.web.bind.annotation.RequestMapping;\nimport org.springframework.web.bind.annotation.RequestMethod;\n\n@Controller\npublic class WelcomeController {\n\n\t@RequestMapping(value = \"/\", method = RequestMethod.GET)\n\tpublic String showWelcomePage(ModelMap model) {\n\t\tmodel.put(\"name\", getLoggedinUserName());\n\t\treturn \"welcome\";\n\t}\n\n\tprivate String getLoggedinUserName() {\n\t\tObject principal = SecurityContextHolder.getContext()\n\t\t\t\t.getAuthentication().getPrincipal();\n\t\t\n\t\tif (principal instanceof UserDetails) {\n\t\t\treturn ((UserDetails) principal).getUsername();\n\t\t}\n\t\t\n\t\treturn principal.toString();\n\t}\n\n}\n"
  },
  {
    "path": "03-spring-boot-web-application-h2/src/main/java/com/in28minutes/springboot/web/model/Todo.java",
    "content": "package com.in28minutes.springboot.web.model;\n\nimport java.util.Date;\n\nimport javax.persistence.Entity;\nimport javax.persistence.GeneratedValue;\nimport javax.persistence.Id;\nimport javax.validation.constraints.Size;\n\n@Entity\npublic class Todo {\n    \n\t@Id\n\t@GeneratedValue\n\tprivate int id;\n    \n\tprivate String user;\n    \n    @Size(min=10, message=\"Enter at least 10 Characters...\")\n    private String desc;\n\n    private Date targetDate;\n    private boolean isDone;\n\n    public Todo() {\n    \t\tsuper();\n    }\n    \n    public Todo(int id, String user, String desc, Date targetDate,\n            boolean isDone) {\n        super();\n        this.id = id;\n        this.user = user;\n        this.desc = desc;\n        this.targetDate = targetDate;\n        this.isDone = isDone;\n    }\n\n    public int getId() {\n        return id;\n    }\n\n    public void setId(int id) {\n        this.id = id;\n    }\n\n    public String getUser() {\n        return user;\n    }\n\n    public void setUser(String user) {\n        this.user = user;\n    }\n\n    public String getDesc() {\n        return desc;\n    }\n\n    public void setDesc(String desc) {\n        this.desc = desc;\n    }\n\n    public Date getTargetDate() {\n        return targetDate;\n    }\n\n    public void setTargetDate(Date targetDate) {\n        this.targetDate = targetDate;\n    }\n\n    public boolean isDone() {\n        return isDone;\n    }\n\n    public void setDone(boolean isDone) {\n        this.isDone = isDone;\n    }\n\n    @Override\n    public int hashCode() {\n        final int prime = 31;\n        int result = 1;\n        result = prime * result + id;\n        return result;\n    }\n\n    @Override\n    public boolean equals(Object obj) {\n        if (this == obj) {\n            return true;\n        }\n        if (obj == null) {\n            return false;\n        }\n        if (getClass() != obj.getClass()) {\n            return false;\n        }\n        Todo other = (Todo) obj;\n        if (id != other.id) {\n            return false;\n        }\n        return true;\n    }\n\n    @Override\n    public String toString() {\n        return String.format(\n                \"Todo [id=%s, user=%s, desc=%s, targetDate=%s, isDone=%s]\", id,\n                user, desc, targetDate, isDone);\n    }\n\n}"
  },
  {
    "path": "03-spring-boot-web-application-h2/src/main/java/com/in28minutes/springboot/web/security/SecurityConfiguration.java",
    "content": "package com.in28minutes.springboot.web.security;\n\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.context.annotation.Configuration;\nimport org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;\nimport org.springframework.security.config.annotation.web.builders.HttpSecurity;\nimport org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;\n\n@Configuration\npublic class SecurityConfiguration extends WebSecurityConfigurerAdapter{\n\t//Create User - in28Minutes/dummy\n\t@Autowired\n    public void configureGlobalSecurity(AuthenticationManagerBuilder auth)\n            throws Exception {\n        auth.inMemoryAuthentication().withUser(\"in28minutes\").password(\"{noop}dummy\")\n                .roles(\"USER\", \"ADMIN\");\n    }\n\t\n\t@Override\n    protected void configure(HttpSecurity http) throws Exception {\n        http.authorizeRequests().antMatchers(\"/login\", \"/h2-console/**\").permitAll()\n                .antMatchers(\"/\", \"/*todo*/**\").access(\"hasRole('USER')\").and()\n                .formLogin();\n        \n        http.csrf().disable();\n        http.headers().frameOptions().disable();\n    }\n}\n"
  },
  {
    "path": "03-spring-boot-web-application-h2/src/main/java/com/in28minutes/springboot/web/service/TodoRepository.java",
    "content": "package com.in28minutes.springboot.web.service;\n\nimport java.util.List;\n\nimport org.springframework.data.jpa.repository.JpaRepository;\n\nimport com.in28minutes.springboot.web.model.Todo;\n\npublic interface TodoRepository extends JpaRepository<Todo, Integer>{\n\tList<Todo> findByUser(String user);\n\t\n\t//service.retrieveTodos(name)\n\n\t//service.deleteTodo(id);\n\t//service.retrieveTodo(id)\n\t//service.updateTodo(todo)\n\t//service.addTodo(getLoggedInUserName(model), todo.getDesc(), todo.getTargetDate(),false);\n}\n"
  },
  {
    "path": "03-spring-boot-web-application-h2/src/main/java/com/in28minutes/springboot/web/service/TodoService.java",
    "content": "package com.in28minutes.springboot.web.service;\n\nimport java.util.ArrayList;\nimport java.util.Date;\nimport java.util.Iterator;\nimport java.util.List;\n\nimport org.springframework.stereotype.Service;\n\nimport com.in28minutes.springboot.web.model.Todo;\n\n@Service\npublic class TodoService {\n    private static List<Todo> todos = new ArrayList<Todo>();\n    private static int todoCount = 3;\n\n    static {\n        todos.add(new Todo(1, \"in28minutes\", \"Learn Spring MVC\", new Date(),\n                false));\n        todos.add(new Todo(2, \"in28minutes\", \"Learn Struts\", new Date(), false));\n        todos.add(new Todo(3, \"in28minutes\", \"Learn Hibernate\", new Date(),\n                false));\n    }\n\n    public List<Todo> retrieveTodos(String user) {\n        List<Todo> filteredTodos = new ArrayList<Todo>();\n        for (Todo todo : todos) {\n            if (todo.getUser().equalsIgnoreCase(user)) {\n                filteredTodos.add(todo);\n            }\n        }\n        return filteredTodos;\n    }\n    \n    public Todo retrieveTodo(int id) {\n        for (Todo todo : todos) {\n            if (todo.getId()==id) {\n                return todo;\n            }\n        }\n        return null;\n    }\n\n    public void updateTodo(Todo todo){\n    \t\ttodos.remove(todo);\n    \t\ttodos.add(todo);\n    }\n\n    public void addTodo(String name, String desc, Date targetDate,\n            boolean isDone) {\n        todos.add(new Todo(++todoCount, name, desc, targetDate, isDone));\n    }\n\n    public void deleteTodo(int id) {\n        Iterator<Todo> iterator = todos.iterator();\n        while (iterator.hasNext()) {\n            Todo todo = iterator.next();\n            if (todo.getId() == id) {\n                iterator.remove();\n            }\n        }\n    }\n}"
  },
  {
    "path": "03-spring-boot-web-application-h2/src/main/resources/application.properties",
    "content": "spring.mvc.view.prefix=/WEB-INF/jsp/\nspring.mvc.view.suffix=.jsp\nlogging.level.org.springframework.web=INFO\n\nspring.jpa.show-sql=true\nspring.h2.console.enabled=true\n#spring.h2.console.settings.web-allow-others=true"
  },
  {
    "path": "03-spring-boot-web-application-h2/src/main/resources/data.sql",
    "content": "insert into TODO\nvalues(10001, 'Learn Spring Boot', false, sysdate(), 'in28minutes');\ninsert into TODO\nvalues(10002, 'Learn Angular JS', false, sysdate(), 'in28minutes');\ninsert into TODO\nvalues(10003, 'Learn to Dance', false, sysdate(), 'in28minutes');\n"
  },
  {
    "path": "03-spring-boot-web-application-h2/src/main/webapp/WEB-INF/jsp/common/footer.jspf",
    "content": "<script src=\"webjars/jquery/1.9.1/jquery.min.js\"></script>\n<script src=\"webjars/bootstrap/3.3.6/js/bootstrap.min.js\"></script>\n<script\n\tsrc=\"webjars/bootstrap-datepicker/1.0.1/js/bootstrap-datepicker.js\"></script>\n<script>\n\t$('#targetDate').datepicker({\n\t\tformat : 'dd/mm/yyyy'\n\t});\n</script>\n\n</body>\n</html>"
  },
  {
    "path": "03-spring-boot-web-application-h2/src/main/webapp/WEB-INF/jsp/common/header.jspf",
    "content": "<%@ taglib uri=\"http://java.sun.com/jsp/jstl/core\" prefix=\"c\"%>\n<%@ taglib uri=\"http://java.sun.com/jsp/jstl/fmt\" prefix=\"fmt\"%>\n<%@taglib uri=\"http://www.springframework.org/tags/form\" prefix=\"form\"%>\n\n<html>\n\n<head>\n<title>First Web Application</title>\n<link href=\"webjars/bootstrap/3.3.6/css/bootstrap.min.css\"\n\trel=\"stylesheet\">\n\n</head>\n\n<body>\n"
  },
  {
    "path": "03-spring-boot-web-application-h2/src/main/webapp/WEB-INF/jsp/common/navigation.jspf",
    "content": "\n<nav role=\"navigation\" class=\"navbar navbar-default\">\n\t<div class=\"\">\n\t\t<a href=\"http://www.in28minutes.com\" class=\"navbar-brand\">in28Minutes</a>\n\t</div>\n\t<div class=\"navbar-collapse\">\n\t\t<ul class=\"nav navbar-nav\">\n\t\t\t<li class=\"active\"><a href=\"/\">Home</a></li>\n\t\t\t<li><a href=\"/list-todos\">Todos</a></li>\n\t\t</ul>\n\t\t<ul class=\"nav navbar-nav navbar-right\">\n\t\t\t<li><a href=\"/logout\">Logout</a></li>\n\t\t</ul>\n\t</div>\n</nav>\n"
  },
  {
    "path": "03-spring-boot-web-application-h2/src/main/webapp/WEB-INF/jsp/error.jsp",
    "content": "<%@ include file=\"common/header.jspf\"%>\n<%@ include file=\"common/navigation.jspf\"%>\n<div class=\"container\">\nAn exception occurred! Please contact Support!\n</div>\n<%@ include file=\"common/footer.jspf\"%>"
  },
  {
    "path": "03-spring-boot-web-application-h2/src/main/webapp/WEB-INF/jsp/list-todos.jsp",
    "content": "<%@ include file=\"common/header.jspf\" %>\n<%@ include file=\"common/navigation.jspf\" %>\n\t\n\t<div class=\"container\">\n\t\t<table class=\"table table-striped\">\n\t\t\t<caption>Your todos are</caption>\n\t\t\t<thead>\n\t\t\t\t<tr>\n\t\t\t\t\t<th>Description</th>\n\t\t\t\t\t<th>Target Date</th>\n\t\t\t\t\t<th>Is it Done?</th>\n\t\t\t\t\t<th></th>\n\t\t\t\t\t<th></th>\n\t\t\t\t</tr>\n\t\t\t</thead>\n\t\t\t<tbody>\n\t\t\t\t<c:forEach items=\"${todos}\" var=\"todo\">\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>${todo.desc}</td>\n\t\t\t\t\t\t<td><fmt:formatDate value=\"${todo.targetDate}\" pattern=\"dd/MM/yyyy\"/></td>\n\t\t\t\t\t\t<td>${todo.done}</td>\n\t\t\t\t\t\t<td><a type=\"button\" class=\"btn btn-success\"\n\t\t\t\t\t\t\thref=\"/update-todo?id=${todo.id}\">Update</a></td>\n\t\t\t\t\t\t<td><a type=\"button\" class=\"btn btn-warning\"\n\t\t\t\t\t\t\thref=\"/delete-todo?id=${todo.id}\">Delete</a></td>\n\t\t\t\t\t</tr>\n\t\t\t\t</c:forEach>\n\t\t\t</tbody>\n\t\t</table>\n\t\t<div>\n\t\t\t<a class=\"button\" href=\"/add-todo\">Add a Todo</a>\n\t\t</div>\n\t</div>\n<%@ include file=\"common/footer.jspf\" %>"
  },
  {
    "path": "03-spring-boot-web-application-h2/src/main/webapp/WEB-INF/jsp/todo.jsp",
    "content": "<%@ include file=\"common/header.jspf\" %>\n<%@ include file=\"common/navigation.jspf\" %>\n<div class=\"container\">\n\t<form:form method=\"post\" modelAttribute=\"todo\">\n\t\t<form:hidden path=\"id\" />\n\t\t<fieldset class=\"form-group\">\n\t\t\t<form:label path=\"desc\">Description</form:label>\n\t\t\t<form:input path=\"desc\" type=\"text\" class=\"form-control\"\n\t\t\t\trequired=\"required\" />\n\t\t\t<form:errors path=\"desc\" cssClass=\"text-warning\" />\n\t\t</fieldset>\n\n\t\t<fieldset class=\"form-group\">\n\t\t\t<form:label path=\"targetDate\">Target Date</form:label>\n\t\t\t<form:input path=\"targetDate\" type=\"text\" class=\"form-control\"\n\t\t\t\trequired=\"required\" />\n\t\t\t<form:errors path=\"targetDate\" cssClass=\"text-warning\" />\n\t\t</fieldset>\n\n\t\t<button type=\"submit\" class=\"btn btn-success\">Add</button>\n\t</form:form>\n</div>\n<%@ include file=\"common/footer.jspf\" %>"
  },
  {
    "path": "03-spring-boot-web-application-h2/src/main/webapp/WEB-INF/jsp/welcome.jsp",
    "content": "<%@ include file=\"common/header.jspf\"%>\n<%@ include file=\"common/navigation.jspf\"%>\n<div class=\"container\">\n\tWelcome ${name}!! <a href=\"/list-todos\">Click here</a> to manage your\n\ttodo's.\n</div>\n<%@ include file=\"common/footer.jspf\"%>"
  },
  {
    "path": "03-spring-boot-web-application-h2/src/test/java/com/in28minutes/springboot/web/SpringBootFirstWebApplicationTests.java",
    "content": "package com.in28minutes.springboot.web;\n\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.springframework.boot.test.context.SpringBootTest;\nimport org.springframework.test.context.junit4.SpringRunner;\n\n@RunWith(SpringRunner.class)\n@SpringBootTest\npublic class SpringBootFirstWebApplicationTests {\n\n\t@Test\n\tpublic void contextLoads() {\n\t}\n\n}\n"
  },
  {
    "path": "04-spring-boot-web-application-mysql/pom.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n\txmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n\txsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\">\n\t<modelVersion>4.0.0</modelVersion>\n\n\t<groupId>com.in28minutes.springboot.web</groupId>\n\t<artifactId>04-spring-boot-web-application-mysql</artifactId>\n\t<version>0.0.1-SNAPSHOT</version>\n\t<packaging>war</packaging>\n\n\t<description>Demo project for Spring Boot</description>\n\n\t<parent>\n\t\t<groupId>org.springframework.boot</groupId>\n\t\t<artifactId>spring-boot-starter-parent</artifactId>\n\t\t<version>2.1.0.RELEASE</version>\n\t\t<relativePath /> <!-- lookup parent from repository -->\n\t</parent>\n\n\t<properties>\n\t\t<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>\n\t\t<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>\n\t\t<java.version>1.8</java.version>\n\t</properties>\n\n\t<dependencies>\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t<artifactId>spring-boot-starter-web</artifactId>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t<artifactId>spring-boot-starter-data-jpa</artifactId>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>com.h2database</groupId>\n\t\t\t<artifactId>h2</artifactId>\n\t\t\t<scope>test</scope>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t    <groupId>mysql</groupId>\n\t\t    <artifactId>mysql-connector-java</artifactId>\n\t\t    <version>8.0.22</version>\n\t\t</dependency>\n\n\t\t\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t<artifactId>spring-boot-starter-security</artifactId>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>javax.servlet</groupId>\n\t\t\t<artifactId>jstl</artifactId>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>org.webjars</groupId>\n\t\t\t<artifactId>bootstrap</artifactId>\n\t\t\t<version>3.3.6</version>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>org.webjars</groupId>\n\t\t\t<artifactId>bootstrap-datepicker</artifactId>\n\t\t\t<version>1.0.1</version>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>org.webjars</groupId>\n\t\t\t<artifactId>jquery</artifactId>\n\t\t\t<version>1.9.1</version>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>org.apache.tomcat.embed</groupId>\n\t\t\t<artifactId>tomcat-embed-jasper</artifactId>\n\t\t\t<scope>provided</scope>\n\t\t</dependency>\n\n\t\t<!-- AWS -->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t<artifactId>spring-boot-starter-tomcat</artifactId>\n\t\t\t<scope>provided</scope>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t<artifactId>spring-boot-devtools</artifactId>\n\t\t\t<scope>runtime</scope>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t<artifactId>spring-boot-starter-test</artifactId>\n\t\t\t<scope>test</scope>\n\t\t</dependency>\n\t</dependencies>\n\n\t<build>\n\t\t<plugins>\n\t\t\t<plugin>\n\t\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t\t<artifactId>spring-boot-maven-plugin</artifactId>\n\t\t\t</plugin>\n\t\t</plugins>\n\t</build>\n\n\t<repositories>\n\t\t<repository>\n\t\t\t<id>spring-milestones</id>\n\t\t\t<name>Spring Milestones</name>\n\t\t\t<url>https://repo.spring.io/milestones</url>\n\t\t</repository>\n\t</repositories>\n\n\t<pluginRepositories>\n\t\t<pluginRepository>\n\t\t\t<id>spring-milestones</id>\n\t\t\t<name>Spring Milestones</name>\n\t\t\t<url>https://repo.spring.io/milestones</url>\n\t\t</pluginRepository>\n\t</pluginRepositories>\n\n</project>\n"
  },
  {
    "path": "04-spring-boot-web-application-mysql/readme.md",
    "content": "# Todo Web Application using Spring Boot and MySQL as Database\n\nRun com.in28minutes.springboot.web.SpringBootFirstWebApplication as a Java Application.\n\nRuns on default port of Spring Boot - 8080\n\nApplication uses h2 database to run the tests.\n\n## Can be run as a Jar or a WAR\n\n`mvn clean install` generate a war which can deployed to your favorite web server.\n\nWe will deploy to Cloud as a WAR\n\n## Web Application\n\n- http://localhost:8080/login with in28minutes/dummy as credentials\n- You can add, delete and update your todos\n- Spring Security is used to secure the application\n- `com.in28minutes.springboot.web.security.SecurityConfiguration` contains the in memory security credential configuration.\n\n\n## Changes from H2 Application\n\n#### pom.xml\n\n```\n<dependency>\n\t<groupId>com.h2database</groupId>\n\t<artifactId>h2</artifactId>\n\t<scope>test</scope>\n</dependency>\n\n<dependency>\n\t<groupId>mysql</groupId>\n\t<artifactId>mysql-connector-java</artifactId>\n</dependency>\n```\n\n#### src/main/resources/application.properties\n\n```\n#spring.h2.console.enabled=true\n#spring.h2.console.settings.web-allow-others=true\n\nspring.jpa.hibernate.ddl-auto=update\nspring.datasource.url=jdbc:mysql://${RDS_HOSTNAME:localhost}:${RDS_PORT:3306}/${RDS_DB_NAME:todos}\nspring.datasource.username=${RDS_USERNAME:todos-user}\nspring.datasource.password=${RDS_PASSWORD:dummytodos}\nspring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL57Dialect\n```\n\n#### src/test/resources/application.properties\n\n```\nspring.jpa.hibernate.ddl-auto=create-drop\nspring.datasource.driver-class-name=org.h2.Driver\nspring.datasource.url=jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1\nspring.datasource.username=sa\nspring.datasource.password=sa\n```\n\n#### public class Todo\n\n```\n@Size(min=10, message=\"Enter at least 10 Characters...\")\n@Column(name=\"description\")\nprivate String desc;\n```\n## My SQL\n\n### Launching MySQL using Docker\n\n```\ndocker run --detach --env MYSQL_ROOT_PASSWORD=dummypassword --env MYSQL_USER=todos-user --env MYSQL_PASSWORD=dummytodos --env MYSQL_DATABASE=todos --name mysql --publish 3306:3306 mysql:5.7\n```\n\n\n### My SQL Shell Client\n\n- https://dev.mysql.com/downloads/shell/\n\n- Install on mac using `brew install caskroom/cask/mysql-shell`.\n\n\n```\nRangas-MacBook-Air:aws-projects rangakaranam$ mysqlsh\nMySQL Shell 8.0.15\nCopyright (c) 2016, 2019, Oracle and/or its affiliates. All rights reserved.\nOracle is a registered trademark of Oracle Corporation and/or its affiliates.\nOther names may be trademarks of their respective owners.\n\nType '\\help' or '\\?' for help; '\\quit' to exit.\n\nMySQL  JS > \\connect todos-user@localhost:3306\nCreating a session to 'todos-user@localhost:3306'\nPlease provide the password for 'todos-user@localhost:3306': \nSave password for 'todos-user@localhost:3306'? [Y]es/[N]o/Ne[v]er (default No): v\nFetching schema names for autocompletion... Press ^C to stop.\nYour MySQL connection id is 37\nServer version: 5.7.26 MySQL Community Server (GPL)\nNo default schema selected; type \\use <schema> to set one.\n\n MySQL  localhost:3306 ssl  JS > \\sql\nSwitching to SQL mode... Commands end with ;\n\n MySQL  localhost:3306 ssl  SQL > use todos\nDefault schema set to `todos`.\nFetching table and column names from `todos` for auto-completion... Press ^C to stop.\n\n MySQL  localhost:3306 ssl  todos  SQL > select * from todo ;\n+----+--------------+---------+----------------------------+-------------+\n| id | description  | is_done | target_date                | user        |\n+----+--------------+---------+----------------------------+-------------+\n|  1 | Default Desc | 0       | 2019-06-26 18:30:00.000000 | in28minutes |\n+----+--------------+---------+----------------------------+-------------+\n1 row in set (0.0032 sec)\n\n```\n\n### Create Todo Table for Production\n\n```\ncreate table hibernate_sequence (next_val bigint) engine=InnoDB\ninsert into hibernate_sequence values ( 1 )\ncreate table todo (id integer not null, description varchar(255), is_done bit not null, target_date datetime(6), user varchar(255), primary key (id)) engine=InnoDB\n\n```"
  },
  {
    "path": "04-spring-boot-web-application-mysql/src/main/java/com/in28minutes/springboot/web/EnvironmentConfigurationLogger.java",
    "content": "package com.in28minutes.springboot.web;\n\nimport java.util.Arrays;\nimport java.util.stream.StreamSupport;\n\nimport org.slf4j.Logger;\nimport org.slf4j.LoggerFactory;\nimport org.springframework.context.event.ContextRefreshedEvent;\nimport org.springframework.context.event.EventListener;\nimport org.springframework.core.env.AbstractEnvironment;\nimport org.springframework.core.env.EnumerablePropertySource;\nimport org.springframework.core.env.Environment;\nimport org.springframework.core.env.MutablePropertySources;\nimport org.springframework.stereotype.Component;\n\n@Component\npublic class EnvironmentConfigurationLogger {\n\n\tprivate static final Logger LOGGER = LoggerFactory.getLogger(EnvironmentConfigurationLogger.class);\n\n\t@EventListener\n\tpublic void handleContextRefresh(ContextRefreshedEvent event) {\n\t\tfinal Environment environment = event.getApplicationContext().getEnvironment();\n\t\tLOGGER.info(\"====== Environment and configuration ======\");\n\t\tLOGGER.info(\"Active profiles: {}\", Arrays.toString(environment.getActiveProfiles()));\n\t\tfinal MutablePropertySources sources = ((AbstractEnvironment) environment).getPropertySources();\n\t\tStreamSupport.stream(sources.spliterator(), false).filter(ps -> ps instanceof EnumerablePropertySource)\n\t\t\t\t.map(ps -> ((EnumerablePropertySource) ps).getPropertyNames()).flatMap(Arrays::stream).distinct()\n\t\t\t\t.forEach(prop -> LOGGER.info(\"{}\", prop));// environment.getProperty(prop)\n\t\tLOGGER.info(\"===========================================\");\n\t}\n\n}"
  },
  {
    "path": "04-spring-boot-web-application-mysql/src/main/java/com/in28minutes/springboot/web/SpringBootFirstWebApplication.java",
    "content": "package com.in28minutes.springboot.web;\n\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boot.autoconfigure.SpringBootApplication;\nimport org.springframework.boot.builder.SpringApplicationBuilder;\nimport org.springframework.boot.web.servlet.support.SpringBootServletInitializer;\nimport org.springframework.context.annotation.ComponentScan;\n\n@SpringBootApplication\n@ComponentScan(\"com.in28minutes.springboot.web\")\npublic class SpringBootFirstWebApplication extends SpringBootServletInitializer { // AWS\n\n\t@Override\n\tprotected SpringApplicationBuilder configure(SpringApplicationBuilder application) {\n\t\treturn application.sources(SpringBootFirstWebApplication.class);\n\t}\n\n\tpublic static void main(String[] args) {\n\t\tSpringApplication.run(SpringBootFirstWebApplication.class, args);\n\t}\n\n}\n"
  },
  {
    "path": "04-spring-boot-web-application-mysql/src/main/java/com/in28minutes/springboot/web/controller/ErrorController.java",
    "content": "package com.in28minutes.springboot.web.controller;\n\nimport javax.servlet.http.HttpServletRequest;\n\nimport org.springframework.stereotype.Controller;\nimport org.springframework.web.bind.annotation.ExceptionHandler;\nimport org.springframework.web.servlet.ModelAndView;\n\n@Controller(\"error\")\npublic class ErrorController {\n\t\n\t@ExceptionHandler(Exception.class)\n\tpublic ModelAndView handleException\n\t\t(HttpServletRequest request, Exception ex){\n\t\tModelAndView mv = new ModelAndView();\n\n\t\tmv.addObject(\"exception\", ex.getLocalizedMessage());\n\t\tmv.addObject(\"url\", request.getRequestURL());\n\t\t\n\t\tmv.setViewName(\"error\");\n\t\treturn mv;\n\t}\n\n}\n"
  },
  {
    "path": "04-spring-boot-web-application-mysql/src/main/java/com/in28minutes/springboot/web/controller/LogoutController.java",
    "content": "package com.in28minutes.springboot.web.controller;\n\nimport javax.servlet.http.HttpServletRequest;\nimport javax.servlet.http.HttpServletResponse;\n\nimport org.springframework.security.core.Authentication;\nimport org.springframework.security.core.context.SecurityContextHolder;\nimport org.springframework.security.web.authentication.logout.SecurityContextLogoutHandler;\nimport org.springframework.stereotype.Controller;\nimport org.springframework.web.bind.annotation.RequestMapping;\nimport org.springframework.web.bind.annotation.RequestMethod;\n\n@Controller\npublic class LogoutController {\n\n\t@RequestMapping(value = \"/logout\", method = RequestMethod.GET)\n\tpublic String logout(HttpServletRequest request,\n\t\t\tHttpServletResponse response) {\n\t\t\n\t\tAuthentication authentication = SecurityContextHolder.getContext()\n\t\t\t\t.getAuthentication();\n\t\t\n\t\tif (authentication != null) {\n\t\t\tnew SecurityContextLogoutHandler().logout(request, response,\n\t\t\t\t\tauthentication);\n\t\t}\n\n\t\treturn \"redirect:/\";\n\t}\n}\n"
  },
  {
    "path": "04-spring-boot-web-application-mysql/src/main/java/com/in28minutes/springboot/web/controller/TodoController.java",
    "content": "package com.in28minutes.springboot.web.controller;\n\nimport java.text.SimpleDateFormat;\nimport java.util.Date;\n\nimport javax.validation.Valid;\n\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.beans.propertyeditors.CustomDateEditor;\nimport org.springframework.security.core.context.SecurityContextHolder;\nimport org.springframework.security.core.userdetails.UserDetails;\nimport org.springframework.stereotype.Controller;\nimport org.springframework.ui.ModelMap;\nimport org.springframework.validation.BindingResult;\nimport org.springframework.web.bind.WebDataBinder;\nimport org.springframework.web.bind.annotation.InitBinder;\nimport org.springframework.web.bind.annotation.RequestMapping;\nimport org.springframework.web.bind.annotation.RequestMethod;\nimport org.springframework.web.bind.annotation.RequestParam;\n\nimport com.in28minutes.springboot.web.model.Todo;\nimport com.in28minutes.springboot.web.service.TodoRepository;\n\n@Controller\npublic class TodoController {\n\t\n\t@Autowired\n\tTodoRepository repository;\n\n\t@InitBinder\n\tpublic void initBinder(WebDataBinder binder) {\n\t\t// Date - dd/MM/yyyy\n\t\tSimpleDateFormat dateFormat = new SimpleDateFormat(\"dd/MM/yyyy\");\n\t\tbinder.registerCustomEditor(Date.class, new CustomDateEditor(\n\t\t\t\tdateFormat, false));\n\t}\n\n\t@RequestMapping(value = \"/list-todos\", method = RequestMethod.GET)\n\tpublic String showTodos(ModelMap model) {\n\t\tString name = getLoggedInUserName(model);\n\t\tmodel.put(\"todos\", repository.findByUser(name));\n\t\t//model.put(\"todos\", service.retrieveTodos(name));\n\t\treturn \"list-todos\";\n\t}\n\n\tprivate String getLoggedInUserName(ModelMap model) {\n\t\tObject principal = SecurityContextHolder.getContext()\n\t\t\t\t.getAuthentication().getPrincipal();\n\t\t\n\t\tif (principal instanceof UserDetails) {\n\t\t\treturn ((UserDetails) principal).getUsername();\n\t\t}\n\t\t\n\t\treturn principal.toString();\n\t}\n\n\t@RequestMapping(value = \"/add-todo\", method = RequestMethod.GET)\n\tpublic String showAddTodoPage(ModelMap model) {\n\t\tmodel.addAttribute(\"todo\", new Todo(0, getLoggedInUserName(model),\n\t\t\t\t\"Default Desc\", new Date(), false));\n\t\treturn \"todo\";\n\t}\n\n\t@RequestMapping(value = \"/delete-todo\", method = RequestMethod.GET)\n\tpublic String deleteTodo(@RequestParam int id) {\n\n\t\t//if(id==1)\n\t\t\t//throw new RuntimeException(\"Something went wrong\");\n\t\trepository.deleteById(id);\n\t\t//service.deleteTodo(id);\n\t\treturn \"redirect:/list-todos\";\n\t}\n\n\t@RequestMapping(value = \"/update-todo\", method = RequestMethod.GET)\n\tpublic String showUpdateTodoPage(@RequestParam int id, ModelMap model) {\n\t\tTodo todo = repository.findById(id).get();\n\t\t//Todo todo = service.retrieveTodo(id);\n\t\tmodel.put(\"todo\", todo);\n\t\treturn \"todo\";\n\t}\n\n\t@RequestMapping(value = \"/update-todo\", method = RequestMethod.POST)\n\tpublic String updateTodo(ModelMap model, @Valid Todo todo,\n\t\t\tBindingResult result) {\n\n\t\tif (result.hasErrors()) {\n\t\t\treturn \"todo\";\n\t\t}\n\n\t\ttodo.setUser(getLoggedInUserName(model));\n\n\t\trepository.save(todo);\n\t\t//service.updateTodo(todo);\n\n\t\treturn \"redirect:/list-todos\";\n\t}\n\n\t@RequestMapping(value = \"/add-todo\", method = RequestMethod.POST)\n\tpublic String addTodo(ModelMap model, @Valid Todo todo, BindingResult result) {\n\n\t\tif (result.hasErrors()) {\n\t\t\treturn \"todo\";\n\t\t}\n\n\t\ttodo.setUser(getLoggedInUserName(model));\n\t\trepository.save(todo);\n\t\t/*service.addTodo(getLoggedInUserName(model), todo.getDesc(), todo.getTargetDate(),\n\t\t\t\tfalse);*/\n\t\treturn \"redirect:/list-todos\";\n\t}\n}\n"
  },
  {
    "path": "04-spring-boot-web-application-mysql/src/main/java/com/in28minutes/springboot/web/controller/WelcomeController.java",
    "content": "package com.in28minutes.springboot.web.controller;\n\nimport org.springframework.security.core.context.SecurityContextHolder;\nimport org.springframework.security.core.userdetails.UserDetails;\nimport org.springframework.stereotype.Controller;\nimport org.springframework.ui.ModelMap;\nimport org.springframework.web.bind.annotation.RequestMapping;\nimport org.springframework.web.bind.annotation.RequestMethod;\n\n@Controller\npublic class WelcomeController {\n\n\t@RequestMapping(value = \"/\", method = RequestMethod.GET)\n\tpublic String showWelcomePage(ModelMap model) {\n\t\tmodel.put(\"name\", getLoggedinUserName());\n\t\treturn \"welcome\";\n\t}\n\n\tprivate String getLoggedinUserName() {\n\t\tObject principal = SecurityContextHolder.getContext()\n\t\t\t\t.getAuthentication().getPrincipal();\n\t\t\n\t\tif (principal instanceof UserDetails) {\n\t\t\treturn ((UserDetails) principal).getUsername();\n\t\t}\n\t\t\n\t\treturn principal.toString();\n\t}\n\n}\n"
  },
  {
    "path": "04-spring-boot-web-application-mysql/src/main/java/com/in28minutes/springboot/web/model/Todo.java",
    "content": "package com.in28minutes.springboot.web.model;\n\nimport java.util.Date;\n\nimport javax.persistence.Column;\nimport javax.persistence.Entity;\nimport javax.persistence.GeneratedValue;\nimport javax.persistence.Id;\nimport javax.validation.constraints.Size;\n\n@Entity\npublic class Todo {\n    \n\t@Id\n\t@GeneratedValue\n\tprivate int id;\n    \n\tprivate String user;\n    \n    @Size(min=10, message=\"Enter at least 10 Characters...\")\n    @Column(name=\"description\")\n    private String desc;\n\n    private Date targetDate;\n    private boolean isDone;\n\n    public Todo() {\n    \t\tsuper();\n    }\n    \n    public Todo(int id, String user, String desc, Date targetDate,\n            boolean isDone) {\n        super();\n        this.id = id;\n        this.user = user;\n        this.desc = desc;\n        this.targetDate = targetDate;\n        this.isDone = isDone;\n    }\n\n    public int getId() {\n        return id;\n    }\n\n    public void setId(int id) {\n        this.id = id;\n    }\n\n    public String getUser() {\n        return user;\n    }\n\n    public void setUser(String user) {\n        this.user = user;\n    }\n\n    public String getDesc() {\n        return desc;\n    }\n\n    public void setDesc(String desc) {\n        this.desc = desc;\n    }\n\n    public Date getTargetDate() {\n        return targetDate;\n    }\n\n    public void setTargetDate(Date targetDate) {\n        this.targetDate = targetDate;\n    }\n\n    public boolean isDone() {\n        return isDone;\n    }\n\n    public void setDone(boolean isDone) {\n        this.isDone = isDone;\n    }\n\n    @Override\n    public int hashCode() {\n        final int prime = 31;\n        int result = 1;\n        result = prime * result + id;\n        return result;\n    }\n\n    @Override\n    public boolean equals(Object obj) {\n        if (this == obj) {\n            return true;\n        }\n        if (obj == null) {\n            return false;\n        }\n        if (getClass() != obj.getClass()) {\n            return false;\n        }\n        Todo other = (Todo) obj;\n        if (id != other.id) {\n            return false;\n        }\n        return true;\n    }\n\n    @Override\n    public String toString() {\n        return String.format(\n                \"Todo [id=%s, user=%s, desc=%s, targetDate=%s, isDone=%s]\", id,\n                user, desc, targetDate, isDone);\n    }\n\n}"
  },
  {
    "path": "04-spring-boot-web-application-mysql/src/main/java/com/in28minutes/springboot/web/security/SecurityConfiguration.java",
    "content": "package com.in28minutes.springboot.web.security;\n\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.context.annotation.Configuration;\nimport org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;\nimport org.springframework.security.config.annotation.web.builders.HttpSecurity;\nimport org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;\n\n@Configuration\npublic class SecurityConfiguration extends WebSecurityConfigurerAdapter{\n\t//Create User - in28Minutes/dummy\n\t@Autowired\n    public void configureGlobalSecurity(AuthenticationManagerBuilder auth)\n            throws Exception {\n        auth.inMemoryAuthentication().withUser(\"in28minutes\").password(\"{noop}dummy\")\n                .roles(\"USER\", \"ADMIN\");\n    }\n\t\n\t@Override\n    protected void configure(HttpSecurity http) throws Exception {\n        http.authorizeRequests().antMatchers(\"/login\", \"/h2-console/**\").permitAll()\n                .antMatchers(\"/\", \"/*todo*/**\").access(\"hasRole('USER')\").and()\n                .formLogin();\n        \n        http.csrf().disable();\n        http.headers().frameOptions().disable();\n    }\n}\n"
  },
  {
    "path": "04-spring-boot-web-application-mysql/src/main/java/com/in28minutes/springboot/web/service/TodoRepository.java",
    "content": "package com.in28minutes.springboot.web.service;\n\nimport java.util.List;\n\nimport org.springframework.data.jpa.repository.JpaRepository;\n\nimport com.in28minutes.springboot.web.model.Todo;\n\npublic interface TodoRepository extends JpaRepository<Todo, Integer>{\n\tList<Todo> findByUser(String user);\n\t\n\t//service.retrieveTodos(name)\n\n\t//service.deleteTodo(id);\n\t//service.retrieveTodo(id)\n\t//service.updateTodo(todo)\n\t//service.addTodo(getLoggedInUserName(model), todo.getDesc(), todo.getTargetDate(),false);\n}\n"
  },
  {
    "path": "04-spring-boot-web-application-mysql/src/main/java/com/in28minutes/springboot/web/service/TodoService.java",
    "content": "package com.in28minutes.springboot.web.service;\n\nimport java.util.ArrayList;\nimport java.util.Date;\nimport java.util.Iterator;\nimport java.util.List;\n\nimport org.springframework.stereotype.Service;\n\nimport com.in28minutes.springboot.web.model.Todo;\n\n@Service\npublic class TodoService {\n    private static List<Todo> todos = new ArrayList<Todo>();\n    private static int todoCount = 3;\n\n    static {\n        todos.add(new Todo(1, \"in28minutes\", \"Learn Spring MVC\", new Date(),\n                false));\n        todos.add(new Todo(2, \"in28minutes\", \"Learn Struts\", new Date(), false));\n        todos.add(new Todo(3, \"in28minutes\", \"Learn Hibernate\", new Date(),\n                false));\n    }\n\n    public List<Todo> retrieveTodos(String user) {\n        List<Todo> filteredTodos = new ArrayList<Todo>();\n        for (Todo todo : todos) {\n            if (todo.getUser().equalsIgnoreCase(user)) {\n                filteredTodos.add(todo);\n            }\n        }\n        return filteredTodos;\n    }\n    \n    public Todo retrieveTodo(int id) {\n        for (Todo todo : todos) {\n            if (todo.getId()==id) {\n                return todo;\n            }\n        }\n        return null;\n    }\n\n    public void updateTodo(Todo todo){\n    \t\ttodos.remove(todo);\n    \t\ttodos.add(todo);\n    }\n\n    public void addTodo(String name, String desc, Date targetDate,\n            boolean isDone) {\n        todos.add(new Todo(++todoCount, name, desc, targetDate, isDone));\n    }\n\n    public void deleteTodo(int id) {\n        Iterator<Todo> iterator = todos.iterator();\n        while (iterator.hasNext()) {\n            Todo todo = iterator.next();\n            if (todo.getId() == id) {\n                iterator.remove();\n            }\n        }\n    }\n}"
  },
  {
    "path": "04-spring-boot-web-application-mysql/src/main/resources/application.properties",
    "content": "spring.mvc.view.prefix=/WEB-INF/jsp/\nspring.mvc.view.suffix=.jsp\nlogging.level.org.springframework.web=INFO\n\nspring.jpa.show-sql=true\n#spring.h2.console.enabled=true\n#spring.h2.console.settings.web-allow-others=true\n\nspring.jpa.hibernate.ddl-auto=update\nspring.datasource.url=jdbc:mysql://${RDS_HOSTNAME:localhost}:${RDS_PORT:3306}/${RDS_DB_NAME:todos}\nspring.datasource.username=${RDS_USERNAME:todos-user}\nspring.datasource.password=${RDS_PASSWORD:dummytodos}\nspring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL57Dialect\n\n#awseb-e-fiwshfewnw-stack-AWSEBSecurityGroup-8BSA213MNW98\n#Security Group: sg-0e0798c5e8e7a2643 -> Web Server Instance\n#sg-0e0798c5e8e7a2643 -\n#sg-0e0798c5e8e7a2643 \n\n#user name - todostageuser\n#Database NAme - todos_stage\n\n#RDS_HOSTNAME-todostage.cxohavuo1efd.us-east-1.rds.amazonaws.com\n#RDS_PORT-3306\n#RDS_DB_NAME-todos_stage\n#RDS_USERNAME-todostageuser\n#RDS_PASSWORD\n\n#sg-0d7b7ff6b6a7331cd"
  },
  {
    "path": "04-spring-boot-web-application-mysql/src/main/webapp/WEB-INF/jsp/common/footer.jspf",
    "content": "<script src=\"webjars/jquery/1.9.1/jquery.min.js\"></script>\n<script src=\"webjars/bootstrap/3.3.6/js/bootstrap.min.js\"></script>\n<script\n\tsrc=\"webjars/bootstrap-datepicker/1.0.1/js/bootstrap-datepicker.js\"></script>\n<script>\n\t$('#targetDate').datepicker({\n\t\tformat : 'dd/mm/yyyy'\n\t});\n</script>\n\n</body>\n</html>"
  },
  {
    "path": "04-spring-boot-web-application-mysql/src/main/webapp/WEB-INF/jsp/common/header.jspf",
    "content": "<%@ taglib uri=\"http://java.sun.com/jsp/jstl/core\" prefix=\"c\"%>\n<%@ taglib uri=\"http://java.sun.com/jsp/jstl/fmt\" prefix=\"fmt\"%>\n<%@taglib uri=\"http://www.springframework.org/tags/form\" prefix=\"form\"%>\n\n<html>\n\n<head>\n<title>First Web Application</title>\n<link href=\"webjars/bootstrap/3.3.6/css/bootstrap.min.css\"\n\trel=\"stylesheet\">\n\n</head>\n\n<body>\n"
  },
  {
    "path": "04-spring-boot-web-application-mysql/src/main/webapp/WEB-INF/jsp/common/navigation.jspf",
    "content": "\n<nav role=\"navigation\" class=\"navbar navbar-default\">\n\t<div class=\"\">\n\t\t<a href=\"http://www.in28minutes.com\" class=\"navbar-brand\">in28Minutes</a>\n\t</div>\n\t<div class=\"navbar-collapse\">\n\t\t<ul class=\"nav navbar-nav\">\n\t\t\t<li class=\"active\"><a href=\"/\">Home</a></li>\n\t\t\t<li><a href=\"/list-todos\">Todos</a></li>\n\t\t</ul>\n\t\t<ul class=\"nav navbar-nav navbar-right\">\n\t\t\t<li><a href=\"/logout\">Logout</a></li>\n\t\t</ul>\n\t</div>\n</nav>\n"
  },
  {
    "path": "04-spring-boot-web-application-mysql/src/main/webapp/WEB-INF/jsp/error.jsp",
    "content": "<%@ include file=\"common/header.jspf\"%>\n<%@ include file=\"common/navigation.jspf\"%>\n<div class=\"container\">\nAn exception occurred! Please contact Support!\n</div>\n<%@ include file=\"common/footer.jspf\"%>"
  },
  {
    "path": "04-spring-boot-web-application-mysql/src/main/webapp/WEB-INF/jsp/list-todos.jsp",
    "content": "<%@ include file=\"common/header.jspf\" %>\n<%@ include file=\"common/navigation.jspf\" %>\n\t\n\t<div class=\"container\">\n\t\t<table class=\"table table-striped\">\n\t\t\t<caption>Your todos are</caption>\n\t\t\t<thead>\n\t\t\t\t<tr>\n\t\t\t\t\t<th>Description</th>\n\t\t\t\t\t<th>Target Date</th>\n\t\t\t\t\t<th>Is it Done?</th>\n\t\t\t\t\t<th></th>\n\t\t\t\t\t<th></th>\n\t\t\t\t</tr>\n\t\t\t</thead>\n\t\t\t<tbody>\n\t\t\t\t<c:forEach items=\"${todos}\" var=\"todo\">\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>${todo.desc}</td>\n\t\t\t\t\t\t<td><fmt:formatDate value=\"${todo.targetDate}\" pattern=\"dd/MM/yyyy\"/></td>\n\t\t\t\t\t\t<td>${todo.done}</td>\n\t\t\t\t\t\t<td><a type=\"button\" class=\"btn btn-success\"\n\t\t\t\t\t\t\thref=\"/update-todo?id=${todo.id}\">Update</a></td>\n\t\t\t\t\t\t<td><a type=\"button\" class=\"btn btn-warning\"\n\t\t\t\t\t\t\thref=\"/delete-todo?id=${todo.id}\">Delete</a></td>\n\t\t\t\t\t</tr>\n\t\t\t\t</c:forEach>\n\t\t\t</tbody>\n\t\t</table>\n\t\t<div>\n\t\t\t<a class=\"button\" href=\"/add-todo\">Add a Todo</a>\n\t\t</div>\n\t</div>\n<%@ include file=\"common/footer.jspf\" %>"
  },
  {
    "path": "04-spring-boot-web-application-mysql/src/main/webapp/WEB-INF/jsp/todo.jsp",
    "content": "<%@ include file=\"common/header.jspf\" %>\n<%@ include file=\"common/navigation.jspf\" %>\n<div class=\"container\">\n\t<form:form method=\"post\" modelAttribute=\"todo\">\n\t\t<form:hidden path=\"id\" />\n\t\t<fieldset class=\"form-group\">\n\t\t\t<form:label path=\"desc\">Description</form:label>\n\t\t\t<form:input path=\"desc\" type=\"text\" class=\"form-control\"\n\t\t\t\trequired=\"required\" />\n\t\t\t<form:errors path=\"desc\" cssClass=\"text-warning\" />\n\t\t</fieldset>\n\n\t\t<fieldset class=\"form-group\">\n\t\t\t<form:label path=\"targetDate\">Target Date</form:label>\n\t\t\t<form:input path=\"targetDate\" type=\"text\" class=\"form-control\"\n\t\t\t\trequired=\"required\" />\n\t\t\t<form:errors path=\"targetDate\" cssClass=\"text-warning\" />\n\t\t</fieldset>\n\n\t\t<button type=\"submit\" class=\"btn btn-success\">Add</button>\n\t</form:form>\n</div>\n<%@ include file=\"common/footer.jspf\" %>"
  },
  {
    "path": "04-spring-boot-web-application-mysql/src/main/webapp/WEB-INF/jsp/welcome.jsp",
    "content": "<%@ include file=\"common/header.jspf\"%>\n<%@ include file=\"common/navigation.jspf\"%>\n<div class=\"container\">\n\tWelcome ${name}!! <a href=\"/list-todos\">Click here</a> to manage your\n\ttodo's.\n</div>\n<%@ include file=\"common/footer.jspf\"%>"
  },
  {
    "path": "04-spring-boot-web-application-mysql/src/test/java/com/in28minutes/springboot/web/SpringBootFirstWebApplicationTests.java",
    "content": "package com.in28minutes.springboot.web;\n\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.springframework.boot.test.context.SpringBootTest;\nimport org.springframework.test.context.junit4.SpringRunner;\n\n@RunWith(SpringRunner.class)\n@SpringBootTest\npublic class SpringBootFirstWebApplicationTests {\n\n\t@Test\n\tpublic void contextLoads() {\n\t}\n\n}\n"
  },
  {
    "path": "04-spring-boot-web-application-mysql/src/test/resources/application.properties",
    "content": "spring.jpa.hibernate.ddl-auto=create-drop\nspring.datasource.driver-class-name=org.h2.Driver\nspring.datasource.url=jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1\nspring.datasource.username=sa\nspring.datasource.password=sa\n"
  },
  {
    "path": "05-spring-boot-react-full-stack-h2/build-artifacts-backup/build/asset-manifest.json",
    "content": "{\n  \"main.css\": \"/static/css/main.566e00ae.chunk.css\",\n  \"main.js\": \"/static/js/main.85126504.chunk.js\",\n  \"main.js.map\": \"/static/js/main.85126504.chunk.js.map\",\n  \"runtime~main.js\": \"/static/js/runtime~main.c5541365.js\",\n  \"runtime~main.js.map\": \"/static/js/runtime~main.c5541365.js.map\",\n  \"static/js/2.3f64e426.chunk.js\": \"/static/js/2.3f64e426.chunk.js\",\n  \"static/js/2.3f64e426.chunk.js.map\": \"/static/js/2.3f64e426.chunk.js.map\",\n  \"index.html\": \"/index.html\",\n  \"precache-manifest.fffdf22a71e2cab7bfcc691bf8ce04a4.js\": \"/precache-manifest.fffdf22a71e2cab7bfcc691bf8ce04a4.js\",\n  \"service-worker.js\": \"/service-worker.js\",\n  \"static/css/main.566e00ae.chunk.css.map\": \"/static/css/main.566e00ae.chunk.css.map\"\n}"
  },
  {
    "path": "05-spring-boot-react-full-stack-h2/build-artifacts-backup/build/index.html",
    "content": "<!doctype html><html lang=\"en\"><head><meta charset=\"utf-8\"/><link rel=\"shortcut icon\" href=\"/favicon.ico\"/><meta name=\"viewport\" content=\"width=device-width,initial-scale=1,shrink-to-fit=no\"/><meta name=\"theme-color\" content=\"#000000\"/><link rel=\"manifest\" href=\"/manifest.json\"/><title>My Todo Application</title><link href=\"/static/css/main.566e00ae.chunk.css\" rel=\"stylesheet\"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id=\"root\"></div><script>!function(l){function e(e){for(var r,t,n=e[0],o=e[1],u=e[2],f=0,i=[];f<n.length;f++)t=n[f],p[t]&&i.push(p[t][0]),p[t]=0;for(r in o)Object.prototype.hasOwnProperty.call(o,r)&&(l[r]=o[r]);for(s&&s(e);i.length;)i.shift()();return c.push.apply(c,u||[]),a()}function a(){for(var e,r=0;r<c.length;r++){for(var t=c[r],n=!0,o=1;o<t.length;o++){var u=t[o];0!==p[u]&&(n=!1)}n&&(c.splice(r--,1),e=f(f.s=t[0]))}return e}var t={},p={1:0},c=[];function f(e){if(t[e])return t[e].exports;var r=t[e]={i:e,l:!1,exports:{}};return l[e].call(r.exports,r,r.exports,f),r.l=!0,r.exports}f.m=l,f.c=t,f.d=function(e,r,t){f.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:t})},f.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},f.t=function(r,e){if(1&e&&(r=f(r)),8&e)return r;if(4&e&&\"object\"==typeof r&&r&&r.__esModule)return r;var t=Object.create(null);if(f.r(t),Object.defineProperty(t,\"default\",{enumerable:!0,value:r}),2&e&&\"string\"!=typeof r)for(var n in r)f.d(t,n,function(e){return r[e]}.bind(null,n));return t},f.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return f.d(r,\"a\",r),r},f.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},f.p=\"/\";var r=window.webpackJsonp=window.webpackJsonp||[],n=r.push.bind(r);r.push=e,r=r.slice();for(var o=0;o<r.length;o++)e(r[o]);var s=n;a()}([])</script><script src=\"/static/js/2.3f64e426.chunk.js\"></script><script src=\"/static/js/main.85126504.chunk.js\"></script></body></html>"
  },
  {
    "path": "05-spring-boot-react-full-stack-h2/build-artifacts-backup/build/manifest.json",
    "content": "{\n  \"short_name\": \"React App\",\n  \"name\": \"Create React App Sample\",\n  \"icons\": [\n    {\n      \"src\": \"favicon.ico\",\n      \"sizes\": \"64x64 32x32 24x24 16x16\",\n      \"type\": \"image/x-icon\"\n    }\n  ],\n  \"start_url\": \".\",\n  \"display\": \"standalone\",\n  \"theme_color\": \"#000000\",\n  \"background_color\": \"#ffffff\"\n}\n"
  },
  {
    "path": "05-spring-boot-react-full-stack-h2/build-artifacts-backup/build/precache-manifest.fffdf22a71e2cab7bfcc691bf8ce04a4.js",
    "content": "self.__precacheManifest = [\n  {\n    \"revision\": \"fdfcfda2d9b1bf31db52\",\n    \"url\": \"/static/js/runtime~main.c5541365.js\"\n  },\n  {\n    \"revision\": \"aa849e993541898903d5\",\n    \"url\": \"/static/js/main.85126504.chunk.js\"\n  },\n  {\n    \"revision\": \"3be61595d9a1137a984f\",\n    \"url\": \"/static/js/2.3f64e426.chunk.js\"\n  },\n  {\n    \"revision\": \"aa849e993541898903d5\",\n    \"url\": \"/static/css/main.566e00ae.chunk.css\"\n  },\n  {\n    \"revision\": \"0599a7b1b11b0ef313a773d341260a9e\",\n    \"url\": \"/index.html\"\n  }\n];"
  },
  {
    "path": "05-spring-boot-react-full-stack-h2/build-artifacts-backup/build/service-worker.js",
    "content": "/**\n * Welcome to your Workbox-powered service worker!\n *\n * You'll need to register this file in your web app and you should\n * disable HTTP caching for this file too.\n * See https://goo.gl/nhQhGp\n *\n * The rest of the code is auto-generated. Please don't update this file\n * directly; instead, make changes to your Workbox build configuration\n * and re-run your build process.\n * See https://goo.gl/2aRDsh\n */\n\nimportScripts(\"https://storage.googleapis.com/workbox-cdn/releases/3.6.3/workbox-sw.js\");\n\nimportScripts(\n  \"/precache-manifest.fffdf22a71e2cab7bfcc691bf8ce04a4.js\"\n);\n\nworkbox.clientsClaim();\n\n/**\n * The workboxSW.precacheAndRoute() method efficiently caches and responds to\n * requests for URLs in the manifest.\n * See https://goo.gl/S9QRab\n */\nself.__precacheManifest = [].concat(self.__precacheManifest || []);\nworkbox.precaching.suppressWarnings();\nworkbox.precaching.precacheAndRoute(self.__precacheManifest, {});\n\nworkbox.routing.registerNavigationRoute(\"/index.html\", {\n  \n  blacklist: [/^\\/_/,/\\/[^\\/]+\\.[^\\/]+$/],\n});\n"
  },
  {
    "path": "05-spring-boot-react-full-stack-h2/build-artifacts-backup/build/static/css/main.566e00ae.chunk.css",
    "content": "@import url(https://unpkg.com/bootstrap@4.1.0/dist/css/bootstrap.min.css);body{margin:0;padding:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}code{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}.footer{position:absolute;bottom:0;width:100%;height:40px;background-color:#222}.App{text-align:center}.App-logo{-webkit-animation:App-logo-spin 20s linear infinite;animation:App-logo-spin 20s linear infinite;height:40vmin;pointer-events:none}.App-header{background-color:#282c34;min-height:100vh;display:-webkit-flex;display:flex;-webkit-flex-direction:column;flex-direction:column;-webkit-align-items:center;align-items:center;-webkit-justify-content:center;justify-content:center;font-size:calc(10px + 2vmin);color:#fff}.App-link{color:#61dafb}@-webkit-keyframes App-logo-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes App-logo-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}\n/*# sourceMappingURL=main.566e00ae.chunk.css.map */"
  },
  {
    "path": "05-spring-boot-react-full-stack-h2/build-artifacts-backup/build/static/js/2.3f64e426.chunk.js",
    "content": "(window.webpackJsonp=window.webpackJsonp||[]).push([[2],[function(e,t,n){\"use strict\";e.exports=n(40)},function(e,t,n){e.exports=n(64)()},function(e,t,n){\"use strict\";function r(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}n.d(t,\"a\",function(){return r})},function(e,t,n){\"use strict\";function r(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}n.d(t,\"a\",function(){return r})},function(e,t,n){\"use strict\";function r(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function o(e,t,n){return t&&r(e.prototype,t),n&&r(e,n),e}n.d(t,\"a\",function(){return o})},function(e,t,n){\"use strict\";function r(e){return(r=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}n.d(t,\"a\",function(){return r})},function(e,t,n){\"use strict\";var r=n(20),o=\"object\"==typeof self&&self&&self.Object===Object&&self,i=r.a||o||Function(\"return this\")();t.a=i},function(e,t,n){\"use strict\";function r(e){return(r=\"function\"===typeof Symbol&&\"symbol\"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e){return(o=\"function\"===typeof Symbol&&\"symbol\"===r(Symbol.iterator)?function(e){return r(e)}:function(e){return e&&\"function\"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":r(e)})(e)}var i=n(2);function a(e,t){return!t||\"object\"!==o(t)&&\"function\"!==typeof t?Object(i.a)(e):t}n.d(t,\"a\",function(){return a})},function(e,t,n){\"use strict\";function r(e,t){return(r=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function o(e,t){if(\"function\"!==typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&r(e,t)}n.d(t,\"a\",function(){return o})},function(e,t,n){\"use strict\";e.exports=function(){}},function(e,t,n){\"use strict\";e.exports=function(e,t,n,r,o,i,a,u){if(!e){var l;if(void 0===t)l=new Error(\"Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.\");else{var s=[n,r,o,i,a,u],c=0;(l=new Error(t.replace(/%s/g,function(){return s[c++]}))).name=\"Invariant Violation\"}throw l.framesToPop=1,l}}},function(e,t,n){\"use strict\";var r=function(){};e.exports=r},function(e,t,n){e.exports=n(45)},function(e,t,n){\"use strict\";var r=n(29),o=n(46),i=Object.prototype.toString;function a(e){return\"[object Array]\"===i.call(e)}function u(e){return null!==e&&\"object\"===typeof e}function l(e){return\"[object Function]\"===i.call(e)}function s(e,t){if(null!==e&&\"undefined\"!==typeof e)if(\"object\"!==typeof e&&(e=[e]),a(e))for(var n=0,r=e.length;n<r;n++)t.call(null,e[n],n,e);else for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&t.call(null,e[o],o,e)}e.exports={isArray:a,isArrayBuffer:function(e){return\"[object ArrayBuffer]\"===i.call(e)},isBuffer:o,isFormData:function(e){return\"undefined\"!==typeof FormData&&e instanceof FormData},isArrayBufferView:function(e){return\"undefined\"!==typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&e.buffer instanceof ArrayBuffer},isString:function(e){return\"string\"===typeof e},isNumber:function(e){return\"number\"===typeof e},isObject:u,isUndefined:function(e){return\"undefined\"===typeof e},isDate:function(e){return\"[object Date]\"===i.call(e)},isFile:function(e){return\"[object File]\"===i.call(e)},isBlob:function(e){return\"[object Blob]\"===i.call(e)},isFunction:l,isStream:function(e){return u(e)&&l(e.pipe)},isURLSearchParams:function(e){return\"undefined\"!==typeof URLSearchParams&&e instanceof URLSearchParams},isStandardBrowserEnv:function(){return(\"undefined\"===typeof navigator||\"ReactNative\"!==navigator.product)&&\"undefined\"!==typeof window&&\"undefined\"!==typeof document},forEach:s,merge:function e(){var t={};function n(n,r){\"object\"===typeof t[r]&&\"object\"===typeof n?t[r]=e(t[r],n):t[r]=n}for(var r=0,o=arguments.length;r<o;r++)s(arguments[r],n);return t},extend:function(e,t,n){return s(t,function(t,o){e[o]=n&&\"function\"===typeof t?r(t,n):t}),e},trim:function(e){return e.replace(/^\\s*/,\"\").replace(/\\s*$/,\"\")}}},function(e,t,n){\"use strict\";(function(e){var r=n(20),o=\"object\"==typeof exports&&exports&&!exports.nodeType&&exports,i=o&&\"object\"==typeof e&&e&&!e.nodeType&&e,a=i&&i.exports===o&&r.a.process,u=function(){try{var e=i&&i.require&&i.require(\"util\").types;return e||a&&a.binding&&a.binding(\"util\")}catch(t){}}();t.a=u}).call(this,n(26)(e))},function(e,t,n){\"use strict\";var r=n(9),o=n.n(r),i=n(10),a=n.n(i);function u(e){return\"/\"===e.charAt(0)}function l(e,t){for(var n=t,r=n+1,o=e.length;r<o;n+=1,r+=1)e[n]=e[r];e.pop()}var s=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"\",n=e&&e.split(\"/\")||[],r=t&&t.split(\"/\")||[],o=e&&u(e),i=t&&u(t),a=o||i;if(e&&u(e)?r=n:n.length&&(r.pop(),r=r.concat(n)),!r.length)return\"/\";var s=void 0;if(r.length){var c=r[r.length-1];s=\".\"===c||\"..\"===c||\"\"===c}else s=!1;for(var f=0,d=r.length;d>=0;d--){var p=r[d];\".\"===p?l(r,d):\"..\"===p?(l(r,d),f++):f&&(l(r,d),f--)}if(!a)for(;f--;f)r.unshift(\"..\");!a||\"\"===r[0]||r[0]&&u(r[0])||r.unshift(\"\");var h=r.join(\"/\");return s&&\"/\"!==h.substr(-1)&&(h+=\"/\"),h},c=\"function\"===typeof Symbol&&\"symbol\"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e};var f=function e(t,n){if(t===n)return!0;if(null==t||null==n)return!1;if(Array.isArray(t))return Array.isArray(n)&&t.length===n.length&&t.every(function(t,r){return e(t,n[r])});var r=\"undefined\"===typeof t?\"undefined\":c(t);if(r!==(\"undefined\"===typeof n?\"undefined\":c(n)))return!1;if(\"object\"===r){var o=t.valueOf(),i=n.valueOf();if(o!==t||i!==n)return e(o,i);var a=Object.keys(t),u=Object.keys(n);return a.length===u.length&&a.every(function(r){return e(t[r],n[r])})}return!1},d=function(e){return\"/\"===e.charAt(0)?e:\"/\"+e},p=function(e,t){return new RegExp(\"^\"+t+\"(\\\\/|\\\\?|#|$)\",\"i\").test(e)},h=function(e,t){return p(e,t)?e.substr(t.length):e},m=function(e){return\"/\"===e.charAt(e.length-1)?e.slice(0,-1):e},y=function(e){var t=e.pathname,n=e.search,r=e.hash,o=t||\"/\";return n&&\"?\"!==n&&(o+=\"?\"===n.charAt(0)?n:\"?\"+n),r&&\"#\"!==r&&(o+=\"#\"===r.charAt(0)?r:\"#\"+r),o},v=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},g=function(e,t,n,r){var o=void 0;\"string\"===typeof e?(o=function(e){var t=e||\"/\",n=\"\",r=\"\",o=t.indexOf(\"#\");-1!==o&&(r=t.substr(o),t=t.substr(0,o));var i=t.indexOf(\"?\");return-1!==i&&(n=t.substr(i),t=t.substr(0,i)),{pathname:t,search:\"?\"===n?\"\":n,hash:\"#\"===r?\"\":r}}(e)).state=t:(void 0===(o=v({},e)).pathname&&(o.pathname=\"\"),o.search?\"?\"!==o.search.charAt(0)&&(o.search=\"?\"+o.search):o.search=\"\",o.hash?\"#\"!==o.hash.charAt(0)&&(o.hash=\"#\"+o.hash):o.hash=\"\",void 0!==t&&void 0===o.state&&(o.state=t));try{o.pathname=decodeURI(o.pathname)}catch(i){throw i instanceof URIError?new URIError('Pathname \"'+o.pathname+'\" could not be decoded. This is likely caused by an invalid percent-encoding.'):i}return n&&(o.key=n),r?o.pathname?\"/\"!==o.pathname.charAt(0)&&(o.pathname=s(o.pathname,r.pathname)):o.pathname=r.pathname:o.pathname||(o.pathname=\"/\"),o},b=function(e,t){return e.pathname===t.pathname&&e.search===t.search&&e.hash===t.hash&&e.key===t.key&&f(e.state,t.state)},_=function(){var e=null,t=[];return{setPrompt:function(t){return o()(null==e,\"A history supports only one prompt at a time\"),e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,r,i){if(null!=e){var a=\"function\"===typeof e?e(t,n):e;\"string\"===typeof a?\"function\"===typeof r?r(a,i):(o()(!1,\"A history needs a getUserConfirmation function in order to use a prompt message\"),i(!0)):i(!1!==a)}else i(!0)},appendListener:function(e){var n=!0,r=function(){n&&e.apply(void 0,arguments)};return t.push(r),function(){n=!1,t=t.filter(function(e){return e!==r})}},notifyListeners:function(){for(var e=arguments.length,n=Array(e),r=0;r<e;r++)n[r]=arguments[r];t.forEach(function(e){return e.apply(void 0,n)})}}},w=!(\"undefined\"===typeof window||!window.document||!window.document.createElement),k=function(e,t,n){return e.addEventListener?e.addEventListener(t,n,!1):e.attachEvent(\"on\"+t,n)},x=function(e,t,n){return e.removeEventListener?e.removeEventListener(t,n,!1):e.detachEvent(\"on\"+t,n)},S=function(e,t){return t(window.confirm(e))},T=\"function\"===typeof Symbol&&\"symbol\"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},O=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},C=function(){try{return window.history.state||{}}catch(e){return{}}},E=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};a()(w,\"Browser history needs a DOM\");var t=window.history,n=function(){var e=window.navigator.userAgent;return(-1===e.indexOf(\"Android 2.\")&&-1===e.indexOf(\"Android 4.0\")||-1===e.indexOf(\"Mobile Safari\")||-1!==e.indexOf(\"Chrome\")||-1!==e.indexOf(\"Windows Phone\"))&&window.history&&\"pushState\"in window.history}(),r=!(-1===window.navigator.userAgent.indexOf(\"Trident\")),i=e.forceRefresh,u=void 0!==i&&i,l=e.getUserConfirmation,s=void 0===l?S:l,c=e.keyLength,f=void 0===c?6:c,v=e.basename?m(d(e.basename)):\"\",b=function(e){var t=e||{},n=t.key,r=t.state,i=window.location,a=i.pathname+i.search+i.hash;return o()(!v||p(a,v),'You are attempting to use a basename on a page whose URL path does not begin with the basename. Expected path \"'+a+'\" to begin with \"'+v+'\".'),v&&(a=h(a,v)),g(a,r,n)},E=function(){return Math.random().toString(36).substr(2,f)},P=_(),M=function(e){O(V,e),V.length=t.length,P.notifyListeners(V.location,V.action)},j=function(e){(function(e){return void 0===e.state&&-1===navigator.userAgent.indexOf(\"CriOS\")})(e)||N(b(e.state))},D=function(){N(b(C()))},R=!1,N=function(e){R?(R=!1,M()):P.confirmTransitionTo(e,\"POP\",s,function(t){t?M({action:\"POP\",location:e}):F(e)})},F=function(e){var t=V.location,n=U.indexOf(t.key);-1===n&&(n=0);var r=U.indexOf(e.key);-1===r&&(r=0);var o=n-r;o&&(R=!0,L(o))},A=b(C()),U=[A.key],Y=function(e){return v+y(e)},L=function(e){t.go(e)},I=0,W=function(e){1===(I+=e)?(k(window,\"popstate\",j),r&&k(window,\"hashchange\",D)):0===I&&(x(window,\"popstate\",j),r&&x(window,\"hashchange\",D))},z=!1,V={length:t.length,action:\"POP\",location:A,createHref:Y,push:function(e,r){o()(!(\"object\"===(\"undefined\"===typeof e?\"undefined\":T(e))&&void 0!==e.state&&void 0!==r),\"You should avoid providing a 2nd state argument to push when the 1st argument is a location-like object that already has state; it is ignored\");var i=g(e,r,E(),V.location);P.confirmTransitionTo(i,\"PUSH\",s,function(e){if(e){var r=Y(i),a=i.key,l=i.state;if(n)if(t.pushState({key:a,state:l},null,r),u)window.location.href=r;else{var s=U.indexOf(V.location.key),c=U.slice(0,-1===s?0:s+1);c.push(i.key),U=c,M({action:\"PUSH\",location:i})}else o()(void 0===l,\"Browser history cannot push state in browsers that do not support HTML5 history\"),window.location.href=r}})},replace:function(e,r){o()(!(\"object\"===(\"undefined\"===typeof e?\"undefined\":T(e))&&void 0!==e.state&&void 0!==r),\"You should avoid providing a 2nd state argument to replace when the 1st argument is a location-like object that already has state; it is ignored\");var i=g(e,r,E(),V.location);P.confirmTransitionTo(i,\"REPLACE\",s,function(e){if(e){var r=Y(i),a=i.key,l=i.state;if(n)if(t.replaceState({key:a,state:l},null,r),u)window.location.replace(r);else{var s=U.indexOf(V.location.key);-1!==s&&(U[s]=i.key),M({action:\"REPLACE\",location:i})}else o()(void 0===l,\"Browser history cannot replace state in browsers that do not support HTML5 history\"),window.location.replace(r)}})},go:L,goBack:function(){return L(-1)},goForward:function(){return L(1)},block:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=P.setPrompt(e);return z||(W(1),z=!0),function(){return z&&(z=!1,W(-1)),t()}},listen:function(e){var t=P.appendListener(e);return W(1),function(){W(-1),t()}}};return V};Object.assign,\"function\"===typeof Symbol&&Symbol.iterator,Object.assign;n.d(t,\"a\",function(){return E}),n.d(t,\"b\",function(){return g}),n.d(t,\"c\",function(){return b})},function(e,t,n){\"use strict\";var r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)};function o(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}var i=function(){return(i=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e}).apply(this,arguments)};function a(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&\"function\"===typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&(n[r[o]]=e[r[o]])}return n}var u=n(0),l=n(22),s=n.n(l),c=function(e){return function(e){return!!e&&\"object\"===typeof e}(e)&&!function(e){var t=Object.prototype.toString.call(e);return\"[object RegExp]\"===t||\"[object Date]\"===t||function(e){return e.$$typeof===f}(e)}(e)};var f=\"function\"===typeof Symbol&&Symbol.for?Symbol.for(\"react.element\"):60103;function d(e,t){return!1!==t.clone&&t.isMergeableObject(e)?h((n=e,Array.isArray(n)?[]:{}),e,t):e;var n}function p(e,t,n){return e.concat(t).map(function(e){return d(e,n)})}function h(e,t,n){(n=n||{}).arrayMerge=n.arrayMerge||p,n.isMergeableObject=n.isMergeableObject||c;var r=Array.isArray(t);return r===Array.isArray(e)?r?n.arrayMerge(e,t,n):function(e,t,n){var r={};return n.isMergeableObject(e)&&Object.keys(e).forEach(function(t){r[t]=d(e[t],n)}),Object.keys(t).forEach(function(o){n.isMergeableObject(t[o])&&e[o]?r[o]=h(e[o],t[o],n):r[o]=d(t[o],n)}),r}(e,t,n):d(t,n)}h.all=function(e,t){if(!Array.isArray(e))throw new Error(\"first argument should be an array\");return e.reduce(function(e,n){return h(e,n,t)},{})};var m=h,y=n(27),v=n.n(y),g=n(36),b=n.n(g);var _=function(){this.__data__=[],this.size=0};var w=function(e,t){return e===t||e!==e&&t!==t};var k=function(e,t){for(var n=e.length;n--;)if(w(e[n][0],t))return n;return-1},x=Array.prototype.splice;var S=function(e){var t=this.__data__,n=k(t,e);return!(n<0)&&(n==t.length-1?t.pop():x.call(t,n,1),--this.size,!0)};var T=function(e){var t=this.__data__,n=k(t,e);return n<0?void 0:t[n][1]};var O=function(e){return k(this.__data__,e)>-1};var C=function(e,t){var n=this.__data__,r=k(n,e);return r<0?(++this.size,n.push([e,t])):n[r][1]=t,this};function E(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}E.prototype.clear=_,E.prototype.delete=S,E.prototype.get=T,E.prototype.has=O,E.prototype.set=C;var P=E;var M=function(){this.__data__=new P,this.size=0};var j=function(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n};var D=function(e){return this.__data__.get(e)};var R=function(e){return this.__data__.has(e)},N=n(6),F=N.a.Symbol,A=Object.prototype,U=A.hasOwnProperty,Y=A.toString,L=F?F.toStringTag:void 0;var I=function(e){var t=U.call(e,L),n=e[L];try{e[L]=void 0;var r=!0}catch(i){}var o=Y.call(e);return r&&(t?e[L]=n:delete e[L]),o},W=Object.prototype.toString;var z=function(e){return W.call(e)},V=\"[object Null]\",H=\"[object Undefined]\",B=F?F.toStringTag:void 0;var $=function(e){return null==e?void 0===e?H:V:B&&B in Object(e)?I(e):z(e)};var q=function(e){var t=typeof e;return null!=e&&(\"object\"==t||\"function\"==t)},G=\"[object AsyncFunction]\",Q=\"[object Function]\",Z=\"[object GeneratorFunction]\",K=\"[object Proxy]\";var X=function(e){if(!q(e))return!1;var t=$(e);return t==Q||t==Z||t==G||t==K},J=N.a[\"__core-js_shared__\"],ee=function(){var e=/[^.]+$/.exec(J&&J.keys&&J.keys.IE_PROTO||\"\");return e?\"Symbol(src)_1.\"+e:\"\"}();var te=function(e){return!!ee&&ee in e},ne=Function.prototype.toString;var re=function(e){if(null!=e){try{return ne.call(e)}catch(t){}try{return e+\"\"}catch(t){}}return\"\"},oe=/^\\[object .+?Constructor\\]$/,ie=Function.prototype,ae=Object.prototype,ue=ie.toString,le=ae.hasOwnProperty,se=RegExp(\"^\"+ue.call(le).replace(/[\\\\^$.*+?()[\\]{}|]/g,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\");var ce=function(e){return!(!q(e)||te(e))&&(X(e)?se:oe).test(re(e))};var fe=function(e,t){return null==e?void 0:e[t]};var de=function(e,t){var n=fe(e,t);return ce(n)?n:void 0},pe=de(N.a,\"Map\"),he=de(Object,\"create\");var me=function(){this.__data__=he?he(null):{},this.size=0};var ye=function(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t},ve=\"__lodash_hash_undefined__\",ge=Object.prototype.hasOwnProperty;var be=function(e){var t=this.__data__;if(he){var n=t[e];return n===ve?void 0:n}return ge.call(t,e)?t[e]:void 0},_e=Object.prototype.hasOwnProperty;var we=function(e){var t=this.__data__;return he?void 0!==t[e]:_e.call(t,e)},ke=\"__lodash_hash_undefined__\";var xe=function(e,t){var n=this.__data__;return this.size+=this.has(e)?0:1,n[e]=he&&void 0===t?ke:t,this};function Se(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}Se.prototype.clear=me,Se.prototype.delete=ye,Se.prototype.get=be,Se.prototype.has=we,Se.prototype.set=xe;var Te=Se;var Oe=function(){this.size=0,this.__data__={hash:new Te,map:new(pe||P),string:new Te}};var Ce=function(e){var t=typeof e;return\"string\"==t||\"number\"==t||\"symbol\"==t||\"boolean\"==t?\"__proto__\"!==e:null===e};var Ee=function(e,t){var n=e.__data__;return Ce(t)?n[\"string\"==typeof t?\"string\":\"hash\"]:n.map};var Pe=function(e){var t=Ee(this,e).delete(e);return this.size-=t?1:0,t};var Me=function(e){return Ee(this,e).get(e)};var je=function(e){return Ee(this,e).has(e)};var De=function(e,t){var n=Ee(this,e),r=n.size;return n.set(e,t),this.size+=n.size==r?0:1,this};function Re(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}Re.prototype.clear=Oe,Re.prototype.delete=Pe,Re.prototype.get=Me,Re.prototype.has=je,Re.prototype.set=De;var Ne=Re,Fe=200;var Ae=function(e,t){var n=this.__data__;if(n instanceof P){var r=n.__data__;if(!pe||r.length<Fe-1)return r.push([e,t]),this.size=++n.size,this;n=this.__data__=new Ne(r)}return n.set(e,t),this.size=n.size,this};function Ue(e){var t=this.__data__=new P(e);this.size=t.size}Ue.prototype.clear=M,Ue.prototype.delete=j,Ue.prototype.get=D,Ue.prototype.has=R,Ue.prototype.set=Ae;var Ye=Ue;var Le=function(e,t){for(var n=-1,r=null==e?0:e.length;++n<r&&!1!==t(e[n],n,e););return e},Ie=function(){try{var e=de(Object,\"defineProperty\");return e({},\"\",{}),e}catch(t){}}();var We=function(e,t,n){\"__proto__\"==t&&Ie?Ie(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0}):e[t]=n},ze=Object.prototype.hasOwnProperty;var Ve=function(e,t,n){var r=e[t];ze.call(e,t)&&w(r,n)&&(void 0!==n||t in e)||We(e,t,n)};var He=function(e,t,n,r){var o=!n;n||(n={});for(var i=-1,a=t.length;++i<a;){var u=t[i],l=r?r(n[u],e[u],u,n,e):void 0;void 0===l&&(l=e[u]),o?We(n,u,l):Ve(n,u,l)}return n};var Be=function(e,t){for(var n=-1,r=Array(e);++n<e;)r[n]=t(n);return r};var $e=function(e){return null!=e&&\"object\"==typeof e},qe=\"[object Arguments]\";var Ge=function(e){return $e(e)&&$(e)==qe},Qe=Object.prototype,Ze=Qe.hasOwnProperty,Ke=Qe.propertyIsEnumerable,Xe=Ge(function(){return arguments}())?Ge:function(e){return $e(e)&&Ze.call(e,\"callee\")&&!Ke.call(e,\"callee\")},Je=Array.isArray,et=n(21),tt=9007199254740991,nt=/^(?:0|[1-9]\\d*)$/;var rt=function(e,t){var n=typeof e;return!!(t=null==t?tt:t)&&(\"number\"==n||\"symbol\"!=n&&nt.test(e))&&e>-1&&e%1==0&&e<t},ot=9007199254740991;var it=function(e){return\"number\"==typeof e&&e>-1&&e%1==0&&e<=ot},at={};at[\"[object Float32Array]\"]=at[\"[object Float64Array]\"]=at[\"[object Int8Array]\"]=at[\"[object Int16Array]\"]=at[\"[object Int32Array]\"]=at[\"[object Uint8Array]\"]=at[\"[object Uint8ClampedArray]\"]=at[\"[object Uint16Array]\"]=at[\"[object Uint32Array]\"]=!0,at[\"[object Arguments]\"]=at[\"[object Array]\"]=at[\"[object ArrayBuffer]\"]=at[\"[object Boolean]\"]=at[\"[object DataView]\"]=at[\"[object Date]\"]=at[\"[object Error]\"]=at[\"[object Function]\"]=at[\"[object Map]\"]=at[\"[object Number]\"]=at[\"[object Object]\"]=at[\"[object RegExp]\"]=at[\"[object Set]\"]=at[\"[object String]\"]=at[\"[object WeakMap]\"]=!1;var ut=function(e){return $e(e)&&it(e.length)&&!!at[$(e)]};var lt=function(e){return function(t){return e(t)}},st=n(14),ct=st.a&&st.a.isTypedArray,ft=ct?lt(ct):ut,dt=Object.prototype.hasOwnProperty;var pt=function(e,t){var n=Je(e),r=!n&&Xe(e),o=!n&&!r&&Object(et.a)(e),i=!n&&!r&&!o&&ft(e),a=n||r||o||i,u=a?Be(e.length,String):[],l=u.length;for(var s in e)!t&&!dt.call(e,s)||a&&(\"length\"==s||o&&(\"offset\"==s||\"parent\"==s)||i&&(\"buffer\"==s||\"byteLength\"==s||\"byteOffset\"==s)||rt(s,l))||u.push(s);return u},ht=Object.prototype;var mt=function(e){var t=e&&e.constructor;return e===(\"function\"==typeof t&&t.prototype||ht)};var yt=function(e,t){return function(n){return e(t(n))}},vt=yt(Object.keys,Object),gt=Object.prototype.hasOwnProperty;var bt=function(e){if(!mt(e))return vt(e);var t=[];for(var n in Object(e))gt.call(e,n)&&\"constructor\"!=n&&t.push(n);return t};var _t=function(e){return null!=e&&it(e.length)&&!X(e)};var wt=function(e){return _t(e)?pt(e):bt(e)};var kt=function(e,t){return e&&He(t,wt(t),e)};var xt=function(e){var t=[];if(null!=e)for(var n in Object(e))t.push(n);return t},St=Object.prototype.hasOwnProperty;var Tt=function(e){if(!q(e))return xt(e);var t=mt(e),n=[];for(var r in e)(\"constructor\"!=r||!t&&St.call(e,r))&&n.push(r);return n};var Ot=function(e){return _t(e)?pt(e,!0):Tt(e)};var Ct=function(e,t){return e&&He(t,Ot(t),e)},Et=n(38);var Pt=function(e,t){var n=-1,r=e.length;for(t||(t=Array(r));++n<r;)t[n]=e[n];return t};var Mt=function(e,t){for(var n=-1,r=null==e?0:e.length,o=0,i=[];++n<r;){var a=e[n];t(a,n,e)&&(i[o++]=a)}return i};var jt=function(){return[]},Dt=Object.prototype.propertyIsEnumerable,Rt=Object.getOwnPropertySymbols,Nt=Rt?function(e){return null==e?[]:(e=Object(e),Mt(Rt(e),function(t){return Dt.call(e,t)}))}:jt;var Ft=function(e,t){return He(e,Nt(e),t)};var At=function(e,t){for(var n=-1,r=t.length,o=e.length;++n<r;)e[o+n]=t[n];return e},Ut=yt(Object.getPrototypeOf,Object),Yt=Object.getOwnPropertySymbols?function(e){for(var t=[];e;)At(t,Nt(e)),e=Ut(e);return t}:jt;var Lt=function(e,t){return He(e,Yt(e),t)};var It=function(e,t,n){var r=t(e);return Je(e)?r:At(r,n(e))};var Wt=function(e){return It(e,wt,Nt)};var zt=function(e){return It(e,Ot,Yt)},Vt=de(N.a,\"DataView\"),Ht=de(N.a,\"Promise\"),Bt=de(N.a,\"Set\"),$t=de(N.a,\"WeakMap\"),qt=re(Vt),Gt=re(pe),Qt=re(Ht),Zt=re(Bt),Kt=re($t),Xt=$;(Vt&&\"[object DataView]\"!=Xt(new Vt(new ArrayBuffer(1)))||pe&&\"[object Map]\"!=Xt(new pe)||Ht&&\"[object Promise]\"!=Xt(Ht.resolve())||Bt&&\"[object Set]\"!=Xt(new Bt)||$t&&\"[object WeakMap]\"!=Xt(new $t))&&(Xt=function(e){var t=$(e),n=\"[object Object]\"==t?e.constructor:void 0,r=n?re(n):\"\";if(r)switch(r){case qt:return\"[object DataView]\";case Gt:return\"[object Map]\";case Qt:return\"[object Promise]\";case Zt:return\"[object Set]\";case Kt:return\"[object WeakMap]\"}return t});var Jt=Xt,en=Object.prototype.hasOwnProperty;var tn=function(e){var t=e.length,n=new e.constructor(t);return t&&\"string\"==typeof e[0]&&en.call(e,\"index\")&&(n.index=e.index,n.input=e.input),n},nn=N.a.Uint8Array;var rn=function(e){var t=new e.constructor(e.byteLength);return new nn(t).set(new nn(e)),t};var on=function(e,t){var n=t?rn(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.byteLength)},an=/\\w*$/;var un=function(e){var t=new e.constructor(e.source,an.exec(e));return t.lastIndex=e.lastIndex,t},ln=F?F.prototype:void 0,sn=ln?ln.valueOf:void 0;var cn=function(e){return sn?Object(sn.call(e)):{}};var fn=function(e,t){var n=t?rn(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.length)},dn=\"[object Boolean]\",pn=\"[object Date]\",hn=\"[object Map]\",mn=\"[object Number]\",yn=\"[object RegExp]\",vn=\"[object Set]\",gn=\"[object String]\",bn=\"[object Symbol]\",_n=\"[object ArrayBuffer]\",wn=\"[object DataView]\",kn=\"[object Float32Array]\",xn=\"[object Float64Array]\",Sn=\"[object Int8Array]\",Tn=\"[object Int16Array]\",On=\"[object Int32Array]\",Cn=\"[object Uint8Array]\",En=\"[object Uint8ClampedArray]\",Pn=\"[object Uint16Array]\",Mn=\"[object Uint32Array]\";var jn=function(e,t,n){var r=e.constructor;switch(t){case _n:return rn(e);case dn:case pn:return new r(+e);case wn:return on(e,n);case kn:case xn:case Sn:case Tn:case On:case Cn:case En:case Pn:case Mn:return fn(e,n);case hn:return new r;case mn:case gn:return new r(e);case yn:return un(e);case vn:return new r;case bn:return cn(e)}},Dn=Object.create,Rn=function(){function e(){}return function(t){if(!q(t))return{};if(Dn)return Dn(t);e.prototype=t;var n=new e;return e.prototype=void 0,n}}();var Nn=function(e){return\"function\"!=typeof e.constructor||mt(e)?{}:Rn(Ut(e))},Fn=\"[object Map]\";var An=function(e){return $e(e)&&Jt(e)==Fn},Un=st.a&&st.a.isMap,Yn=Un?lt(Un):An,Ln=\"[object Set]\";var In=function(e){return $e(e)&&Jt(e)==Ln},Wn=st.a&&st.a.isSet,zn=Wn?lt(Wn):In,Vn=1,Hn=2,Bn=4,$n=\"[object Arguments]\",qn=\"[object Function]\",Gn=\"[object GeneratorFunction]\",Qn=\"[object Object]\",Zn={};Zn[$n]=Zn[\"[object Array]\"]=Zn[\"[object ArrayBuffer]\"]=Zn[\"[object DataView]\"]=Zn[\"[object Boolean]\"]=Zn[\"[object Date]\"]=Zn[\"[object Float32Array]\"]=Zn[\"[object Float64Array]\"]=Zn[\"[object Int8Array]\"]=Zn[\"[object Int16Array]\"]=Zn[\"[object Int32Array]\"]=Zn[\"[object Map]\"]=Zn[\"[object Number]\"]=Zn[Qn]=Zn[\"[object RegExp]\"]=Zn[\"[object Set]\"]=Zn[\"[object String]\"]=Zn[\"[object Symbol]\"]=Zn[\"[object Uint8Array]\"]=Zn[\"[object Uint8ClampedArray]\"]=Zn[\"[object Uint16Array]\"]=Zn[\"[object Uint32Array]\"]=!0,Zn[\"[object Error]\"]=Zn[qn]=Zn[\"[object WeakMap]\"]=!1;var Kn=function e(t,n,r,o,i,a){var u,l=n&Vn,s=n&Hn,c=n&Bn;if(r&&(u=i?r(t,o,i,a):r(t)),void 0!==u)return u;if(!q(t))return t;var f=Je(t);if(f){if(u=tn(t),!l)return Pt(t,u)}else{var d=Jt(t),p=d==qn||d==Gn;if(Object(et.a)(t))return Object(Et.a)(t,l);if(d==Qn||d==$n||p&&!i){if(u=s||p?{}:Nn(t),!l)return s?Lt(t,Ct(u,t)):Ft(t,kt(u,t))}else{if(!Zn[d])return i?t:{};u=jn(t,d,l)}}a||(a=new Ye);var h=a.get(t);if(h)return h;if(a.set(t,u),zn(t))return t.forEach(function(o){u.add(e(o,n,r,o,t,a))}),u;if(Yn(t))return t.forEach(function(o,i){u.set(i,e(o,n,r,i,t,a))}),u;var m=c?s?zt:Wt:s?keysIn:wt,y=f?void 0:m(t);return Le(y||t,function(o,i){y&&(o=t[i=o]),Ve(u,i,e(o,n,r,i,t,a))}),u},Xn=1,Jn=4;var er=function(e){return Kn(e,Xn|Jn)};var tr=function(e,t){for(var n=-1,r=null==e?0:e.length,o=Array(r);++n<r;)o[n]=t(e[n],n,e);return o},nr=\"[object Symbol]\";var rr=function(e){return\"symbol\"==typeof e||$e(e)&&$(e)==nr},or=\"Expected a function\";function ir(e,t){if(\"function\"!=typeof e||null!=t&&\"function\"!=typeof t)throw new TypeError(or);var n=function n(){var r=arguments,o=t?t.apply(this,r):r[0],i=n.cache;if(i.has(o))return i.get(o);var a=e.apply(this,r);return n.cache=i.set(o,a)||i,a};return n.cache=new(ir.Cache||Ne),n}ir.Cache=Ne;var ar=ir,ur=500;var lr=/[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g,sr=/\\\\(\\\\)?/g,cr=function(e){var t=ar(e,function(e){return n.size===ur&&n.clear(),e}),n=t.cache;return t}(function(e){var t=[];return 46===e.charCodeAt(0)&&t.push(\"\"),e.replace(lr,function(e,n,r,o){t.push(r?o.replace(sr,\"$1\"):n||e)}),t}),fr=1/0;var dr=function(e){if(\"string\"==typeof e||rr(e))return e;var t=e+\"\";return\"0\"==t&&1/e==-fr?\"-0\":t},pr=1/0,hr=F?F.prototype:void 0,mr=hr?hr.toString:void 0;var yr=function e(t){if(\"string\"==typeof t)return t;if(Je(t))return tr(t,e)+\"\";if(rr(t))return mr?mr.call(t):\"\";var n=t+\"\";return\"0\"==n&&1/t==-pr?\"-0\":n};var vr=function(e){return null==e?\"\":yr(e)};var gr,br=function(e){return Je(e)?tr(e,dr):rr(e)?[e]:Pt(cr(vr(e)))};n.d(t,\"d\",function(){return Rr}),n.d(t,\"b\",function(){return Fr}),n.d(t,\"c\",function(){return Ar}),n.d(t,\"a\",function(){return Wr});var _r=(gr=b()({})).Provider,wr=gr.Consumer;function kr(e){var t=function(t){return Object(u.createElement)(wr,null,function(n){return Object(u.createElement)(e,i({},t,{formik:n}))})},n=e.displayName||e.name||e.constructor&&e.constructor.name||\"Component\";return t.WrappedComponent=e,t.displayName=\"FormikConnect(\"+n+\")\",v()(t,e)}function xr(e,t,n,r){void 0===r&&(r=0);for(var o=br(t);e&&r<o.length;)e=e[o[r++]];return void 0===e?n:e}function Sr(e,t,n){for(var r={},o=r,a=0,u=br(t);a<u.length-1;a++){var l=u[a],s=xr(e,u.slice(0,a+1));if(o[l])o=o[l];else if(s)o=o[l]=er(s);else{var c=u[a+1];o=o[l]=Er(c)&&Number(c)>=0?[]:{}}}if((0===a?e:o)[u[a]]===n)return e;void 0===n?delete o[u[a]]:o[u[a]]=n;var f=i({},e,r);return 0===a&&void 0===n&&delete f[u[a]],f}function Tr(e,t,n,r){void 0===n&&(n=new WeakMap),void 0===r&&(r={});for(var o=0,i=Object.keys(e);o<i.length;o++){var a=i[o],u=e[a];Cr(u)?n.get(u)||(n.set(u,!0),r[a]=Array.isArray(u)?[]:{},Tr(u,t,n,r[a])):r[a]=t}return r}var Or=function(e){return\"function\"===typeof e},Cr=function(e){return null!==e&&\"object\"===typeof e},Er=function(e){return String(Math.floor(Number(e)))===e},Pr=function(e){return\"[object String]\"===Object.prototype.toString.call(e)},Mr=function(e){return e!==e},jr=function(e){return 0===u.Children.count(e)},Dr=function(e){return Cr(e)&&Or(e.then)};var Rr=function(e){function t(t){var n=e.call(this,t)||this;return n.hcCache={},n.hbCache={},n.registerField=function(e,t){n.fields[e]=t},n.unregisterField=function(e){delete n.fields[e]},n.setErrors=function(e){n.setState({errors:e})},n.setTouched=function(e){n.setState({touched:e},function(){n.props.validateOnBlur&&n.runValidations(n.state.values)})},n.setValues=function(e){n.setState({values:e},function(){n.props.validateOnChange&&n.runValidations(e)})},n.setStatus=function(e){n.setState({status:e})},n.setError=function(e){n.setState({error:e})},n.setSubmitting=function(e){n.didMount&&n.setState({isSubmitting:e})},n.validateField=function(e){return n.setState({isValidating:!0}),n.runSingleFieldLevelValidation(e,xr(n.state.values,e)).then(function(t){return n.didMount&&n.setState({errors:Sr(n.state.errors,e,t),isValidating:!1}),t})},n.runSingleFieldLevelValidation=function(e,t){return new Promise(function(r){return r(n.fields[e].props.validate(t))}).then(function(e){return e},function(e){return e})},n.runValidationSchema=function(e){return new Promise(function(t){var r=n.props.validationSchema,o=Or(r)?r():r;(function(e,t,n,r){void 0===n&&(n=!1);void 0===r&&(r={});var o={};for(var i in e)if(e.hasOwnProperty(i)){var a=String(i);o[a]=\"\"!==e[a]?e[a]:void 0}return t[n?\"validateSync\":\"validate\"](o,{abortEarly:!1,context:r})})(e,o).then(function(){t({})},function(e){t(function(e){var t={};if(0===e.inner.length)return Sr(t,e.path,e.message);for(var n=0,r=e.inner;n<r.length;n++){var o=r[n];t[o.path]||(t=Sr(t,o.path,o.message))}return t}(e))})})},n.runValidations=function(e){void 0===e&&(e=n.state.values),n.validator&&n.validator();var t=function(e){var t=!1;return[new Promise(function(n,r){e.then(function(e){return t?r({isCanceled:!0}):n(e)},function(e){return r(t?{isCanceled:!0}:e)})}),function(){t=!0}]}(Promise.all([n.runFieldLevelValidations(e),n.props.validationSchema?n.runValidationSchema(e):{},n.props.validate?n.runValidateHandler(e):{}]).then(function(e){var t=e[0],n=e[1],r=e[2];return m.all([t,n,r],{arrayMerge:Nr})})),r=t[0],o=t[1];return n.validator=o,r.then(function(e){return n.didMount&&n.setState(function(t){return s()(t.errors,e)?null:{errors:e}}),e}).catch(function(e){return e})},n.handleChange=function(e){var t=function(e,t){var r,o=t,a=e;if(!Pr(e)){e.persist&&e.persist();var u=e.target,l=u.type,s=u.name,c=u.id,f=u.value,d=u.checked;u.outerHTML;o=t||(s||c),a=/number|range/.test(l)?(r=parseFloat(f),Mr(r)?\"\":r):/checkbox/.test(l)?d:f}o&&n.setState(function(e){return i({},e,{values:Sr(e.values,o,a)})},function(){n.props.validateOnChange&&n.runValidations(Sr(n.state.values,o,a))})};if(Pr(e))return Or(n.hcCache[e])?n.hcCache[e]:n.hcCache[e]=function(n){return t(n,e)};t(e)},n.setFieldValue=function(e,t,r){void 0===r&&(r=!0),n.didMount&&n.setState(function(n){return i({},n,{values:Sr(n.values,e,t)})},function(){n.props.validateOnChange&&r&&n.runValidations(n.state.values)})},n.handleSubmit=function(e){e&&e.preventDefault&&e.preventDefault(),n.submitForm()},n.submitForm=function(){return n.setState(function(e){return{touched:Tr(e.values,!0),isSubmitting:!0,isValidating:!0,submitCount:e.submitCount+1}}),n.runValidations(n.state.values).then(function(e){n.didMount&&n.setState({isValidating:!1}),0===Object.keys(e).length?n.executeSubmit():n.didMount&&n.setState({isSubmitting:!1})})},n.executeSubmit=function(){n.props.onSubmit(n.state.values,n.getFormikActions())},n.handleBlur=function(e){var t=function(e,t){e.persist&&e.persist();var r=e.target,o=r.name,i=r.id,a=(r.outerHTML,t||(o||i));n.setState(function(e){return{touched:Sr(e.touched,a,!0)}}),n.props.validateOnBlur&&n.runValidations(n.state.values)};if(Pr(e))return Or(n.hbCache[e])?n.hbCache[e]:n.hbCache[e]=function(n){return t(n,e)};t(e)},n.setFieldTouched=function(e,t,r){void 0===t&&(t=!0),void 0===r&&(r=!0),n.setState(function(n){return i({},n,{touched:Sr(n.touched,e,t)})},function(){n.props.validateOnBlur&&r&&n.runValidations(n.state.values)})},n.setFieldError=function(e,t){n.setState(function(n){return i({},n,{errors:Sr(n.errors,e,t)})})},n.resetForm=function(e){var t=e||n.props.initialValues;n.initialValues=t,n.setState({isSubmitting:!1,isValidating:!1,errors:{},touched:{},error:void 0,status:n.props.initialStatus,values:t,submitCount:0})},n.handleReset=function(){if(n.props.onReset){var e=n.props.onReset(n.state.values,n.getFormikActions());Dr(e)?e.then(n.resetForm):n.resetForm()}else n.resetForm()},n.setFormikState=function(e,t){return n.setState(e,t)},n.validateForm=function(e){return n.setState({isValidating:!0}),n.runValidations(e).then(function(e){return n.didMount&&n.setState({isValidating:!1}),e})},n.getFormikActions=function(){return{resetForm:n.resetForm,submitForm:n.submitForm,validateForm:n.validateForm,validateField:n.validateField,setError:n.setError,setErrors:n.setErrors,setFieldError:n.setFieldError,setFieldTouched:n.setFieldTouched,setFieldValue:n.setFieldValue,setStatus:n.setStatus,setSubmitting:n.setSubmitting,setTouched:n.setTouched,setValues:n.setValues,setFormikState:n.setFormikState}},n.getFormikComputedProps=function(){var e=n.props.isInitialValid,t=!s()(n.initialValues,n.state.values);return{dirty:t,isValid:t?n.state.errors&&0===Object.keys(n.state.errors).length:!1!==e&&Or(e)?e(n.props):e,initialValues:n.initialValues}},n.getFormikBag=function(){return i({},n.state,n.getFormikActions(),n.getFormikComputedProps(),{registerField:n.registerField,unregisterField:n.unregisterField,handleBlur:n.handleBlur,handleChange:n.handleChange,handleReset:n.handleReset,handleSubmit:n.handleSubmit,validateOnChange:n.props.validateOnChange,validateOnBlur:n.props.validateOnBlur})},n.getFormikContext=function(){return i({},n.getFormikBag(),{validationSchema:n.props.validationSchema,validate:n.props.validate,initialValues:n.initialValues})},n.state={values:t.initialValues||{},errors:{},touched:{},isSubmitting:!1,isValidating:!1,submitCount:0,status:t.initialStatus},n.didMount=!1,n.fields={},n.initialValues=t.initialValues||{},n}return o(t,e),t.prototype.componentDidMount=function(){this.didMount=!0},t.prototype.componentWillUnmount=function(){this.didMount=!1,this.validator&&this.validator()},t.prototype.componentDidUpdate=function(e){this.props.enableReinitialize&&!s()(e.initialValues,this.props.initialValues)&&(this.initialValues=this.props.initialValues,this.resetForm(this.props.initialValues))},t.prototype.runFieldLevelValidations=function(e){var t=this,n=Object.keys(this.fields).filter(function(e){return t.fields&&t.fields[e]&&t.fields[e].props.validate&&Or(t.fields[e].props.validate)}),r=n.length>0?n.map(function(n){return t.runSingleFieldLevelValidation(n,xr(e,n))}):[Promise.resolve(\"DO_NOT_DELETE_YOU_WILL_BE_FIRED\")];return Promise.all(r).then(function(e){return e.reduce(function(e,t,r){return\"DO_NOT_DELETE_YOU_WILL_BE_FIRED\"===t?e:(t&&(e=Sr(e,n[r],t)),e)},{})})},t.prototype.runValidateHandler=function(e){var t=this;return new Promise(function(n){var r=t.props.validate(e);void 0===r?n({}):Dr(r)?r.then(function(){n({})},function(e){n(e)}):n(r)})},t.prototype.render=function(){var e=this.props,t=e.component,n=e.render,r=e.children,o=this.getFormikBag(),i=this.getFormikContext();return Object(u.createElement)(_r,{value:i},t?Object(u.createElement)(t,o):n?n(o):r?Or(r)?r(o):jr(r)?null:u.Children.only(r):null)},t.defaultProps={validateOnChange:!0,validateOnBlur:!0,isInitialValid:!1,enableReinitialize:!1},t}(u.Component);function Nr(e,t,n){var r=e.slice();return t.forEach(function(t,o){if(\"undefined\"===typeof r[o]){var i=!1!==n.clone&&n.isMergeableObject(t);r[o]=i?m(Array.isArray(t)?[]:{},t,n):t}else n.isMergeableObject(t)?r[o]=m(e[o],t,n):-1===e.indexOf(t)&&r.push(t)}),r}var Fr=kr(function(e){function t(t){var n=e.call(this,t)||this;t.render,t.children,t.component;return n}return o(t,e),t.prototype.componentDidMount=function(){this.props.formik.registerField(this.props.name,this)},t.prototype.componentDidUpdate=function(e){this.props.name!==e.name&&(this.props.formik.unregisterField(e.name),this.props.formik.registerField(this.props.name,this)),this.props.validate!==e.validate&&this.props.formik.registerField(this.props.name,this)},t.prototype.componentWillUnmount=function(){this.props.formik.unregisterField(this.props.name)},t.prototype.render=function(){var e=this.props,t=(e.validate,e.name),n=e.render,r=e.children,o=e.component,l=void 0===o?\"input\":o,s=e.formik,c=a(e,[\"validate\",\"name\",\"render\",\"children\",\"component\",\"formik\"]),f=(s.validate,s.validationSchema,a(s,[\"validate\",\"validationSchema\"])),d={value:\"radio\"===c.type||\"checkbox\"===c.type?c.value:xr(s.values,t),name:t,onChange:s.handleChange,onBlur:s.handleBlur},p={field:d,form:f};if(n)return n(p);if(Or(r))return r(p);if(\"string\"===typeof l){var h=c.innerRef,m=a(c,[\"innerRef\"]);return Object(u.createElement)(l,i({ref:h},d,m,{children:r}))}return Object(u.createElement)(l,i({},p,c,{children:r}))},t}(u.Component)),Ar=kr(function(e){var t=e.formik,n=t.handleReset,r=t.handleSubmit,o=a(e,[\"formik\"]);return Object(u.createElement)(\"form\",i({onReset:n,onSubmit:r},o))});Ar.displayName=\"Form\";var Ur=function(e,t,n){var r=(e||[]).slice(),o=r[t];return r.splice(t,1),r.splice(n,0,o),r},Yr=function(e,t,n){var r=(e||[]).slice(),o=r[t];return r[t]=r[n],r[n]=o,r},Lr=function(e,t,n){var r=(e||[]).slice();return r.splice(t,0,n),r},Ir=function(e,t,n){var r=(e||[]).slice();return r[t]=n,r},Wr=(u.Component,u.Component,kr(function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return o(t,e),t.prototype.shouldComponentUpdate=function(e){return xr(this.props.formik.errors,this.props.name)!==xr(e.formik.errors,this.props.name)||xr(this.props.formik.touched,this.props.name)!==xr(e.formik.touched,this.props.name)||Object.keys(this.props).length!==Object.keys(e).length},t.prototype.render=function(){var e=this.props,t=e.component,n=e.formik,r=e.render,o=e.children,i=e.name,l=a(e,[\"component\",\"formik\",\"render\",\"children\",\"name\"]),s=xr(n.touched,i),c=xr(n.errors,i);return s&&c?r?Or(r)?r(c):null:o?Or(o)?o(c):null:t?Object(u.createElement)(t,l,c):c:null},t}(u.Component)))},function(e,t,n){(function(e){e.exports=function(){\"use strict\";var t,n;function r(){return t.apply(null,arguments)}function o(e){return e instanceof Array||\"[object Array]\"===Object.prototype.toString.call(e)}function i(e){return null!=e&&\"[object Object]\"===Object.prototype.toString.call(e)}function a(e){return void 0===e}function u(e){return\"number\"===typeof e||\"[object Number]\"===Object.prototype.toString.call(e)}function l(e){return e instanceof Date||\"[object Date]\"===Object.prototype.toString.call(e)}function s(e,t){var n,r=[];for(n=0;n<e.length;++n)r.push(t(e[n],n));return r}function c(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function f(e,t){for(var n in t)c(t,n)&&(e[n]=t[n]);return c(t,\"toString\")&&(e.toString=t.toString),c(t,\"valueOf\")&&(e.valueOf=t.valueOf),e}function d(e,t,n,r){return Pt(e,t,n,r,!0).utc()}function p(e){return null==e._pf&&(e._pf={empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],meridiem:null,rfc2822:!1,weekdayMismatch:!1}),e._pf}function h(e){if(null==e._isValid){var t=p(e),r=n.call(t.parsedDateParts,function(e){return null!=e}),o=!isNaN(e._d.getTime())&&t.overflow<0&&!t.empty&&!t.invalidMonth&&!t.invalidWeekday&&!t.weekdayMismatch&&!t.nullInput&&!t.invalidFormat&&!t.userInvalidated&&(!t.meridiem||t.meridiem&&r);if(e._strict&&(o=o&&0===t.charsLeftOver&&0===t.unusedTokens.length&&void 0===t.bigHour),null!=Object.isFrozen&&Object.isFrozen(e))return o;e._isValid=o}return e._isValid}function m(e){var t=d(NaN);return null!=e?f(p(t),e):p(t).userInvalidated=!0,t}n=Array.prototype.some?Array.prototype.some:function(e){for(var t=Object(this),n=t.length>>>0,r=0;r<n;r++)if(r in t&&e.call(this,t[r],r,t))return!0;return!1};var y=r.momentProperties=[];function v(e,t){var n,r,o;if(a(t._isAMomentObject)||(e._isAMomentObject=t._isAMomentObject),a(t._i)||(e._i=t._i),a(t._f)||(e._f=t._f),a(t._l)||(e._l=t._l),a(t._strict)||(e._strict=t._strict),a(t._tzm)||(e._tzm=t._tzm),a(t._isUTC)||(e._isUTC=t._isUTC),a(t._offset)||(e._offset=t._offset),a(t._pf)||(e._pf=p(t)),a(t._locale)||(e._locale=t._locale),y.length>0)for(n=0;n<y.length;n++)r=y[n],a(o=t[r])||(e[r]=o);return e}var g=!1;function b(e){v(this,e),this._d=new Date(null!=e._d?e._d.getTime():NaN),this.isValid()||(this._d=new Date(NaN)),!1===g&&(g=!0,r.updateOffset(this),g=!1)}function _(e){return e instanceof b||null!=e&&null!=e._isAMomentObject}function w(e){return e<0?Math.ceil(e)||0:Math.floor(e)}function k(e){var t=+e,n=0;return 0!==t&&isFinite(t)&&(n=w(t)),n}function x(e,t,n){var r,o=Math.min(e.length,t.length),i=Math.abs(e.length-t.length),a=0;for(r=0;r<o;r++)(n&&e[r]!==t[r]||!n&&k(e[r])!==k(t[r]))&&a++;return a+i}function S(e){!1===r.suppressDeprecationWarnings&&\"undefined\"!==typeof console&&console.warn&&console.warn(\"Deprecation warning: \"+e)}function T(e,t){var n=!0;return f(function(){if(null!=r.deprecationHandler&&r.deprecationHandler(null,e),n){for(var o,i=[],a=0;a<arguments.length;a++){if(o=\"\",\"object\"===typeof arguments[a]){for(var u in o+=\"\\n[\"+a+\"] \",arguments[0])o+=u+\": \"+arguments[0][u]+\", \";o=o.slice(0,-2)}else o=arguments[a];i.push(o)}S(e+\"\\nArguments: \"+Array.prototype.slice.call(i).join(\"\")+\"\\n\"+(new Error).stack),n=!1}return t.apply(this,arguments)},t)}var O,C={};function E(e,t){null!=r.deprecationHandler&&r.deprecationHandler(e,t),C[e]||(S(t),C[e]=!0)}function P(e){return e instanceof Function||\"[object Function]\"===Object.prototype.toString.call(e)}function M(e,t){var n,r=f({},e);for(n in t)c(t,n)&&(i(e[n])&&i(t[n])?(r[n]={},f(r[n],e[n]),f(r[n],t[n])):null!=t[n]?r[n]=t[n]:delete r[n]);for(n in e)c(e,n)&&!c(t,n)&&i(e[n])&&(r[n]=f({},r[n]));return r}function j(e){null!=e&&this.set(e)}r.suppressDeprecationWarnings=!1,r.deprecationHandler=null,O=Object.keys?Object.keys:function(e){var t,n=[];for(t in e)c(e,t)&&n.push(t);return n};var D={};function R(e,t){var n=e.toLowerCase();D[n]=D[n+\"s\"]=D[t]=e}function N(e){return\"string\"===typeof e?D[e]||D[e.toLowerCase()]:void 0}function F(e){var t,n,r={};for(n in e)c(e,n)&&(t=N(n))&&(r[t]=e[n]);return r}var A={};function U(e,t){A[e]=t}function Y(e,t,n){var r=\"\"+Math.abs(e),o=t-r.length,i=e>=0;return(i?n?\"+\":\"\":\"-\")+Math.pow(10,Math.max(0,o)).toString().substr(1)+r}var L=/(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,I=/(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g,W={},z={};function V(e,t,n,r){var o=r;\"string\"===typeof r&&(o=function(){return this[r]()}),e&&(z[e]=o),t&&(z[t[0]]=function(){return Y(o.apply(this,arguments),t[1],t[2])}),n&&(z[n]=function(){return this.localeData().ordinal(o.apply(this,arguments),e)})}function H(e,t){return e.isValid()?(t=B(t,e.localeData()),W[t]=W[t]||function(e){var t,n,r,o=e.match(L);for(t=0,n=o.length;t<n;t++)z[o[t]]?o[t]=z[o[t]]:o[t]=(r=o[t]).match(/\\[[\\s\\S]/)?r.replace(/^\\[|\\]$/g,\"\"):r.replace(/\\\\/g,\"\");return function(t){var r,i=\"\";for(r=0;r<n;r++)i+=P(o[r])?o[r].call(t,e):o[r];return i}}(t),W[t](e)):e.localeData().invalidDate()}function B(e,t){var n=5;function r(e){return t.longDateFormat(e)||e}for(I.lastIndex=0;n>=0&&I.test(e);)e=e.replace(I,r),I.lastIndex=0,n-=1;return e}var $=/\\d/,q=/\\d\\d/,G=/\\d{3}/,Q=/\\d{4}/,Z=/[+-]?\\d{6}/,K=/\\d\\d?/,X=/\\d\\d\\d\\d?/,J=/\\d\\d\\d\\d\\d\\d?/,ee=/\\d{1,3}/,te=/\\d{1,4}/,ne=/[+-]?\\d{1,6}/,re=/\\d+/,oe=/[+-]?\\d+/,ie=/Z|[+-]\\d\\d:?\\d\\d/gi,ae=/Z|[+-]\\d\\d(?::?\\d\\d)?/gi,ue=/[0-9]{0,256}['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFF07\\uFF10-\\uFFEF]{1,256}|[\\u0600-\\u06FF\\/]{1,256}(\\s*?[\\u0600-\\u06FF]{1,256}){1,2}/i,le={};function se(e,t,n){le[e]=P(t)?t:function(e,r){return e&&n?n:t}}function ce(e,t){return c(le,e)?le[e](t._strict,t._locale):new RegExp(fe(e.replace(\"\\\\\",\"\").replace(/\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g,function(e,t,n,r,o){return t||n||r||o})))}function fe(e){return e.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g,\"\\\\$&\")}var de={};function pe(e,t){var n,r=t;for(\"string\"===typeof e&&(e=[e]),u(t)&&(r=function(e,n){n[t]=k(e)}),n=0;n<e.length;n++)de[e[n]]=r}function he(e,t){pe(e,function(e,n,r,o){r._w=r._w||{},t(e,r._w,r,o)})}function me(e,t,n){null!=t&&c(de,e)&&de[e](t,n._a,n,e)}var ye=0,ve=1,ge=2,be=3,_e=4,we=5,ke=6,xe=7,Se=8;function Te(e){return Oe(e)?366:365}function Oe(e){return e%4===0&&e%100!==0||e%400===0}V(\"Y\",0,0,function(){var e=this.year();return e<=9999?\"\"+e:\"+\"+e}),V(0,[\"YY\",2],0,function(){return this.year()%100}),V(0,[\"YYYY\",4],0,\"year\"),V(0,[\"YYYYY\",5],0,\"year\"),V(0,[\"YYYYYY\",6,!0],0,\"year\"),R(\"year\",\"y\"),U(\"year\",1),se(\"Y\",oe),se(\"YY\",K,q),se(\"YYYY\",te,Q),se(\"YYYYY\",ne,Z),se(\"YYYYYY\",ne,Z),pe([\"YYYYY\",\"YYYYYY\"],ye),pe(\"YYYY\",function(e,t){t[ye]=2===e.length?r.parseTwoDigitYear(e):k(e)}),pe(\"YY\",function(e,t){t[ye]=r.parseTwoDigitYear(e)}),pe(\"Y\",function(e,t){t[ye]=parseInt(e,10)}),r.parseTwoDigitYear=function(e){return k(e)+(k(e)>68?1900:2e3)};var Ce,Ee=Pe(\"FullYear\",!0);function Pe(e,t){return function(n){return null!=n?(je(this,e,n),r.updateOffset(this,t),this):Me(this,e)}}function Me(e,t){return e.isValid()?e._d[\"get\"+(e._isUTC?\"UTC\":\"\")+t]():NaN}function je(e,t,n){e.isValid()&&!isNaN(n)&&(\"FullYear\"===t&&Oe(e.year())&&1===e.month()&&29===e.date()?e._d[\"set\"+(e._isUTC?\"UTC\":\"\")+t](n,e.month(),De(n,e.month())):e._d[\"set\"+(e._isUTC?\"UTC\":\"\")+t](n))}function De(e,t){if(isNaN(e)||isNaN(t))return NaN;var n,r=(t%(n=12)+n)%n;return e+=(t-r)/12,1===r?Oe(e)?29:28:31-r%7%2}Ce=Array.prototype.indexOf?Array.prototype.indexOf:function(e){var t;for(t=0;t<this.length;++t)if(this[t]===e)return t;return-1},V(\"M\",[\"MM\",2],\"Mo\",function(){return this.month()+1}),V(\"MMM\",0,0,function(e){return this.localeData().monthsShort(this,e)}),V(\"MMMM\",0,0,function(e){return this.localeData().months(this,e)}),R(\"month\",\"M\"),U(\"month\",8),se(\"M\",K),se(\"MM\",K,q),se(\"MMM\",function(e,t){return t.monthsShortRegex(e)}),se(\"MMMM\",function(e,t){return t.monthsRegex(e)}),pe([\"M\",\"MM\"],function(e,t){t[ve]=k(e)-1}),pe([\"MMM\",\"MMMM\"],function(e,t,n,r){var o=n._locale.monthsParse(e,r,n._strict);null!=o?t[ve]=o:p(n).invalidMonth=e});var Re=/D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/,Ne=\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),Fe=\"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec\".split(\"_\");function Ae(e,t){var n;if(!e.isValid())return e;if(\"string\"===typeof t)if(/^\\d+$/.test(t))t=k(t);else if(!u(t=e.localeData().monthsParse(t)))return e;return n=Math.min(e.date(),De(e.year(),t)),e._d[\"set\"+(e._isUTC?\"UTC\":\"\")+\"Month\"](t,n),e}function Ue(e){return null!=e?(Ae(this,e),r.updateOffset(this,!0),this):Me(this,\"Month\")}var Ye=ue,Le=ue;function Ie(){function e(e,t){return t.length-e.length}var t,n,r=[],o=[],i=[];for(t=0;t<12;t++)n=d([2e3,t]),r.push(this.monthsShort(n,\"\")),o.push(this.months(n,\"\")),i.push(this.months(n,\"\")),i.push(this.monthsShort(n,\"\"));for(r.sort(e),o.sort(e),i.sort(e),t=0;t<12;t++)r[t]=fe(r[t]),o[t]=fe(o[t]);for(t=0;t<24;t++)i[t]=fe(i[t]);this._monthsRegex=new RegExp(\"^(\"+i.join(\"|\")+\")\",\"i\"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp(\"^(\"+o.join(\"|\")+\")\",\"i\"),this._monthsShortStrictRegex=new RegExp(\"^(\"+r.join(\"|\")+\")\",\"i\")}function We(e){var t;if(e<100&&e>=0){var n=Array.prototype.slice.call(arguments);n[0]=e+400,t=new Date(Date.UTC.apply(null,n)),isFinite(t.getUTCFullYear())&&t.setUTCFullYear(e)}else t=new Date(Date.UTC.apply(null,arguments));return t}function ze(e,t,n){var r=7+t-n,o=(7+We(e,0,r).getUTCDay()-t)%7;return-o+r-1}function Ve(e,t,n,r,o){var i,a,u=(7+n-r)%7,l=ze(e,r,o),s=1+7*(t-1)+u+l;return s<=0?a=Te(i=e-1)+s:s>Te(e)?(i=e+1,a=s-Te(e)):(i=e,a=s),{year:i,dayOfYear:a}}function He(e,t,n){var r,o,i=ze(e.year(),t,n),a=Math.floor((e.dayOfYear()-i-1)/7)+1;return a<1?(o=e.year()-1,r=a+Be(o,t,n)):a>Be(e.year(),t,n)?(r=a-Be(e.year(),t,n),o=e.year()+1):(o=e.year(),r=a),{week:r,year:o}}function Be(e,t,n){var r=ze(e,t,n),o=ze(e+1,t,n);return(Te(e)-r+o)/7}function $e(e,t){return e.slice(t,7).concat(e.slice(0,t))}V(\"w\",[\"ww\",2],\"wo\",\"week\"),V(\"W\",[\"WW\",2],\"Wo\",\"isoWeek\"),R(\"week\",\"w\"),R(\"isoWeek\",\"W\"),U(\"week\",5),U(\"isoWeek\",5),se(\"w\",K),se(\"ww\",K,q),se(\"W\",K),se(\"WW\",K,q),he([\"w\",\"ww\",\"W\",\"WW\"],function(e,t,n,r){t[r.substr(0,1)]=k(e)}),V(\"d\",0,\"do\",\"day\"),V(\"dd\",0,0,function(e){return this.localeData().weekdaysMin(this,e)}),V(\"ddd\",0,0,function(e){return this.localeData().weekdaysShort(this,e)}),V(\"dddd\",0,0,function(e){return this.localeData().weekdays(this,e)}),V(\"e\",0,0,\"weekday\"),V(\"E\",0,0,\"isoWeekday\"),R(\"day\",\"d\"),R(\"weekday\",\"e\"),R(\"isoWeekday\",\"E\"),U(\"day\",11),U(\"weekday\",11),U(\"isoWeekday\",11),se(\"d\",K),se(\"e\",K),se(\"E\",K),se(\"dd\",function(e,t){return t.weekdaysMinRegex(e)}),se(\"ddd\",function(e,t){return t.weekdaysShortRegex(e)}),se(\"dddd\",function(e,t){return t.weekdaysRegex(e)}),he([\"dd\",\"ddd\",\"dddd\"],function(e,t,n,r){var o=n._locale.weekdaysParse(e,r,n._strict);null!=o?t.d=o:p(n).invalidWeekday=e}),he([\"d\",\"e\",\"E\"],function(e,t,n,r){t[r]=k(e)});var qe=\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),Ge=\"Sun_Mon_Tue_Wed_Thu_Fri_Sat\".split(\"_\"),Qe=\"Su_Mo_Tu_We_Th_Fr_Sa\".split(\"_\"),Ze=ue,Ke=ue,Xe=ue;function Je(){function e(e,t){return t.length-e.length}var t,n,r,o,i,a=[],u=[],l=[],s=[];for(t=0;t<7;t++)n=d([2e3,1]).day(t),r=this.weekdaysMin(n,\"\"),o=this.weekdaysShort(n,\"\"),i=this.weekdays(n,\"\"),a.push(r),u.push(o),l.push(i),s.push(r),s.push(o),s.push(i);for(a.sort(e),u.sort(e),l.sort(e),s.sort(e),t=0;t<7;t++)u[t]=fe(u[t]),l[t]=fe(l[t]),s[t]=fe(s[t]);this._weekdaysRegex=new RegExp(\"^(\"+s.join(\"|\")+\")\",\"i\"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp(\"^(\"+l.join(\"|\")+\")\",\"i\"),this._weekdaysShortStrictRegex=new RegExp(\"^(\"+u.join(\"|\")+\")\",\"i\"),this._weekdaysMinStrictRegex=new RegExp(\"^(\"+a.join(\"|\")+\")\",\"i\")}function et(){return this.hours()%12||12}function tt(e,t){V(e,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),t)})}function nt(e,t){return t._meridiemParse}V(\"H\",[\"HH\",2],0,\"hour\"),V(\"h\",[\"hh\",2],0,et),V(\"k\",[\"kk\",2],0,function(){return this.hours()||24}),V(\"hmm\",0,0,function(){return\"\"+et.apply(this)+Y(this.minutes(),2)}),V(\"hmmss\",0,0,function(){return\"\"+et.apply(this)+Y(this.minutes(),2)+Y(this.seconds(),2)}),V(\"Hmm\",0,0,function(){return\"\"+this.hours()+Y(this.minutes(),2)}),V(\"Hmmss\",0,0,function(){return\"\"+this.hours()+Y(this.minutes(),2)+Y(this.seconds(),2)}),tt(\"a\",!0),tt(\"A\",!1),R(\"hour\",\"h\"),U(\"hour\",13),se(\"a\",nt),se(\"A\",nt),se(\"H\",K),se(\"h\",K),se(\"k\",K),se(\"HH\",K,q),se(\"hh\",K,q),se(\"kk\",K,q),se(\"hmm\",X),se(\"hmmss\",J),se(\"Hmm\",X),se(\"Hmmss\",J),pe([\"H\",\"HH\"],be),pe([\"k\",\"kk\"],function(e,t,n){var r=k(e);t[be]=24===r?0:r}),pe([\"a\",\"A\"],function(e,t,n){n._isPm=n._locale.isPM(e),n._meridiem=e}),pe([\"h\",\"hh\"],function(e,t,n){t[be]=k(e),p(n).bigHour=!0}),pe(\"hmm\",function(e,t,n){var r=e.length-2;t[be]=k(e.substr(0,r)),t[_e]=k(e.substr(r)),p(n).bigHour=!0}),pe(\"hmmss\",function(e,t,n){var r=e.length-4,o=e.length-2;t[be]=k(e.substr(0,r)),t[_e]=k(e.substr(r,2)),t[we]=k(e.substr(o)),p(n).bigHour=!0}),pe(\"Hmm\",function(e,t,n){var r=e.length-2;t[be]=k(e.substr(0,r)),t[_e]=k(e.substr(r))}),pe(\"Hmmss\",function(e,t,n){var r=e.length-4,o=e.length-2;t[be]=k(e.substr(0,r)),t[_e]=k(e.substr(r,2)),t[we]=k(e.substr(o))});var rt,ot=Pe(\"Hours\",!0),it={calendar:{sameDay:\"[Today at] LT\",nextDay:\"[Tomorrow at] LT\",nextWeek:\"dddd [at] LT\",lastDay:\"[Yesterday at] LT\",lastWeek:\"[Last] dddd [at] LT\",sameElse:\"L\"},longDateFormat:{LTS:\"h:mm:ss A\",LT:\"h:mm A\",L:\"MM/DD/YYYY\",LL:\"MMMM D, YYYY\",LLL:\"MMMM D, YYYY h:mm A\",LLLL:\"dddd, MMMM D, YYYY h:mm A\"},invalidDate:\"Invalid date\",ordinal:\"%d\",dayOfMonthOrdinalParse:/\\d{1,2}/,relativeTime:{future:\"in %s\",past:\"%s ago\",s:\"a few seconds\",ss:\"%d seconds\",m:\"a minute\",mm:\"%d minutes\",h:\"an hour\",hh:\"%d hours\",d:\"a day\",dd:\"%d days\",M:\"a month\",MM:\"%d months\",y:\"a year\",yy:\"%d years\"},months:Ne,monthsShort:Fe,week:{dow:0,doy:6},weekdays:qe,weekdaysMin:Qe,weekdaysShort:Ge,meridiemParse:/[ap]\\.?m?\\.?/i},at={},ut={};function lt(e){return e?e.toLowerCase().replace(\"_\",\"-\"):e}function st(t){var n=null;if(!at[t]&&\"undefined\"!==typeof e&&e&&e.exports)try{n=rt._abbr,!function(){var e=new Error(\"Cannot find module 'undefined'\");throw e.code=\"MODULE_NOT_FOUND\",e}(),ct(n)}catch(r){}return at[t]}function ct(e,t){var n;return e&&((n=a(t)?dt(e):ft(e,t))?rt=n:\"undefined\"!==typeof console&&console.warn&&console.warn(\"Locale \"+e+\" not found. Did you forget to load it?\")),rt._abbr}function ft(e,t){if(null!==t){var n,r=it;if(t.abbr=e,null!=at[e])E(\"defineLocaleOverride\",\"use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info.\"),r=at[e]._config;else if(null!=t.parentLocale)if(null!=at[t.parentLocale])r=at[t.parentLocale]._config;else{if(null==(n=st(t.parentLocale)))return ut[t.parentLocale]||(ut[t.parentLocale]=[]),ut[t.parentLocale].push({name:e,config:t}),null;r=n._config}return at[e]=new j(M(r,t)),ut[e]&&ut[e].forEach(function(e){ft(e.name,e.config)}),ct(e),at[e]}return delete at[e],null}function dt(e){var t;if(e&&e._locale&&e._locale._abbr&&(e=e._locale._abbr),!e)return rt;if(!o(e)){if(t=st(e))return t;e=[e]}return function(e){for(var t,n,r,o,i=0;i<e.length;){for(o=lt(e[i]).split(\"-\"),t=o.length,n=(n=lt(e[i+1]))?n.split(\"-\"):null;t>0;){if(r=st(o.slice(0,t).join(\"-\")))return r;if(n&&n.length>=t&&x(o,n,!0)>=t-1)break;t--}i++}return rt}(e)}function pt(e){var t,n=e._a;return n&&-2===p(e).overflow&&(t=n[ve]<0||n[ve]>11?ve:n[ge]<1||n[ge]>De(n[ye],n[ve])?ge:n[be]<0||n[be]>24||24===n[be]&&(0!==n[_e]||0!==n[we]||0!==n[ke])?be:n[_e]<0||n[_e]>59?_e:n[we]<0||n[we]>59?we:n[ke]<0||n[ke]>999?ke:-1,p(e)._overflowDayOfYear&&(t<ye||t>ge)&&(t=ge),p(e)._overflowWeeks&&-1===t&&(t=xe),p(e)._overflowWeekday&&-1===t&&(t=Se),p(e).overflow=t),e}function ht(e,t,n){return null!=e?e:null!=t?t:n}function mt(e){var t,n,o,i,a,u=[];if(!e._d){for(o=function(e){var t=new Date(r.now());return e._useUTC?[t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate()]:[t.getFullYear(),t.getMonth(),t.getDate()]}(e),e._w&&null==e._a[ge]&&null==e._a[ve]&&function(e){var t,n,r,o,i,a,u,l;if(null!=(t=e._w).GG||null!=t.W||null!=t.E)i=1,a=4,n=ht(t.GG,e._a[ye],He(Mt(),1,4).year),r=ht(t.W,1),((o=ht(t.E,1))<1||o>7)&&(l=!0);else{i=e._locale._week.dow,a=e._locale._week.doy;var s=He(Mt(),i,a);n=ht(t.gg,e._a[ye],s.year),r=ht(t.w,s.week),null!=t.d?((o=t.d)<0||o>6)&&(l=!0):null!=t.e?(o=t.e+i,(t.e<0||t.e>6)&&(l=!0)):o=i}r<1||r>Be(n,i,a)?p(e)._overflowWeeks=!0:null!=l?p(e)._overflowWeekday=!0:(u=Ve(n,r,o,i,a),e._a[ye]=u.year,e._dayOfYear=u.dayOfYear)}(e),null!=e._dayOfYear&&(a=ht(e._a[ye],o[ye]),(e._dayOfYear>Te(a)||0===e._dayOfYear)&&(p(e)._overflowDayOfYear=!0),n=We(a,0,e._dayOfYear),e._a[ve]=n.getUTCMonth(),e._a[ge]=n.getUTCDate()),t=0;t<3&&null==e._a[t];++t)e._a[t]=u[t]=o[t];for(;t<7;t++)e._a[t]=u[t]=null==e._a[t]?2===t?1:0:e._a[t];24===e._a[be]&&0===e._a[_e]&&0===e._a[we]&&0===e._a[ke]&&(e._nextDay=!0,e._a[be]=0),e._d=(e._useUTC?We:function(e,t,n,r,o,i,a){var u;return e<100&&e>=0?(u=new Date(e+400,t,n,r,o,i,a),isFinite(u.getFullYear())&&u.setFullYear(e)):u=new Date(e,t,n,r,o,i,a),u}).apply(null,u),i=e._useUTC?e._d.getUTCDay():e._d.getDay(),null!=e._tzm&&e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),e._nextDay&&(e._a[be]=24),e._w&&\"undefined\"!==typeof e._w.d&&e._w.d!==i&&(p(e).weekdayMismatch=!0)}}var yt=/^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,vt=/^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,gt=/Z|[+-]\\d\\d(?::?\\d\\d)?/,bt=[[\"YYYYYY-MM-DD\",/[+-]\\d{6}-\\d\\d-\\d\\d/],[\"YYYY-MM-DD\",/\\d{4}-\\d\\d-\\d\\d/],[\"GGGG-[W]WW-E\",/\\d{4}-W\\d\\d-\\d/],[\"GGGG-[W]WW\",/\\d{4}-W\\d\\d/,!1],[\"YYYY-DDD\",/\\d{4}-\\d{3}/],[\"YYYY-MM\",/\\d{4}-\\d\\d/,!1],[\"YYYYYYMMDD\",/[+-]\\d{10}/],[\"YYYYMMDD\",/\\d{8}/],[\"GGGG[W]WWE\",/\\d{4}W\\d{3}/],[\"GGGG[W]WW\",/\\d{4}W\\d{2}/,!1],[\"YYYYDDD\",/\\d{7}/]],_t=[[\"HH:mm:ss.SSSS\",/\\d\\d:\\d\\d:\\d\\d\\.\\d+/],[\"HH:mm:ss,SSSS\",/\\d\\d:\\d\\d:\\d\\d,\\d+/],[\"HH:mm:ss\",/\\d\\d:\\d\\d:\\d\\d/],[\"HH:mm\",/\\d\\d:\\d\\d/],[\"HHmmss.SSSS\",/\\d\\d\\d\\d\\d\\d\\.\\d+/],[\"HHmmss,SSSS\",/\\d\\d\\d\\d\\d\\d,\\d+/],[\"HHmmss\",/\\d\\d\\d\\d\\d\\d/],[\"HHmm\",/\\d\\d\\d\\d/],[\"HH\",/\\d\\d/]],wt=/^\\/?Date\\((\\-?\\d+)/i;function kt(e){var t,n,r,o,i,a,u=e._i,l=yt.exec(u)||vt.exec(u);if(l){for(p(e).iso=!0,t=0,n=bt.length;t<n;t++)if(bt[t][1].exec(l[1])){o=bt[t][0],r=!1!==bt[t][2];break}if(null==o)return void(e._isValid=!1);if(l[3]){for(t=0,n=_t.length;t<n;t++)if(_t[t][1].exec(l[3])){i=(l[2]||\" \")+_t[t][0];break}if(null==i)return void(e._isValid=!1)}if(!r&&null!=i)return void(e._isValid=!1);if(l[4]){if(!gt.exec(l[4]))return void(e._isValid=!1);a=\"Z\"}e._f=o+(i||\"\")+(a||\"\"),Ct(e)}else e._isValid=!1}var xt=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\\d{4}))$/;function St(e){var t=parseInt(e,10);return t<=49?2e3+t:t<=999?1900+t:t}var Tt={UT:0,GMT:0,EDT:-240,EST:-300,CDT:-300,CST:-360,MDT:-360,MST:-420,PDT:-420,PST:-480};function Ot(e){var t=xt.exec(e._i.replace(/\\([^)]*\\)|[\\n\\t]/g,\" \").replace(/(\\s\\s+)/g,\" \").replace(/^\\s\\s*/,\"\").replace(/\\s\\s*$/,\"\"));if(t){var n=function(e,t,n,r,o,i){var a=[St(e),Fe.indexOf(t),parseInt(n,10),parseInt(r,10),parseInt(o,10)];return i&&a.push(parseInt(i,10)),a}(t[4],t[3],t[2],t[5],t[6],t[7]);if(!function(e,t,n){if(e){var r=Ge.indexOf(e),o=new Date(t[0],t[1],t[2]).getDay();if(r!==o)return p(n).weekdayMismatch=!0,n._isValid=!1,!1}return!0}(t[1],n,e))return;e._a=n,e._tzm=function(e,t,n){if(e)return Tt[e];if(t)return 0;var r=parseInt(n,10),o=r%100,i=(r-o)/100;return 60*i+o}(t[8],t[9],t[10]),e._d=We.apply(null,e._a),e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),p(e).rfc2822=!0}else e._isValid=!1}function Ct(e){if(e._f!==r.ISO_8601)if(e._f!==r.RFC_2822){e._a=[],p(e).empty=!0;var t,n,o,i,a,u=\"\"+e._i,l=u.length,s=0;for(o=B(e._f,e._locale).match(L)||[],t=0;t<o.length;t++)i=o[t],(n=(u.match(ce(i,e))||[])[0])&&((a=u.substr(0,u.indexOf(n))).length>0&&p(e).unusedInput.push(a),u=u.slice(u.indexOf(n)+n.length),s+=n.length),z[i]?(n?p(e).empty=!1:p(e).unusedTokens.push(i),me(i,n,e)):e._strict&&!n&&p(e).unusedTokens.push(i);p(e).charsLeftOver=l-s,u.length>0&&p(e).unusedInput.push(u),e._a[be]<=12&&!0===p(e).bigHour&&e._a[be]>0&&(p(e).bigHour=void 0),p(e).parsedDateParts=e._a.slice(0),p(e).meridiem=e._meridiem,e._a[be]=function(e,t,n){var r;return null==n?t:null!=e.meridiemHour?e.meridiemHour(t,n):null!=e.isPM?((r=e.isPM(n))&&t<12&&(t+=12),r||12!==t||(t=0),t):t}(e._locale,e._a[be],e._meridiem),mt(e),pt(e)}else Ot(e);else kt(e)}function Et(e){var t=e._i,n=e._f;return e._locale=e._locale||dt(e._l),null===t||void 0===n&&\"\"===t?m({nullInput:!0}):(\"string\"===typeof t&&(e._i=t=e._locale.preparse(t)),_(t)?new b(pt(t)):(l(t)?e._d=t:o(n)?function(e){var t,n,r,o,i;if(0===e._f.length)return p(e).invalidFormat=!0,void(e._d=new Date(NaN));for(o=0;o<e._f.length;o++)i=0,t=v({},e),null!=e._useUTC&&(t._useUTC=e._useUTC),t._f=e._f[o],Ct(t),h(t)&&(i+=p(t).charsLeftOver,i+=10*p(t).unusedTokens.length,p(t).score=i,(null==r||i<r)&&(r=i,n=t));f(e,n||t)}(e):n?Ct(e):function(e){var t=e._i;a(t)?e._d=new Date(r.now()):l(t)?e._d=new Date(t.valueOf()):\"string\"===typeof t?function(e){var t=wt.exec(e._i);null===t?(kt(e),!1===e._isValid&&(delete e._isValid,Ot(e),!1===e._isValid&&(delete e._isValid,r.createFromInputFallback(e)))):e._d=new Date(+t[1])}(e):o(t)?(e._a=s(t.slice(0),function(e){return parseInt(e,10)}),mt(e)):i(t)?function(e){if(!e._d){var t=F(e._i);e._a=s([t.year,t.month,t.day||t.date,t.hour,t.minute,t.second,t.millisecond],function(e){return e&&parseInt(e,10)}),mt(e)}}(e):u(t)?e._d=new Date(t):r.createFromInputFallback(e)}(e),h(e)||(e._d=null),e))}function Pt(e,t,n,r,a){var u={};return!0!==n&&!1!==n||(r=n,n=void 0),(i(e)&&function(e){if(Object.getOwnPropertyNames)return 0===Object.getOwnPropertyNames(e).length;var t;for(t in e)if(e.hasOwnProperty(t))return!1;return!0}(e)||o(e)&&0===e.length)&&(e=void 0),u._isAMomentObject=!0,u._useUTC=u._isUTC=a,u._l=n,u._i=e,u._f=t,u._strict=r,function(e){var t=new b(pt(Et(e)));return t._nextDay&&(t.add(1,\"d\"),t._nextDay=void 0),t}(u)}function Mt(e,t,n,r){return Pt(e,t,n,r,!1)}r.createFromInputFallback=T(\"value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged and will be removed in an upcoming major release. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.\",function(e){e._d=new Date(e._i+(e._useUTC?\" UTC\":\"\"))}),r.ISO_8601=function(){},r.RFC_2822=function(){};var jt=T(\"moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/\",function(){var e=Mt.apply(null,arguments);return this.isValid()&&e.isValid()?e<this?this:e:m()}),Dt=T(\"moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/\",function(){var e=Mt.apply(null,arguments);return this.isValid()&&e.isValid()?e>this?this:e:m()});function Rt(e,t){var n,r;if(1===t.length&&o(t[0])&&(t=t[0]),!t.length)return Mt();for(n=t[0],r=1;r<t.length;++r)t[r].isValid()&&!t[r][e](n)||(n=t[r]);return n}var Nt=[\"year\",\"quarter\",\"month\",\"week\",\"day\",\"hour\",\"minute\",\"second\",\"millisecond\"];function Ft(e){var t=F(e),n=t.year||0,r=t.quarter||0,o=t.month||0,i=t.week||t.isoWeek||0,a=t.day||0,u=t.hour||0,l=t.minute||0,s=t.second||0,c=t.millisecond||0;this._isValid=function(e){for(var t in e)if(-1===Ce.call(Nt,t)||null!=e[t]&&isNaN(e[t]))return!1;for(var n=!1,r=0;r<Nt.length;++r)if(e[Nt[r]]){if(n)return!1;parseFloat(e[Nt[r]])!==k(e[Nt[r]])&&(n=!0)}return!0}(t),this._milliseconds=+c+1e3*s+6e4*l+1e3*u*60*60,this._days=+a+7*i,this._months=+o+3*r+12*n,this._data={},this._locale=dt(),this._bubble()}function At(e){return e instanceof Ft}function Ut(e){return e<0?-1*Math.round(-1*e):Math.round(e)}function Yt(e,t){V(e,0,0,function(){var e=this.utcOffset(),n=\"+\";return e<0&&(e=-e,n=\"-\"),n+Y(~~(e/60),2)+t+Y(~~e%60,2)})}Yt(\"Z\",\":\"),Yt(\"ZZ\",\"\"),se(\"Z\",ae),se(\"ZZ\",ae),pe([\"Z\",\"ZZ\"],function(e,t,n){n._useUTC=!0,n._tzm=It(ae,e)});var Lt=/([\\+\\-]|\\d\\d)/gi;function It(e,t){var n=(t||\"\").match(e);if(null===n)return null;var r=n[n.length-1]||[],o=(r+\"\").match(Lt)||[\"-\",0,0],i=60*o[1]+k(o[2]);return 0===i?0:\"+\"===o[0]?i:-i}function Wt(e,t){var n,o;return t._isUTC?(n=t.clone(),o=(_(e)||l(e)?e.valueOf():Mt(e).valueOf())-n.valueOf(),n._d.setTime(n._d.valueOf()+o),r.updateOffset(n,!1),n):Mt(e).local()}function zt(e){return 15*-Math.round(e._d.getTimezoneOffset()/15)}function Vt(){return!!this.isValid()&&this._isUTC&&0===this._offset}r.updateOffset=function(){};var Ht=/^(\\-|\\+)?(?:(\\d*)[. ])?(\\d+)\\:(\\d+)(?:\\:(\\d+)(\\.\\d*)?)?$/,Bt=/^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;function $t(e,t){var n,r,o,i=e,a=null;return At(e)?i={ms:e._milliseconds,d:e._days,M:e._months}:u(e)?(i={},t?i[t]=e:i.milliseconds=e):(a=Ht.exec(e))?(n=\"-\"===a[1]?-1:1,i={y:0,d:k(a[ge])*n,h:k(a[be])*n,m:k(a[_e])*n,s:k(a[we])*n,ms:k(Ut(1e3*a[ke]))*n}):(a=Bt.exec(e))?(n=\"-\"===a[1]?-1:1,i={y:qt(a[2],n),M:qt(a[3],n),w:qt(a[4],n),d:qt(a[5],n),h:qt(a[6],n),m:qt(a[7],n),s:qt(a[8],n)}):null==i?i={}:\"object\"===typeof i&&(\"from\"in i||\"to\"in i)&&(o=function(e,t){var n;return e.isValid()&&t.isValid()?(t=Wt(t,e),e.isBefore(t)?n=Gt(e,t):((n=Gt(t,e)).milliseconds=-n.milliseconds,n.months=-n.months),n):{milliseconds:0,months:0}}(Mt(i.from),Mt(i.to)),(i={}).ms=o.milliseconds,i.M=o.months),r=new Ft(i),At(e)&&c(e,\"_locale\")&&(r._locale=e._locale),r}function qt(e,t){var n=e&&parseFloat(e.replace(\",\",\".\"));return(isNaN(n)?0:n)*t}function Gt(e,t){var n={};return n.months=t.month()-e.month()+12*(t.year()-e.year()),e.clone().add(n.months,\"M\").isAfter(t)&&--n.months,n.milliseconds=+t-+e.clone().add(n.months,\"M\"),n}function Qt(e,t){return function(n,r){var o;return null===r||isNaN(+r)||(E(t,\"moment().\"+t+\"(period, number) is deprecated. Please use moment().\"+t+\"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.\"),o=n,n=r,r=o),Zt(this,$t(n=\"string\"===typeof n?+n:n,r),e),this}}function Zt(e,t,n,o){var i=t._milliseconds,a=Ut(t._days),u=Ut(t._months);e.isValid()&&(o=null==o||o,u&&Ae(e,Me(e,\"Month\")+u*n),a&&je(e,\"Date\",Me(e,\"Date\")+a*n),i&&e._d.setTime(e._d.valueOf()+i*n),o&&r.updateOffset(e,a||u))}$t.fn=Ft.prototype,$t.invalid=function(){return $t(NaN)};var Kt=Qt(1,\"add\"),Xt=Qt(-1,\"subtract\");function Jt(e,t){var n,r,o=12*(t.year()-e.year())+(t.month()-e.month()),i=e.clone().add(o,\"months\");return t-i<0?(n=e.clone().add(o-1,\"months\"),r=(t-i)/(i-n)):(n=e.clone().add(o+1,\"months\"),r=(t-i)/(n-i)),-(o+r)||0}function en(e){var t;return void 0===e?this._locale._abbr:(null!=(t=dt(e))&&(this._locale=t),this)}r.defaultFormat=\"YYYY-MM-DDTHH:mm:ssZ\",r.defaultFormatUtc=\"YYYY-MM-DDTHH:mm:ss[Z]\";var tn=T(\"moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.\",function(e){return void 0===e?this.localeData():this.locale(e)});function nn(){return this._locale}var rn=1e3,on=60*rn,an=60*on,un=3506328*an;function ln(e,t){return(e%t+t)%t}function sn(e,t,n){return e<100&&e>=0?new Date(e+400,t,n)-un:new Date(e,t,n).valueOf()}function cn(e,t,n){return e<100&&e>=0?Date.UTC(e+400,t,n)-un:Date.UTC(e,t,n)}function fn(e,t){V(0,[e,e.length],0,t)}function dn(e,t,n,r,o){var i;return null==e?He(this,r,o).year:(i=Be(e,r,o),t>i&&(t=i),function(e,t,n,r,o){var i=Ve(e,t,n,r,o),a=We(i.year,0,i.dayOfYear);return this.year(a.getUTCFullYear()),this.month(a.getUTCMonth()),this.date(a.getUTCDate()),this}.call(this,e,t,n,r,o))}V(0,[\"gg\",2],0,function(){return this.weekYear()%100}),V(0,[\"GG\",2],0,function(){return this.isoWeekYear()%100}),fn(\"gggg\",\"weekYear\"),fn(\"ggggg\",\"weekYear\"),fn(\"GGGG\",\"isoWeekYear\"),fn(\"GGGGG\",\"isoWeekYear\"),R(\"weekYear\",\"gg\"),R(\"isoWeekYear\",\"GG\"),U(\"weekYear\",1),U(\"isoWeekYear\",1),se(\"G\",oe),se(\"g\",oe),se(\"GG\",K,q),se(\"gg\",K,q),se(\"GGGG\",te,Q),se(\"gggg\",te,Q),se(\"GGGGG\",ne,Z),se(\"ggggg\",ne,Z),he([\"gggg\",\"ggggg\",\"GGGG\",\"GGGGG\"],function(e,t,n,r){t[r.substr(0,2)]=k(e)}),he([\"gg\",\"GG\"],function(e,t,n,o){t[o]=r.parseTwoDigitYear(e)}),V(\"Q\",0,\"Qo\",\"quarter\"),R(\"quarter\",\"Q\"),U(\"quarter\",7),se(\"Q\",$),pe(\"Q\",function(e,t){t[ve]=3*(k(e)-1)}),V(\"D\",[\"DD\",2],\"Do\",\"date\"),R(\"date\",\"D\"),U(\"date\",9),se(\"D\",K),se(\"DD\",K,q),se(\"Do\",function(e,t){return e?t._dayOfMonthOrdinalParse||t._ordinalParse:t._dayOfMonthOrdinalParseLenient}),pe([\"D\",\"DD\"],ge),pe(\"Do\",function(e,t){t[ge]=k(e.match(K)[0])});var pn=Pe(\"Date\",!0);V(\"DDD\",[\"DDDD\",3],\"DDDo\",\"dayOfYear\"),R(\"dayOfYear\",\"DDD\"),U(\"dayOfYear\",4),se(\"DDD\",ee),se(\"DDDD\",G),pe([\"DDD\",\"DDDD\"],function(e,t,n){n._dayOfYear=k(e)}),V(\"m\",[\"mm\",2],0,\"minute\"),R(\"minute\",\"m\"),U(\"minute\",14),se(\"m\",K),se(\"mm\",K,q),pe([\"m\",\"mm\"],_e);var hn=Pe(\"Minutes\",!1);V(\"s\",[\"ss\",2],0,\"second\"),R(\"second\",\"s\"),U(\"second\",15),se(\"s\",K),se(\"ss\",K,q),pe([\"s\",\"ss\"],we);var mn,yn=Pe(\"Seconds\",!1);for(V(\"S\",0,0,function(){return~~(this.millisecond()/100)}),V(0,[\"SS\",2],0,function(){return~~(this.millisecond()/10)}),V(0,[\"SSS\",3],0,\"millisecond\"),V(0,[\"SSSS\",4],0,function(){return 10*this.millisecond()}),V(0,[\"SSSSS\",5],0,function(){return 100*this.millisecond()}),V(0,[\"SSSSSS\",6],0,function(){return 1e3*this.millisecond()}),V(0,[\"SSSSSSS\",7],0,function(){return 1e4*this.millisecond()}),V(0,[\"SSSSSSSS\",8],0,function(){return 1e5*this.millisecond()}),V(0,[\"SSSSSSSSS\",9],0,function(){return 1e6*this.millisecond()}),R(\"millisecond\",\"ms\"),U(\"millisecond\",16),se(\"S\",ee,$),se(\"SS\",ee,q),se(\"SSS\",ee,G),mn=\"SSSS\";mn.length<=9;mn+=\"S\")se(mn,re);function vn(e,t){t[ke]=k(1e3*(\"0.\"+e))}for(mn=\"S\";mn.length<=9;mn+=\"S\")pe(mn,vn);var gn=Pe(\"Milliseconds\",!1);V(\"z\",0,0,\"zoneAbbr\"),V(\"zz\",0,0,\"zoneName\");var bn=b.prototype;function _n(e){return e}bn.add=Kt,bn.calendar=function(e,t){var n=e||Mt(),o=Wt(n,this).startOf(\"day\"),i=r.calendarFormat(this,o)||\"sameElse\",a=t&&(P(t[i])?t[i].call(this,n):t[i]);return this.format(a||this.localeData().calendar(i,this,Mt(n)))},bn.clone=function(){return new b(this)},bn.diff=function(e,t,n){var r,o,i;if(!this.isValid())return NaN;if(!(r=Wt(e,this)).isValid())return NaN;switch(o=6e4*(r.utcOffset()-this.utcOffset()),t=N(t)){case\"year\":i=Jt(this,r)/12;break;case\"month\":i=Jt(this,r);break;case\"quarter\":i=Jt(this,r)/3;break;case\"second\":i=(this-r)/1e3;break;case\"minute\":i=(this-r)/6e4;break;case\"hour\":i=(this-r)/36e5;break;case\"day\":i=(this-r-o)/864e5;break;case\"week\":i=(this-r-o)/6048e5;break;default:i=this-r}return n?i:w(i)},bn.endOf=function(e){var t;if(void 0===(e=N(e))||\"millisecond\"===e||!this.isValid())return this;var n=this._isUTC?cn:sn;switch(e){case\"year\":t=n(this.year()+1,0,1)-1;break;case\"quarter\":t=n(this.year(),this.month()-this.month()%3+3,1)-1;break;case\"month\":t=n(this.year(),this.month()+1,1)-1;break;case\"week\":t=n(this.year(),this.month(),this.date()-this.weekday()+7)-1;break;case\"isoWeek\":t=n(this.year(),this.month(),this.date()-(this.isoWeekday()-1)+7)-1;break;case\"day\":case\"date\":t=n(this.year(),this.month(),this.date()+1)-1;break;case\"hour\":t=this._d.valueOf(),t+=an-ln(t+(this._isUTC?0:this.utcOffset()*on),an)-1;break;case\"minute\":t=this._d.valueOf(),t+=on-ln(t,on)-1;break;case\"second\":t=this._d.valueOf(),t+=rn-ln(t,rn)-1}return this._d.setTime(t),r.updateOffset(this,!0),this},bn.format=function(e){e||(e=this.isUtc()?r.defaultFormatUtc:r.defaultFormat);var t=H(this,e);return this.localeData().postformat(t)},bn.from=function(e,t){return this.isValid()&&(_(e)&&e.isValid()||Mt(e).isValid())?$t({to:this,from:e}).locale(this.locale()).humanize(!t):this.localeData().invalidDate()},bn.fromNow=function(e){return this.from(Mt(),e)},bn.to=function(e,t){return this.isValid()&&(_(e)&&e.isValid()||Mt(e).isValid())?$t({from:this,to:e}).locale(this.locale()).humanize(!t):this.localeData().invalidDate()},bn.toNow=function(e){return this.to(Mt(),e)},bn.get=function(e){return P(this[e=N(e)])?this[e]():this},bn.invalidAt=function(){return p(this).overflow},bn.isAfter=function(e,t){var n=_(e)?e:Mt(e);return!(!this.isValid()||!n.isValid())&&(\"millisecond\"===(t=N(t)||\"millisecond\")?this.valueOf()>n.valueOf():n.valueOf()<this.clone().startOf(t).valueOf())},bn.isBefore=function(e,t){var n=_(e)?e:Mt(e);return!(!this.isValid()||!n.isValid())&&(\"millisecond\"===(t=N(t)||\"millisecond\")?this.valueOf()<n.valueOf():this.clone().endOf(t).valueOf()<n.valueOf())},bn.isBetween=function(e,t,n,r){var o=_(e)?e:Mt(e),i=_(t)?t:Mt(t);return!!(this.isValid()&&o.isValid()&&i.isValid())&&((\"(\"===(r=r||\"()\")[0]?this.isAfter(o,n):!this.isBefore(o,n))&&(\")\"===r[1]?this.isBefore(i,n):!this.isAfter(i,n)))},bn.isSame=function(e,t){var n,r=_(e)?e:Mt(e);return!(!this.isValid()||!r.isValid())&&(\"millisecond\"===(t=N(t)||\"millisecond\")?this.valueOf()===r.valueOf():(n=r.valueOf(),this.clone().startOf(t).valueOf()<=n&&n<=this.clone().endOf(t).valueOf()))},bn.isSameOrAfter=function(e,t){return this.isSame(e,t)||this.isAfter(e,t)},bn.isSameOrBefore=function(e,t){return this.isSame(e,t)||this.isBefore(e,t)},bn.isValid=function(){return h(this)},bn.lang=tn,bn.locale=en,bn.localeData=nn,bn.max=Dt,bn.min=jt,bn.parsingFlags=function(){return f({},p(this))},bn.set=function(e,t){if(\"object\"===typeof e)for(var n=function(e){var t=[];for(var n in e)t.push({unit:n,priority:A[n]});return t.sort(function(e,t){return e.priority-t.priority}),t}(e=F(e)),r=0;r<n.length;r++)this[n[r].unit](e[n[r].unit]);else if(P(this[e=N(e)]))return this[e](t);return this},bn.startOf=function(e){var t;if(void 0===(e=N(e))||\"millisecond\"===e||!this.isValid())return this;var n=this._isUTC?cn:sn;switch(e){case\"year\":t=n(this.year(),0,1);break;case\"quarter\":t=n(this.year(),this.month()-this.month()%3,1);break;case\"month\":t=n(this.year(),this.month(),1);break;case\"week\":t=n(this.year(),this.month(),this.date()-this.weekday());break;case\"isoWeek\":t=n(this.year(),this.month(),this.date()-(this.isoWeekday()-1));break;case\"day\":case\"date\":t=n(this.year(),this.month(),this.date());break;case\"hour\":t=this._d.valueOf(),t-=ln(t+(this._isUTC?0:this.utcOffset()*on),an);break;case\"minute\":t=this._d.valueOf(),t-=ln(t,on);break;case\"second\":t=this._d.valueOf(),t-=ln(t,rn)}return this._d.setTime(t),r.updateOffset(this,!0),this},bn.subtract=Xt,bn.toArray=function(){var e=this;return[e.year(),e.month(),e.date(),e.hour(),e.minute(),e.second(),e.millisecond()]},bn.toObject=function(){var e=this;return{years:e.year(),months:e.month(),date:e.date(),hours:e.hours(),minutes:e.minutes(),seconds:e.seconds(),milliseconds:e.milliseconds()}},bn.toDate=function(){return new Date(this.valueOf())},bn.toISOString=function(e){if(!this.isValid())return null;var t=!0!==e,n=t?this.clone().utc():this;return n.year()<0||n.year()>9999?H(n,t?\"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]\":\"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ\"):P(Date.prototype.toISOString)?t?this.toDate().toISOString():new Date(this.valueOf()+60*this.utcOffset()*1e3).toISOString().replace(\"Z\",H(n,\"Z\")):H(n,t?\"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]\":\"YYYY-MM-DD[T]HH:mm:ss.SSSZ\")},bn.inspect=function(){if(!this.isValid())return\"moment.invalid(/* \"+this._i+\" */)\";var e=\"moment\",t=\"\";this.isLocal()||(e=0===this.utcOffset()?\"moment.utc\":\"moment.parseZone\",t=\"Z\");var n=\"[\"+e+'(\"]',r=0<=this.year()&&this.year()<=9999?\"YYYY\":\"YYYYYY\",o=t+'[\")]';return this.format(n+r+\"-MM-DD[T]HH:mm:ss.SSS\"+o)},bn.toJSON=function(){return this.isValid()?this.toISOString():null},bn.toString=function(){return this.clone().locale(\"en\").format(\"ddd MMM DD YYYY HH:mm:ss [GMT]ZZ\")},bn.unix=function(){return Math.floor(this.valueOf()/1e3)},bn.valueOf=function(){return this._d.valueOf()-6e4*(this._offset||0)},bn.creationData=function(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}},bn.year=Ee,bn.isLeapYear=function(){return Oe(this.year())},bn.weekYear=function(e){return dn.call(this,e,this.week(),this.weekday(),this.localeData()._week.dow,this.localeData()._week.doy)},bn.isoWeekYear=function(e){return dn.call(this,e,this.isoWeek(),this.isoWeekday(),1,4)},bn.quarter=bn.quarters=function(e){return null==e?Math.ceil((this.month()+1)/3):this.month(3*(e-1)+this.month()%3)},bn.month=Ue,bn.daysInMonth=function(){return De(this.year(),this.month())},bn.week=bn.weeks=function(e){var t=this.localeData().week(this);return null==e?t:this.add(7*(e-t),\"d\")},bn.isoWeek=bn.isoWeeks=function(e){var t=He(this,1,4).week;return null==e?t:this.add(7*(e-t),\"d\")},bn.weeksInYear=function(){var e=this.localeData()._week;return Be(this.year(),e.dow,e.doy)},bn.isoWeeksInYear=function(){return Be(this.year(),1,4)},bn.date=pn,bn.day=bn.days=function(e){if(!this.isValid())return null!=e?this:NaN;var t=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=e?(e=function(e,t){return\"string\"!==typeof e?e:isNaN(e)?\"number\"===typeof(e=t.weekdaysParse(e))?e:null:parseInt(e,10)}(e,this.localeData()),this.add(e-t,\"d\")):t},bn.weekday=function(e){if(!this.isValid())return null!=e?this:NaN;var t=(this.day()+7-this.localeData()._week.dow)%7;return null==e?t:this.add(e-t,\"d\")},bn.isoWeekday=function(e){if(!this.isValid())return null!=e?this:NaN;if(null!=e){var t=function(e,t){return\"string\"===typeof e?t.weekdaysParse(e)%7||7:isNaN(e)?null:e}(e,this.localeData());return this.day(this.day()%7?t:t-7)}return this.day()||7},bn.dayOfYear=function(e){var t=Math.round((this.clone().startOf(\"day\")-this.clone().startOf(\"year\"))/864e5)+1;return null==e?t:this.add(e-t,\"d\")},bn.hour=bn.hours=ot,bn.minute=bn.minutes=hn,bn.second=bn.seconds=yn,bn.millisecond=bn.milliseconds=gn,bn.utcOffset=function(e,t,n){var o,i=this._offset||0;if(!this.isValid())return null!=e?this:NaN;if(null!=e){if(\"string\"===typeof e){if(null===(e=It(ae,e)))return this}else Math.abs(e)<16&&!n&&(e*=60);return!this._isUTC&&t&&(o=zt(this)),this._offset=e,this._isUTC=!0,null!=o&&this.add(o,\"m\"),i!==e&&(!t||this._changeInProgress?Zt(this,$t(e-i,\"m\"),1,!1):this._changeInProgress||(this._changeInProgress=!0,r.updateOffset(this,!0),this._changeInProgress=null)),this}return this._isUTC?i:zt(this)},bn.utc=function(e){return this.utcOffset(0,e)},bn.local=function(e){return this._isUTC&&(this.utcOffset(0,e),this._isUTC=!1,e&&this.subtract(zt(this),\"m\")),this},bn.parseZone=function(){if(null!=this._tzm)this.utcOffset(this._tzm,!1,!0);else if(\"string\"===typeof this._i){var e=It(ie,this._i);null!=e?this.utcOffset(e):this.utcOffset(0,!0)}return this},bn.hasAlignedHourOffset=function(e){return!!this.isValid()&&(e=e?Mt(e).utcOffset():0,(this.utcOffset()-e)%60===0)},bn.isDST=function(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()},bn.isLocal=function(){return!!this.isValid()&&!this._isUTC},bn.isUtcOffset=function(){return!!this.isValid()&&this._isUTC},bn.isUtc=Vt,bn.isUTC=Vt,bn.zoneAbbr=function(){return this._isUTC?\"UTC\":\"\"},bn.zoneName=function(){return this._isUTC?\"Coordinated Universal Time\":\"\"},bn.dates=T(\"dates accessor is deprecated. Use date instead.\",pn),bn.months=T(\"months accessor is deprecated. Use month instead\",Ue),bn.years=T(\"years accessor is deprecated. Use year instead\",Ee),bn.zone=T(\"moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/\",function(e,t){return null!=e?(\"string\"!==typeof e&&(e=-e),this.utcOffset(e,t),this):-this.utcOffset()}),bn.isDSTShifted=T(\"isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information\",function(){if(!a(this._isDSTShifted))return this._isDSTShifted;var e={};if(v(e,this),(e=Et(e))._a){var t=e._isUTC?d(e._a):Mt(e._a);this._isDSTShifted=this.isValid()&&x(e._a,t.toArray())>0}else this._isDSTShifted=!1;return this._isDSTShifted});var wn=j.prototype;function kn(e,t,n,r){var o=dt(),i=d().set(r,t);return o[n](i,e)}function xn(e,t,n){if(u(e)&&(t=e,e=void 0),e=e||\"\",null!=t)return kn(e,t,n,\"month\");var r,o=[];for(r=0;r<12;r++)o[r]=kn(e,r,n,\"month\");return o}function Sn(e,t,n,r){\"boolean\"===typeof e?(u(t)&&(n=t,t=void 0),t=t||\"\"):(n=t=e,e=!1,u(t)&&(n=t,t=void 0),t=t||\"\");var o,i=dt(),a=e?i._week.dow:0;if(null!=n)return kn(t,(n+a)%7,r,\"day\");var l=[];for(o=0;o<7;o++)l[o]=kn(t,(o+a)%7,r,\"day\");return l}wn.calendar=function(e,t,n){var r=this._calendar[e]||this._calendar.sameElse;return P(r)?r.call(t,n):r},wn.longDateFormat=function(e){var t=this._longDateFormat[e],n=this._longDateFormat[e.toUpperCase()];return t||!n?t:(this._longDateFormat[e]=n.replace(/MMMM|MM|DD|dddd/g,function(e){return e.slice(1)}),this._longDateFormat[e])},wn.invalidDate=function(){return this._invalidDate},wn.ordinal=function(e){return this._ordinal.replace(\"%d\",e)},wn.preparse=_n,wn.postformat=_n,wn.relativeTime=function(e,t,n,r){var o=this._relativeTime[n];return P(o)?o(e,t,n,r):o.replace(/%d/i,e)},wn.pastFuture=function(e,t){var n=this._relativeTime[e>0?\"future\":\"past\"];return P(n)?n(t):n.replace(/%s/i,t)},wn.set=function(e){var t,n;for(n in e)P(t=e[n])?this[n]=t:this[\"_\"+n]=t;this._config=e,this._dayOfMonthOrdinalParseLenient=new RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+\"|\"+/\\d{1,2}/.source)},wn.months=function(e,t){return e?o(this._months)?this._months[e.month()]:this._months[(this._months.isFormat||Re).test(t)?\"format\":\"standalone\"][e.month()]:o(this._months)?this._months:this._months.standalone},wn.monthsShort=function(e,t){return e?o(this._monthsShort)?this._monthsShort[e.month()]:this._monthsShort[Re.test(t)?\"format\":\"standalone\"][e.month()]:o(this._monthsShort)?this._monthsShort:this._monthsShort.standalone},wn.monthsParse=function(e,t,n){var r,o,i;if(this._monthsParseExact)return function(e,t,n){var r,o,i,a=e.toLocaleLowerCase();if(!this._monthsParse)for(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[],r=0;r<12;++r)i=d([2e3,r]),this._shortMonthsParse[r]=this.monthsShort(i,\"\").toLocaleLowerCase(),this._longMonthsParse[r]=this.months(i,\"\").toLocaleLowerCase();return n?\"MMM\"===t?-1!==(o=Ce.call(this._shortMonthsParse,a))?o:null:-1!==(o=Ce.call(this._longMonthsParse,a))?o:null:\"MMM\"===t?-1!==(o=Ce.call(this._shortMonthsParse,a))?o:-1!==(o=Ce.call(this._longMonthsParse,a))?o:null:-1!==(o=Ce.call(this._longMonthsParse,a))?o:-1!==(o=Ce.call(this._shortMonthsParse,a))?o:null}.call(this,e,t,n);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),r=0;r<12;r++){if(o=d([2e3,r]),n&&!this._longMonthsParse[r]&&(this._longMonthsParse[r]=new RegExp(\"^\"+this.months(o,\"\").replace(\".\",\"\")+\"$\",\"i\"),this._shortMonthsParse[r]=new RegExp(\"^\"+this.monthsShort(o,\"\").replace(\".\",\"\")+\"$\",\"i\")),n||this._monthsParse[r]||(i=\"^\"+this.months(o,\"\")+\"|^\"+this.monthsShort(o,\"\"),this._monthsParse[r]=new RegExp(i.replace(\".\",\"\"),\"i\")),n&&\"MMMM\"===t&&this._longMonthsParse[r].test(e))return r;if(n&&\"MMM\"===t&&this._shortMonthsParse[r].test(e))return r;if(!n&&this._monthsParse[r].test(e))return r}},wn.monthsRegex=function(e){return this._monthsParseExact?(c(this,\"_monthsRegex\")||Ie.call(this),e?this._monthsStrictRegex:this._monthsRegex):(c(this,\"_monthsRegex\")||(this._monthsRegex=Le),this._monthsStrictRegex&&e?this._monthsStrictRegex:this._monthsRegex)},wn.monthsShortRegex=function(e){return this._monthsParseExact?(c(this,\"_monthsRegex\")||Ie.call(this),e?this._monthsShortStrictRegex:this._monthsShortRegex):(c(this,\"_monthsShortRegex\")||(this._monthsShortRegex=Ye),this._monthsShortStrictRegex&&e?this._monthsShortStrictRegex:this._monthsShortRegex)},wn.week=function(e){return He(e,this._week.dow,this._week.doy).week},wn.firstDayOfYear=function(){return this._week.doy},wn.firstDayOfWeek=function(){return this._week.dow},wn.weekdays=function(e,t){var n=o(this._weekdays)?this._weekdays:this._weekdays[e&&!0!==e&&this._weekdays.isFormat.test(t)?\"format\":\"standalone\"];return!0===e?$e(n,this._week.dow):e?n[e.day()]:n},wn.weekdaysMin=function(e){return!0===e?$e(this._weekdaysMin,this._week.dow):e?this._weekdaysMin[e.day()]:this._weekdaysMin},wn.weekdaysShort=function(e){return!0===e?$e(this._weekdaysShort,this._week.dow):e?this._weekdaysShort[e.day()]:this._weekdaysShort},wn.weekdaysParse=function(e,t,n){var r,o,i;if(this._weekdaysParseExact)return function(e,t,n){var r,o,i,a=e.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],r=0;r<7;++r)i=d([2e3,1]).day(r),this._minWeekdaysParse[r]=this.weekdaysMin(i,\"\").toLocaleLowerCase(),this._shortWeekdaysParse[r]=this.weekdaysShort(i,\"\").toLocaleLowerCase(),this._weekdaysParse[r]=this.weekdays(i,\"\").toLocaleLowerCase();return n?\"dddd\"===t?-1!==(o=Ce.call(this._weekdaysParse,a))?o:null:\"ddd\"===t?-1!==(o=Ce.call(this._shortWeekdaysParse,a))?o:null:-1!==(o=Ce.call(this._minWeekdaysParse,a))?o:null:\"dddd\"===t?-1!==(o=Ce.call(this._weekdaysParse,a))?o:-1!==(o=Ce.call(this._shortWeekdaysParse,a))?o:-1!==(o=Ce.call(this._minWeekdaysParse,a))?o:null:\"ddd\"===t?-1!==(o=Ce.call(this._shortWeekdaysParse,a))?o:-1!==(o=Ce.call(this._weekdaysParse,a))?o:-1!==(o=Ce.call(this._minWeekdaysParse,a))?o:null:-1!==(o=Ce.call(this._minWeekdaysParse,a))?o:-1!==(o=Ce.call(this._weekdaysParse,a))?o:-1!==(o=Ce.call(this._shortWeekdaysParse,a))?o:null}.call(this,e,t,n);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),r=0;r<7;r++){if(o=d([2e3,1]).day(r),n&&!this._fullWeekdaysParse[r]&&(this._fullWeekdaysParse[r]=new RegExp(\"^\"+this.weekdays(o,\"\").replace(\".\",\"\\\\.?\")+\"$\",\"i\"),this._shortWeekdaysParse[r]=new RegExp(\"^\"+this.weekdaysShort(o,\"\").replace(\".\",\"\\\\.?\")+\"$\",\"i\"),this._minWeekdaysParse[r]=new RegExp(\"^\"+this.weekdaysMin(o,\"\").replace(\".\",\"\\\\.?\")+\"$\",\"i\")),this._weekdaysParse[r]||(i=\"^\"+this.weekdays(o,\"\")+\"|^\"+this.weekdaysShort(o,\"\")+\"|^\"+this.weekdaysMin(o,\"\"),this._weekdaysParse[r]=new RegExp(i.replace(\".\",\"\"),\"i\")),n&&\"dddd\"===t&&this._fullWeekdaysParse[r].test(e))return r;if(n&&\"ddd\"===t&&this._shortWeekdaysParse[r].test(e))return r;if(n&&\"dd\"===t&&this._minWeekdaysParse[r].test(e))return r;if(!n&&this._weekdaysParse[r].test(e))return r}},wn.weekdaysRegex=function(e){return this._weekdaysParseExact?(c(this,\"_weekdaysRegex\")||Je.call(this),e?this._weekdaysStrictRegex:this._weekdaysRegex):(c(this,\"_weekdaysRegex\")||(this._weekdaysRegex=Ze),this._weekdaysStrictRegex&&e?this._weekdaysStrictRegex:this._weekdaysRegex)},wn.weekdaysShortRegex=function(e){return this._weekdaysParseExact?(c(this,\"_weekdaysRegex\")||Je.call(this),e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(c(this,\"_weekdaysShortRegex\")||(this._weekdaysShortRegex=Ke),this._weekdaysShortStrictRegex&&e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)},wn.weekdaysMinRegex=function(e){return this._weekdaysParseExact?(c(this,\"_weekdaysRegex\")||Je.call(this),e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(c(this,\"_weekdaysMinRegex\")||(this._weekdaysMinRegex=Xe),this._weekdaysMinStrictRegex&&e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)},wn.isPM=function(e){return\"p\"===(e+\"\").toLowerCase().charAt(0)},wn.meridiem=function(e,t,n){return e>11?n?\"pm\":\"PM\":n?\"am\":\"AM\"},ct(\"en\",{dayOfMonthOrdinalParse:/\\d{1,2}(th|st|nd|rd)/,ordinal:function(e){var t=e%10,n=1===k(e%100/10)?\"th\":1===t?\"st\":2===t?\"nd\":3===t?\"rd\":\"th\";return e+n}}),r.lang=T(\"moment.lang is deprecated. Use moment.locale instead.\",ct),r.langData=T(\"moment.langData is deprecated. Use moment.localeData instead.\",dt);var Tn=Math.abs;function On(e,t,n,r){var o=$t(t,n);return e._milliseconds+=r*o._milliseconds,e._days+=r*o._days,e._months+=r*o._months,e._bubble()}function Cn(e){return e<0?Math.floor(e):Math.ceil(e)}function En(e){return 4800*e/146097}function Pn(e){return 146097*e/4800}function Mn(e){return function(){return this.as(e)}}var jn=Mn(\"ms\"),Dn=Mn(\"s\"),Rn=Mn(\"m\"),Nn=Mn(\"h\"),Fn=Mn(\"d\"),An=Mn(\"w\"),Un=Mn(\"M\"),Yn=Mn(\"Q\"),Ln=Mn(\"y\");function In(e){return function(){return this.isValid()?this._data[e]:NaN}}var Wn=In(\"milliseconds\"),zn=In(\"seconds\"),Vn=In(\"minutes\"),Hn=In(\"hours\"),Bn=In(\"days\"),$n=In(\"months\"),qn=In(\"years\"),Gn=Math.round,Qn={ss:44,s:45,m:45,h:22,d:26,M:11},Zn=Math.abs;function Kn(e){return(e>0)-(e<0)||+e}function Xn(){if(!this.isValid())return this.localeData().invalidDate();var e,t,n=Zn(this._milliseconds)/1e3,r=Zn(this._days),o=Zn(this._months);e=w(n/60),t=w(e/60),n%=60,e%=60;var i=w(o/12),a=o%=12,u=r,l=t,s=e,c=n?n.toFixed(3).replace(/\\.?0+$/,\"\"):\"\",f=this.asSeconds();if(!f)return\"P0D\";var d=f<0?\"-\":\"\",p=Kn(this._months)!==Kn(f)?\"-\":\"\",h=Kn(this._days)!==Kn(f)?\"-\":\"\",m=Kn(this._milliseconds)!==Kn(f)?\"-\":\"\";return d+\"P\"+(i?p+i+\"Y\":\"\")+(a?p+a+\"M\":\"\")+(u?h+u+\"D\":\"\")+(l||s||c?\"T\":\"\")+(l?m+l+\"H\":\"\")+(s?m+s+\"M\":\"\")+(c?m+c+\"S\":\"\")}var Jn=Ft.prototype;return Jn.isValid=function(){return this._isValid},Jn.abs=function(){var e=this._data;return this._milliseconds=Tn(this._milliseconds),this._days=Tn(this._days),this._months=Tn(this._months),e.milliseconds=Tn(e.milliseconds),e.seconds=Tn(e.seconds),e.minutes=Tn(e.minutes),e.hours=Tn(e.hours),e.months=Tn(e.months),e.years=Tn(e.years),this},Jn.add=function(e,t){return On(this,e,t,1)},Jn.subtract=function(e,t){return On(this,e,t,-1)},Jn.as=function(e){if(!this.isValid())return NaN;var t,n,r=this._milliseconds;if(\"month\"===(e=N(e))||\"quarter\"===e||\"year\"===e)switch(t=this._days+r/864e5,n=this._months+En(t),e){case\"month\":return n;case\"quarter\":return n/3;case\"year\":return n/12}else switch(t=this._days+Math.round(Pn(this._months)),e){case\"week\":return t/7+r/6048e5;case\"day\":return t+r/864e5;case\"hour\":return 24*t+r/36e5;case\"minute\":return 1440*t+r/6e4;case\"second\":return 86400*t+r/1e3;case\"millisecond\":return Math.floor(864e5*t)+r;default:throw new Error(\"Unknown unit \"+e)}},Jn.asMilliseconds=jn,Jn.asSeconds=Dn,Jn.asMinutes=Rn,Jn.asHours=Nn,Jn.asDays=Fn,Jn.asWeeks=An,Jn.asMonths=Un,Jn.asQuarters=Yn,Jn.asYears=Ln,Jn.valueOf=function(){return this.isValid()?this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*k(this._months/12):NaN},Jn._bubble=function(){var e,t,n,r,o,i=this._milliseconds,a=this._days,u=this._months,l=this._data;return i>=0&&a>=0&&u>=0||i<=0&&a<=0&&u<=0||(i+=864e5*Cn(Pn(u)+a),a=0,u=0),l.milliseconds=i%1e3,e=w(i/1e3),l.seconds=e%60,t=w(e/60),l.minutes=t%60,n=w(t/60),l.hours=n%24,a+=w(n/24),o=w(En(a)),u+=o,a-=Cn(Pn(o)),r=w(u/12),u%=12,l.days=a,l.months=u,l.years=r,this},Jn.clone=function(){return $t(this)},Jn.get=function(e){return e=N(e),this.isValid()?this[e+\"s\"]():NaN},Jn.milliseconds=Wn,Jn.seconds=zn,Jn.minutes=Vn,Jn.hours=Hn,Jn.days=Bn,Jn.weeks=function(){return w(this.days()/7)},Jn.months=$n,Jn.years=qn,Jn.humanize=function(e){if(!this.isValid())return this.localeData().invalidDate();var t=this.localeData(),n=function(e,t,n){var r=$t(e).abs(),o=Gn(r.as(\"s\")),i=Gn(r.as(\"m\")),a=Gn(r.as(\"h\")),u=Gn(r.as(\"d\")),l=Gn(r.as(\"M\")),s=Gn(r.as(\"y\")),c=o<=Qn.ss&&[\"s\",o]||o<Qn.s&&[\"ss\",o]||i<=1&&[\"m\"]||i<Qn.m&&[\"mm\",i]||a<=1&&[\"h\"]||a<Qn.h&&[\"hh\",a]||u<=1&&[\"d\"]||u<Qn.d&&[\"dd\",u]||l<=1&&[\"M\"]||l<Qn.M&&[\"MM\",l]||s<=1&&[\"y\"]||[\"yy\",s];return c[2]=t,c[3]=+e>0,c[4]=n,function(e,t,n,r,o){return o.relativeTime(t||1,!!n,e,r)}.apply(null,c)}(this,!e,t);return e&&(n=t.pastFuture(+this,n)),t.postformat(n)},Jn.toISOString=Xn,Jn.toString=Xn,Jn.toJSON=Xn,Jn.locale=en,Jn.localeData=nn,Jn.toIsoString=T(\"toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)\",Xn),Jn.lang=tn,V(\"X\",0,0,\"unix\"),V(\"x\",0,0,\"valueOf\"),se(\"x\",oe),se(\"X\",/[+-]?\\d+(\\.\\d{1,3})?/),pe(\"X\",function(e,t,n){n._d=new Date(1e3*parseFloat(e,10))}),pe(\"x\",function(e,t,n){n._d=new Date(k(e))}),r.version=\"2.24.0\",t=Mt,r.fn=bn,r.min=function(){return Rt(\"isBefore\",[].slice.call(arguments,0))},r.max=function(){return Rt(\"isAfter\",[].slice.call(arguments,0))},r.now=function(){return Date.now?Date.now():+new Date},r.utc=d,r.unix=function(e){return Mt(1e3*e)},r.months=function(e,t){return xn(e,t,\"months\")},r.isDate=l,r.locale=ct,r.invalid=m,r.duration=$t,r.isMoment=_,r.weekdays=function(e,t,n){return Sn(e,t,n,\"weekdays\")},r.parseZone=function(){return Mt.apply(null,arguments).parseZone()},r.localeData=dt,r.isDuration=At,r.monthsShort=function(e,t){return xn(e,t,\"monthsShort\")},r.weekdaysMin=function(e,t,n){return Sn(e,t,n,\"weekdaysMin\")},r.defineLocale=ft,r.updateLocale=function(e,t){if(null!=t){var n,r,o=it;null!=(r=st(e))&&(o=r._config),t=M(o,t),(n=new j(t)).parentLocale=at[e],at[e]=n,ct(e)}else null!=at[e]&&(null!=at[e].parentLocale?at[e]=at[e].parentLocale:null!=at[e]&&delete at[e]);return at[e]},r.locales=function(){return O(at)},r.weekdaysShort=function(e,t,n){return Sn(e,t,n,\"weekdaysShort\")},r.normalizeUnits=N,r.relativeTimeRounding=function(e){return void 0===e?Gn:\"function\"===typeof e&&(Gn=e,!0)},r.relativeTimeThreshold=function(e,t){return void 0!==Qn[e]&&(void 0===t?Qn[e]:(Qn[e]=t,\"s\"===e&&(Qn.ss=t-1),!0))},r.calendarFormat=function(e,t){var n=e.diff(t,\"days\",!0);return n<-6?\"sameElse\":n<-1?\"lastWeek\":n<0?\"lastDay\":n<1?\"sameDay\":n<2?\"nextDay\":n<7?\"nextWeek\":\"sameElse\"},r.prototype=bn,r.HTML5_FMT={DATETIME_LOCAL:\"YYYY-MM-DDTHH:mm\",DATETIME_LOCAL_SECONDS:\"YYYY-MM-DDTHH:mm:ss\",DATETIME_LOCAL_MS:\"YYYY-MM-DDTHH:mm:ss.SSS\",DATE:\"YYYY-MM-DD\",TIME:\"HH:mm\",TIME_SECONDS:\"HH:mm:ss\",TIME_MS:\"HH:mm:ss.SSS\",WEEK:\"GGGG-[W]WW\",MONTH:\"YYYY-MM\"},r}()}).call(this,n(67)(e))},function(e,t,n){\"use strict\";var r=n(19),o=n.n(r),i={},a=0;t.a=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2];\"string\"===typeof t&&(t={path:t});var r=t,u=r.path,l=r.exact,s=void 0!==l&&l,c=r.strict,f=void 0!==c&&c,d=r.sensitive;if(null==u)return n;var p=function(e,t){var n=\"\"+t.end+t.strict+t.sensitive,r=i[n]||(i[n]={});if(r[e])return r[e];var u=[],l={re:o()(e,u,t),keys:u};return a<1e4&&(r[e]=l,a++),l}(u,{end:s,strict:f,sensitive:void 0!==d&&d}),h=p.re,m=p.keys,y=h.exec(e);if(!y)return null;var v=y[0],g=y.slice(1),b=e===v;return s&&!b?null:{path:u,url:\"/\"===u&&\"\"===v?\"/\":v,isExact:b,params:m.reduce(function(e,t,n){return e[t.name]=g[n],e},{})}}},function(e,t,n){var r=n(66);e.exports=p,e.exports.parse=i,e.exports.compile=function(e,t){return u(i(e,t))},e.exports.tokensToFunction=u,e.exports.tokensToRegExp=d;var o=new RegExp([\"(\\\\\\\\.)\",\"([\\\\/.])?(?:(?:\\\\:(\\\\w+)(?:\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))?|\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))([+*?])?|(\\\\*))\"].join(\"|\"),\"g\");function i(e,t){for(var n,r=[],i=0,a=0,u=\"\",c=t&&t.delimiter||\"/\";null!=(n=o.exec(e));){var f=n[0],d=n[1],p=n.index;if(u+=e.slice(a,p),a=p+f.length,d)u+=d[1];else{var h=e[a],m=n[2],y=n[3],v=n[4],g=n[5],b=n[6],_=n[7];u&&(r.push(u),u=\"\");var w=null!=m&&null!=h&&h!==m,k=\"+\"===b||\"*\"===b,x=\"?\"===b||\"*\"===b,S=n[2]||c,T=v||g;r.push({name:y||i++,prefix:m||\"\",delimiter:S,optional:x,repeat:k,partial:w,asterisk:!!_,pattern:T?s(T):_?\".*\":\"[^\"+l(S)+\"]+?\"})}}return a<e.length&&(u+=e.substr(a)),u&&r.push(u),r}function a(e){return encodeURI(e).replace(/[\\/?#]/g,function(e){return\"%\"+e.charCodeAt(0).toString(16).toUpperCase()})}function u(e){for(var t=new Array(e.length),n=0;n<e.length;n++)\"object\"===typeof e[n]&&(t[n]=new RegExp(\"^(?:\"+e[n].pattern+\")$\"));return function(n,o){for(var i=\"\",u=n||{},l=(o||{}).pretty?a:encodeURIComponent,s=0;s<e.length;s++){var c=e[s];if(\"string\"!==typeof c){var f,d=u[c.name];if(null==d){if(c.optional){c.partial&&(i+=c.prefix);continue}throw new TypeError('Expected \"'+c.name+'\" to be defined')}if(r(d)){if(!c.repeat)throw new TypeError('Expected \"'+c.name+'\" to not repeat, but received `'+JSON.stringify(d)+\"`\");if(0===d.length){if(c.optional)continue;throw new TypeError('Expected \"'+c.name+'\" to not be empty')}for(var p=0;p<d.length;p++){if(f=l(d[p]),!t[s].test(f))throw new TypeError('Expected all \"'+c.name+'\" to match \"'+c.pattern+'\", but received `'+JSON.stringify(f)+\"`\");i+=(0===p?c.prefix:c.delimiter)+f}}else{if(f=c.asterisk?encodeURI(d).replace(/[?#]/g,function(e){return\"%\"+e.charCodeAt(0).toString(16).toUpperCase()}):l(d),!t[s].test(f))throw new TypeError('Expected \"'+c.name+'\" to match \"'+c.pattern+'\", but received \"'+f+'\"');i+=c.prefix+f}}else i+=c}return i}}function l(e){return e.replace(/([.+*?=^!:${}()[\\]|\\/\\\\])/g,\"\\\\$1\")}function s(e){return e.replace(/([=!:$\\/()])/g,\"\\\\$1\")}function c(e,t){return e.keys=t,e}function f(e){return e.sensitive?\"\":\"i\"}function d(e,t,n){r(t)||(n=t||n,t=[]);for(var o=(n=n||{}).strict,i=!1!==n.end,a=\"\",u=0;u<e.length;u++){var s=e[u];if(\"string\"===typeof s)a+=l(s);else{var d=l(s.prefix),p=\"(?:\"+s.pattern+\")\";t.push(s),s.repeat&&(p+=\"(?:\"+d+p+\")*\"),a+=p=s.optional?s.partial?d+\"(\"+p+\")?\":\"(?:\"+d+\"(\"+p+\"))?\":d+\"(\"+p+\")\"}}var h=l(n.delimiter||\"/\"),m=a.slice(-h.length)===h;return o||(a=(m?a.slice(0,-h.length):a)+\"(?:\"+h+\"(?=$))?\"),a+=i?\"$\":o&&m?\"\":\"(?=\"+h+\"|$)\",c(new RegExp(\"^\"+a,f(n)),t)}function p(e,t,n){return r(t)||(n=t||n,t=[]),n=n||{},e instanceof RegExp?function(e,t){var n=e.source.match(/\\((?!\\?)/g);if(n)for(var r=0;r<n.length;r++)t.push({name:r,prefix:null,delimiter:null,optional:!1,repeat:!1,partial:!1,asterisk:!1,pattern:null});return c(e,t)}(e,t):r(e)?function(e,t,n){for(var r=[],o=0;o<e.length;o++)r.push(p(e[o],t,n).source);return c(new RegExp(\"(?:\"+r.join(\"|\")+\")\",f(n)),t)}(e,t,n):function(e,t,n){return d(i(e,n),t,n)}(e,t,n)}},function(e,t,n){\"use strict\";(function(e){var n=\"object\"==typeof e&&e&&e.Object===Object&&e;t.a=n}).call(this,n(24))},function(e,t,n){\"use strict\";(function(e){var r=n(6),o=n(37),i=\"object\"==typeof exports&&exports&&!exports.nodeType&&exports,a=i&&\"object\"==typeof e&&e&&!e.nodeType&&e,u=a&&a.exports===i?r.a.Buffer:void 0,l=(u?u.isBuffer:void 0)||o.a;t.a=l}).call(this,n(26)(e))},function(e,t,n){\"use strict\";var r=Array.isArray,o=Object.keys,i=Object.prototype.hasOwnProperty,a=\"undefined\"!==typeof Element;e.exports=function(e,t){try{return function e(t,n){if(t===n)return!0;if(t&&n&&\"object\"==typeof t&&\"object\"==typeof n){var u,l,s,c=r(t),f=r(n);if(c&&f){if((l=t.length)!=n.length)return!1;for(u=l;0!==u--;)if(!e(t[u],n[u]))return!1;return!0}if(c!=f)return!1;var d=t instanceof Date,p=n instanceof Date;if(d!=p)return!1;if(d&&p)return t.getTime()==n.getTime();var h=t instanceof RegExp,m=n instanceof RegExp;if(h!=m)return!1;if(h&&m)return t.toString()==n.toString();var y=o(t);if((l=y.length)!==o(n).length)return!1;for(u=l;0!==u--;)if(!i.call(n,y[u]))return!1;if(a&&t instanceof Element&&n instanceof Element)return t===n;for(u=l;0!==u--;)if((\"_owner\"!==(s=y[u])||!t.$$typeof)&&!e(t[s],n[s]))return!1;return!0}return t!==t&&n!==n}(e,t)}catch(n){if(n.message&&n.message.match(/stack|recursion/i)||-2146828260===n.number)return console.warn(\"Warning: react-fast-compare does not handle circular references.\",n.name,n.message),!1;throw n}}},,function(e,t){var n;n=function(){return this}();try{n=n||new Function(\"return this\")()}catch(r){\"object\"===typeof window&&(n=window)}e.exports=n},function(e,t,n){\"use strict\";(function(t){var r=n(13),o=n(49),i={\"Content-Type\":\"application/x-www-form-urlencoded\"};function a(e,t){!r.isUndefined(e)&&r.isUndefined(e[\"Content-Type\"])&&(e[\"Content-Type\"]=t)}var u={adapter:function(){var e;return\"undefined\"!==typeof XMLHttpRequest?e=n(30):\"undefined\"!==typeof t&&(e=n(30)),e}(),transformRequest:[function(e,t){return o(t,\"Content-Type\"),r.isFormData(e)||r.isArrayBuffer(e)||r.isBuffer(e)||r.isStream(e)||r.isFile(e)||r.isBlob(e)?e:r.isArrayBufferView(e)?e.buffer:r.isURLSearchParams(e)?(a(t,\"application/x-www-form-urlencoded;charset=utf-8\"),e.toString()):r.isObject(e)?(a(t,\"application/json;charset=utf-8\"),JSON.stringify(e)):e}],transformResponse:[function(e){if(\"string\"===typeof e)try{e=JSON.parse(e)}catch(t){}return e}],timeout:0,xsrfCookieName:\"XSRF-TOKEN\",xsrfHeaderName:\"X-XSRF-TOKEN\",maxContentLength:-1,validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:\"application/json, text/plain, */*\"}}};r.forEach([\"delete\",\"get\",\"head\"],function(e){u.headers[e]={}}),r.forEach([\"post\",\"put\",\"patch\"],function(e){u.headers[e]=r.merge(i)}),e.exports=u}).call(this,n(48))},function(e,t){e.exports=function(e){if(!e.webpackPolyfill){var t=Object.create(e);t.children||(t.children=[]),Object.defineProperty(t,\"loaded\",{enumerable:!0,get:function(){return t.l}}),Object.defineProperty(t,\"id\",{enumerable:!0,get:function(){return t.i}}),Object.defineProperty(t,\"exports\",{enumerable:!0}),t.webpackPolyfill=1}return t}},function(e,t,n){\"use strict\";var r={childContextTypes:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},o={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},i=Object.defineProperty,a=Object.getOwnPropertyNames,u=Object.getOwnPropertySymbols,l=Object.getOwnPropertyDescriptor,s=Object.getPrototypeOf,c=s&&s(Object);e.exports=function e(t,n,f){if(\"string\"!==typeof n){if(c){var d=s(n);d&&d!==c&&e(t,d,f)}var p=a(n);u&&(p=p.concat(u(n)));for(var h=0;h<p.length;++h){var m=p[h];if(!r[m]&&!o[m]&&(!f||!f[m])){var y=l(n,m);try{i(t,m,y)}catch(v){}}}return t}return t}},function(e,t,n){\"use strict\";var r=Object.getOwnPropertySymbols,o=Object.prototype.hasOwnProperty,i=Object.prototype.propertyIsEnumerable;e.exports=function(){try{if(!Object.assign)return!1;var e=new String(\"abc\");if(e[5]=\"de\",\"5\"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t[\"_\"+String.fromCharCode(n)]=n;if(\"0123456789\"!==Object.getOwnPropertyNames(t).map(function(e){return t[e]}).join(\"\"))return!1;var r={};return\"abcdefghijklmnopqrst\".split(\"\").forEach(function(e){r[e]=e}),\"abcdefghijklmnopqrst\"===Object.keys(Object.assign({},r)).join(\"\")}catch(o){return!1}}()?Object.assign:function(e,t){for(var n,a,u=function(e){if(null===e||void 0===e)throw new TypeError(\"Object.assign cannot be called with null or undefined\");return Object(e)}(e),l=1;l<arguments.length;l++){for(var s in n=Object(arguments[l]))o.call(n,s)&&(u[s]=n[s]);if(r){a=r(n);for(var c=0;c<a.length;c++)i.call(n,a[c])&&(u[a[c]]=n[a[c]])}}return u}},function(e,t,n){\"use strict\";e.exports=function(e,t){return function(){for(var n=new Array(arguments.length),r=0;r<n.length;r++)n[r]=arguments[r];return e.apply(t,n)}}},function(e,t,n){\"use strict\";var r=n(13),o=n(50),i=n(52),a=n(53),u=n(54),l=n(31),s=\"undefined\"!==typeof window&&window.btoa&&window.btoa.bind(window)||n(55);e.exports=function(e){return new Promise(function(t,c){var f=e.data,d=e.headers;r.isFormData(f)&&delete d[\"Content-Type\"];var p=new XMLHttpRequest,h=\"onreadystatechange\",m=!1;if(\"undefined\"===typeof window||!window.XDomainRequest||\"withCredentials\"in p||u(e.url)||(p=new window.XDomainRequest,h=\"onload\",m=!0,p.onprogress=function(){},p.ontimeout=function(){}),e.auth){var y=e.auth.username||\"\",v=e.auth.password||\"\";d.Authorization=\"Basic \"+s(y+\":\"+v)}if(p.open(e.method.toUpperCase(),i(e.url,e.params,e.paramsSerializer),!0),p.timeout=e.timeout,p[h]=function(){if(p&&(4===p.readyState||m)&&(0!==p.status||p.responseURL&&0===p.responseURL.indexOf(\"file:\"))){var n=\"getAllResponseHeaders\"in p?a(p.getAllResponseHeaders()):null,r={data:e.responseType&&\"text\"!==e.responseType?p.response:p.responseText,status:1223===p.status?204:p.status,statusText:1223===p.status?\"No Content\":p.statusText,headers:n,config:e,request:p};o(t,c,r),p=null}},p.onerror=function(){c(l(\"Network Error\",e,null,p)),p=null},p.ontimeout=function(){c(l(\"timeout of \"+e.timeout+\"ms exceeded\",e,\"ECONNABORTED\",p)),p=null},r.isStandardBrowserEnv()){var g=n(56),b=(e.withCredentials||u(e.url))&&e.xsrfCookieName?g.read(e.xsrfCookieName):void 0;b&&(d[e.xsrfHeaderName]=b)}if(\"setRequestHeader\"in p&&r.forEach(d,function(e,t){\"undefined\"===typeof f&&\"content-type\"===t.toLowerCase()?delete d[t]:p.setRequestHeader(t,e)}),e.withCredentials&&(p.withCredentials=!0),e.responseType)try{p.responseType=e.responseType}catch(_){if(\"json\"!==e.responseType)throw _}\"function\"===typeof e.onDownloadProgress&&p.addEventListener(\"progress\",e.onDownloadProgress),\"function\"===typeof e.onUploadProgress&&p.upload&&p.upload.addEventListener(\"progress\",e.onUploadProgress),e.cancelToken&&e.cancelToken.promise.then(function(e){p&&(p.abort(),c(e),p=null)}),void 0===f&&(f=null),p.send(f)})}},function(e,t,n){\"use strict\";var r=n(51);e.exports=function(e,t,n,o,i){var a=new Error(e);return r(a,t,n,o,i)}},function(e,t,n){\"use strict\";e.exports=function(e){return!(!e||!e.__CANCEL__)}},function(e,t,n){\"use strict\";function r(e){this.message=e}r.prototype.toString=function(){return\"Cancel\"+(this.message?\": \"+this.message:\"\")},r.prototype.__CANCEL__=!0,e.exports=r},function(e,t,n){\"use strict\";!function e(){if(\"undefined\"!==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&\"function\"===typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}(),e.exports=n(41)},function(e,t,n){\"use strict\";function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}n.d(t,\"a\",function(){return r})},function(e,t,n){\"use strict\";t.__esModule=!0;var r=i(n(0)),o=i(n(68));function i(e){return e&&e.__esModule?e:{default:e}}t.default=r.default.createContext||o.default,e.exports=t.default},function(e,t,n){\"use strict\";t.a=function(){return!1}},function(e,t,n){\"use strict\";(function(e){var r=n(6),o=\"object\"==typeof exports&&exports&&!exports.nodeType&&exports,i=o&&\"object\"==typeof e&&e&&!e.nodeType&&e,a=i&&i.exports===o?r.a.Buffer:void 0,u=a?a.allocUnsafe:void 0;t.a=function(e,t){if(t)return e.slice();var n=e.length,r=u?u(n):new e.constructor(n);return e.copy(r),r}}).call(this,n(26)(e))},,function(e,t,n){\"use strict\";var r=n(28),o=\"function\"===typeof Symbol&&Symbol.for,i=o?Symbol.for(\"react.element\"):60103,a=o?Symbol.for(\"react.portal\"):60106,u=o?Symbol.for(\"react.fragment\"):60107,l=o?Symbol.for(\"react.strict_mode\"):60108,s=o?Symbol.for(\"react.profiler\"):60114,c=o?Symbol.for(\"react.provider\"):60109,f=o?Symbol.for(\"react.context\"):60110,d=o?Symbol.for(\"react.concurrent_mode\"):60111,p=o?Symbol.for(\"react.forward_ref\"):60112,h=o?Symbol.for(\"react.suspense\"):60113,m=o?Symbol.for(\"react.memo\"):60115,y=o?Symbol.for(\"react.lazy\"):60116,v=\"function\"===typeof Symbol&&Symbol.iterator;function g(e){for(var t=arguments.length-1,n=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+e,r=0;r<t;r++)n+=\"&args[]=\"+encodeURIComponent(arguments[r+1]);!function(e,t,n,r,o,i,a,u){if(!e){if(e=void 0,void 0===t)e=Error(\"Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.\");else{var l=[n,r,o,i,a,u],s=0;(e=Error(t.replace(/%s/g,function(){return l[s++]}))).name=\"Invariant Violation\"}throw e.framesToPop=1,e}}(!1,\"Minified React error #\"+e+\"; visit %s for the full message or use the non-minified dev environment for full errors and additional helpful warnings. \",n)}var b={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},_={};function w(e,t,n){this.props=e,this.context=t,this.refs=_,this.updater=n||b}function k(){}function x(e,t,n){this.props=e,this.context=t,this.refs=_,this.updater=n||b}w.prototype.isReactComponent={},w.prototype.setState=function(e,t){\"object\"!==typeof e&&\"function\"!==typeof e&&null!=e&&g(\"85\"),this.updater.enqueueSetState(this,e,t,\"setState\")},w.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,\"forceUpdate\")},k.prototype=w.prototype;var S=x.prototype=new k;S.constructor=x,r(S,w.prototype),S.isPureReactComponent=!0;var T={current:null},O={current:null},C=Object.prototype.hasOwnProperty,E={key:!0,ref:!0,__self:!0,__source:!0};function P(e,t,n){var r=void 0,o={},a=null,u=null;if(null!=t)for(r in void 0!==t.ref&&(u=t.ref),void 0!==t.key&&(a=\"\"+t.key),t)C.call(t,r)&&!E.hasOwnProperty(r)&&(o[r]=t[r]);var l=arguments.length-2;if(1===l)o.children=n;else if(1<l){for(var s=Array(l),c=0;c<l;c++)s[c]=arguments[c+2];o.children=s}if(e&&e.defaultProps)for(r in l=e.defaultProps)void 0===o[r]&&(o[r]=l[r]);return{$$typeof:i,type:e,key:a,ref:u,props:o,_owner:O.current}}function M(e){return\"object\"===typeof e&&null!==e&&e.$$typeof===i}var j=/\\/+/g,D=[];function R(e,t,n,r){if(D.length){var o=D.pop();return o.result=e,o.keyPrefix=t,o.func=n,o.context=r,o.count=0,o}return{result:e,keyPrefix:t,func:n,context:r,count:0}}function N(e){e.result=null,e.keyPrefix=null,e.func=null,e.context=null,e.count=0,10>D.length&&D.push(e)}function F(e,t,n){return null==e?0:function e(t,n,r,o){var u=typeof t;\"undefined\"!==u&&\"boolean\"!==u||(t=null);var l=!1;if(null===t)l=!0;else switch(u){case\"string\":case\"number\":l=!0;break;case\"object\":switch(t.$$typeof){case i:case a:l=!0}}if(l)return r(o,t,\"\"===n?\".\"+A(t,0):n),1;if(l=0,n=\"\"===n?\".\":n+\":\",Array.isArray(t))for(var s=0;s<t.length;s++){var c=n+A(u=t[s],s);l+=e(u,c,r,o)}else if(c=null===t||\"object\"!==typeof t?null:\"function\"===typeof(c=v&&t[v]||t[\"@@iterator\"])?c:null,\"function\"===typeof c)for(t=c.call(t),s=0;!(u=t.next()).done;)l+=e(u=u.value,c=n+A(u,s++),r,o);else\"object\"===u&&g(\"31\",\"[object Object]\"===(r=\"\"+t)?\"object with keys {\"+Object.keys(t).join(\", \")+\"}\":r,\"\");return l}(e,\"\",t,n)}function A(e,t){return\"object\"===typeof e&&null!==e&&null!=e.key?function(e){var t={\"=\":\"=0\",\":\":\"=2\"};return\"$\"+(\"\"+e).replace(/[=:]/g,function(e){return t[e]})}(e.key):t.toString(36)}function U(e,t){e.func.call(e.context,t,e.count++)}function Y(e,t,n){var r=e.result,o=e.keyPrefix;e=e.func.call(e.context,t,e.count++),Array.isArray(e)?L(e,r,n,function(e){return e}):null!=e&&(M(e)&&(e=function(e,t){return{$$typeof:i,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}}(e,o+(!e.key||t&&t.key===e.key?\"\":(\"\"+e.key).replace(j,\"$&/\")+\"/\")+n)),r.push(e))}function L(e,t,n,r,o){var i=\"\";null!=n&&(i=(\"\"+n).replace(j,\"$&/\")+\"/\"),F(e,Y,t=R(t,i,r,o)),N(t)}function I(){var e=T.current;return null===e&&g(\"307\"),e}var W={Children:{map:function(e,t,n){if(null==e)return e;var r=[];return L(e,r,null,t,n),r},forEach:function(e,t,n){if(null==e)return e;F(e,U,t=R(null,null,t,n)),N(t)},count:function(e){return F(e,function(){return null},null)},toArray:function(e){var t=[];return L(e,t,null,function(e){return e}),t},only:function(e){return M(e)||g(\"143\"),e}},createRef:function(){return{current:null}},Component:w,PureComponent:x,createContext:function(e,t){return void 0===t&&(t=null),(e={$$typeof:f,_calculateChangedBits:t,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null}).Provider={$$typeof:c,_context:e},e.Consumer=e},forwardRef:function(e){return{$$typeof:p,render:e}},lazy:function(e){return{$$typeof:y,_ctor:e,_status:-1,_result:null}},memo:function(e,t){return{$$typeof:m,type:e,compare:void 0===t?null:t}},useCallback:function(e,t){return I().useCallback(e,t)},useContext:function(e,t){return I().useContext(e,t)},useEffect:function(e,t){return I().useEffect(e,t)},useImperativeHandle:function(e,t,n){return I().useImperativeHandle(e,t,n)},useDebugValue:function(){},useLayoutEffect:function(e,t){return I().useLayoutEffect(e,t)},useMemo:function(e,t){return I().useMemo(e,t)},useReducer:function(e,t,n){return I().useReducer(e,t,n)},useRef:function(e){return I().useRef(e)},useState:function(e){return I().useState(e)},Fragment:u,StrictMode:l,Suspense:h,createElement:P,cloneElement:function(e,t,n){(null===e||void 0===e)&&g(\"267\",e);var o=void 0,a=r({},e.props),u=e.key,l=e.ref,s=e._owner;if(null!=t){void 0!==t.ref&&(l=t.ref,s=O.current),void 0!==t.key&&(u=\"\"+t.key);var c=void 0;for(o in e.type&&e.type.defaultProps&&(c=e.type.defaultProps),t)C.call(t,o)&&!E.hasOwnProperty(o)&&(a[o]=void 0===t[o]&&void 0!==c?c[o]:t[o])}if(1===(o=arguments.length-2))a.children=n;else if(1<o){c=Array(o);for(var f=0;f<o;f++)c[f]=arguments[f+2];a.children=c}return{$$typeof:i,type:e.type,key:u,ref:l,props:a,_owner:s}},createFactory:function(e){var t=P.bind(null,e);return t.type=e,t},isValidElement:M,version:\"16.8.4\",unstable_ConcurrentMode:d,unstable_Profiler:s,__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:{ReactCurrentDispatcher:T,ReactCurrentOwner:O,assign:r}},z={default:W},V=z&&W||z;e.exports=V.default||V},function(e,t,n){\"use strict\";var r=n(0),o=n(28),i=n(42);function a(e){for(var t=arguments.length-1,n=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+e,r=0;r<t;r++)n+=\"&args[]=\"+encodeURIComponent(arguments[r+1]);!function(e,t,n,r,o,i,a,u){if(!e){if(e=void 0,void 0===t)e=Error(\"Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.\");else{var l=[n,r,o,i,a,u],s=0;(e=Error(t.replace(/%s/g,function(){return l[s++]}))).name=\"Invariant Violation\"}throw e.framesToPop=1,e}}(!1,\"Minified React error #\"+e+\"; visit %s for the full message or use the non-minified dev environment for full errors and additional helpful warnings. \",n)}r||a(\"227\");var u=!1,l=null,s=!1,c=null,f={onError:function(e){u=!0,l=e}};function d(e,t,n,r,o,i,a,s,c){u=!1,l=null,function(e,t,n,r,o,i,a,u,l){var s=Array.prototype.slice.call(arguments,3);try{t.apply(n,s)}catch(c){this.onError(c)}}.apply(f,arguments)}var p=null,h={};function m(){if(p)for(var e in h){var t=h[e],n=p.indexOf(e);if(-1<n||a(\"96\",e),!v[n])for(var r in t.extractEvents||a(\"97\",e),v[n]=t,n=t.eventTypes){var o=void 0,i=n[r],u=t,l=r;g.hasOwnProperty(l)&&a(\"99\",l),g[l]=i;var s=i.phasedRegistrationNames;if(s){for(o in s)s.hasOwnProperty(o)&&y(s[o],u,l);o=!0}else i.registrationName?(y(i.registrationName,u,l),o=!0):o=!1;o||a(\"98\",r,e)}}}function y(e,t,n){b[e]&&a(\"100\",e),b[e]=t,_[e]=t.eventTypes[n].dependencies}var v=[],g={},b={},_={},w=null,k=null,x=null;function S(e,t,n){var r=e.type||\"unknown-event\";e.currentTarget=x(n),function(e,t,n,r,o,i,f,p,h){if(d.apply(this,arguments),u){if(u){var m=l;u=!1,l=null}else a(\"198\"),m=void 0;s||(s=!0,c=m)}}(r,t,void 0,e),e.currentTarget=null}function T(e,t){return null==t&&a(\"30\"),null==e?t:Array.isArray(e)?Array.isArray(t)?(e.push.apply(e,t),e):(e.push(t),e):Array.isArray(t)?[e].concat(t):[e,t]}function O(e,t,n){Array.isArray(e)?e.forEach(t,n):e&&t.call(n,e)}var C=null;function E(e){if(e){var t=e._dispatchListeners,n=e._dispatchInstances;if(Array.isArray(t))for(var r=0;r<t.length&&!e.isPropagationStopped();r++)S(e,t[r],n[r]);else t&&S(e,t,n);e._dispatchListeners=null,e._dispatchInstances=null,e.isPersistent()||e.constructor.release(e)}}var P={injectEventPluginOrder:function(e){p&&a(\"101\"),p=Array.prototype.slice.call(e),m()},injectEventPluginsByName:function(e){var t,n=!1;for(t in e)if(e.hasOwnProperty(t)){var r=e[t];h.hasOwnProperty(t)&&h[t]===r||(h[t]&&a(\"102\",t),h[t]=r,n=!0)}n&&m()}};function M(e,t){var n=e.stateNode;if(!n)return null;var r=w(n);if(!r)return null;n=r[t];e:switch(t){case\"onClick\":case\"onClickCapture\":case\"onDoubleClick\":case\"onDoubleClickCapture\":case\"onMouseDown\":case\"onMouseDownCapture\":case\"onMouseMove\":case\"onMouseMoveCapture\":case\"onMouseUp\":case\"onMouseUpCapture\":(r=!r.disabled)||(r=!(\"button\"===(e=e.type)||\"input\"===e||\"select\"===e||\"textarea\"===e)),e=!r;break e;default:e=!1}return e?null:(n&&\"function\"!==typeof n&&a(\"231\",t,typeof n),n)}function j(e){if(null!==e&&(C=T(C,e)),e=C,C=null,e&&(O(e,E),C&&a(\"95\"),s))throw e=c,s=!1,c=null,e}var D=Math.random().toString(36).slice(2),R=\"__reactInternalInstance$\"+D,N=\"__reactEventHandlers$\"+D;function F(e){if(e[R])return e[R];for(;!e[R];){if(!e.parentNode)return null;e=e.parentNode}return 5===(e=e[R]).tag||6===e.tag?e:null}function A(e){return!(e=e[R])||5!==e.tag&&6!==e.tag?null:e}function U(e){if(5===e.tag||6===e.tag)return e.stateNode;a(\"33\")}function Y(e){return e[N]||null}function L(e){do{e=e.return}while(e&&5!==e.tag);return e||null}function I(e,t,n){(t=M(e,n.dispatchConfig.phasedRegistrationNames[t]))&&(n._dispatchListeners=T(n._dispatchListeners,t),n._dispatchInstances=T(n._dispatchInstances,e))}function W(e){if(e&&e.dispatchConfig.phasedRegistrationNames){for(var t=e._targetInst,n=[];t;)n.push(t),t=L(t);for(t=n.length;0<t--;)I(n[t],\"captured\",e);for(t=0;t<n.length;t++)I(n[t],\"bubbled\",e)}}function z(e,t,n){e&&n&&n.dispatchConfig.registrationName&&(t=M(e,n.dispatchConfig.registrationName))&&(n._dispatchListeners=T(n._dispatchListeners,t),n._dispatchInstances=T(n._dispatchInstances,e))}function V(e){e&&e.dispatchConfig.registrationName&&z(e._targetInst,null,e)}function H(e){O(e,W)}var B=!(\"undefined\"===typeof window||!window.document||!window.document.createElement);function $(e,t){var n={};return n[e.toLowerCase()]=t.toLowerCase(),n[\"Webkit\"+e]=\"webkit\"+t,n[\"Moz\"+e]=\"moz\"+t,n}var q={animationend:$(\"Animation\",\"AnimationEnd\"),animationiteration:$(\"Animation\",\"AnimationIteration\"),animationstart:$(\"Animation\",\"AnimationStart\"),transitionend:$(\"Transition\",\"TransitionEnd\")},G={},Q={};function Z(e){if(G[e])return G[e];if(!q[e])return e;var t,n=q[e];for(t in n)if(n.hasOwnProperty(t)&&t in Q)return G[e]=n[t];return e}B&&(Q=document.createElement(\"div\").style,\"AnimationEvent\"in window||(delete q.animationend.animation,delete q.animationiteration.animation,delete q.animationstart.animation),\"TransitionEvent\"in window||delete q.transitionend.transition);var K=Z(\"animationend\"),X=Z(\"animationiteration\"),J=Z(\"animationstart\"),ee=Z(\"transitionend\"),te=\"abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange seeked seeking stalled suspend timeupdate volumechange waiting\".split(\" \"),ne=null,re=null,oe=null;function ie(){if(oe)return oe;var e,t,n=re,r=n.length,o=\"value\"in ne?ne.value:ne.textContent,i=o.length;for(e=0;e<r&&n[e]===o[e];e++);var a=r-e;for(t=1;t<=a&&n[r-t]===o[i-t];t++);return oe=o.slice(e,1<t?1-t:void 0)}function ae(){return!0}function ue(){return!1}function le(e,t,n,r){for(var o in this.dispatchConfig=e,this._targetInst=t,this.nativeEvent=n,e=this.constructor.Interface)e.hasOwnProperty(o)&&((t=e[o])?this[o]=t(n):\"target\"===o?this.target=r:this[o]=n[o]);return this.isDefaultPrevented=(null!=n.defaultPrevented?n.defaultPrevented:!1===n.returnValue)?ae:ue,this.isPropagationStopped=ue,this}function se(e,t,n,r){if(this.eventPool.length){var o=this.eventPool.pop();return this.call(o,e,t,n,r),o}return new this(e,t,n,r)}function ce(e){e instanceof this||a(\"279\"),e.destructor(),10>this.eventPool.length&&this.eventPool.push(e)}function fe(e){e.eventPool=[],e.getPooled=se,e.release=ce}o(le.prototype,{preventDefault:function(){this.defaultPrevented=!0;var e=this.nativeEvent;e&&(e.preventDefault?e.preventDefault():\"unknown\"!==typeof e.returnValue&&(e.returnValue=!1),this.isDefaultPrevented=ae)},stopPropagation:function(){var e=this.nativeEvent;e&&(e.stopPropagation?e.stopPropagation():\"unknown\"!==typeof e.cancelBubble&&(e.cancelBubble=!0),this.isPropagationStopped=ae)},persist:function(){this.isPersistent=ae},isPersistent:ue,destructor:function(){var e,t=this.constructor.Interface;for(e in t)this[e]=null;this.nativeEvent=this._targetInst=this.dispatchConfig=null,this.isPropagationStopped=this.isDefaultPrevented=ue,this._dispatchInstances=this._dispatchListeners=null}}),le.Interface={type:null,target:null,currentTarget:function(){return null},eventPhase:null,bubbles:null,cancelable:null,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:null,isTrusted:null},le.extend=function(e){function t(){}function n(){return r.apply(this,arguments)}var r=this;t.prototype=r.prototype;var i=new t;return o(i,n.prototype),n.prototype=i,n.prototype.constructor=n,n.Interface=o({},r.Interface,e),n.extend=r.extend,fe(n),n},fe(le);var de=le.extend({data:null}),pe=le.extend({data:null}),he=[9,13,27,32],me=B&&\"CompositionEvent\"in window,ye=null;B&&\"documentMode\"in document&&(ye=document.documentMode);var ve=B&&\"TextEvent\"in window&&!ye,ge=B&&(!me||ye&&8<ye&&11>=ye),be=String.fromCharCode(32),_e={beforeInput:{phasedRegistrationNames:{bubbled:\"onBeforeInput\",captured:\"onBeforeInputCapture\"},dependencies:[\"compositionend\",\"keypress\",\"textInput\",\"paste\"]},compositionEnd:{phasedRegistrationNames:{bubbled:\"onCompositionEnd\",captured:\"onCompositionEndCapture\"},dependencies:\"blur compositionend keydown keypress keyup mousedown\".split(\" \")},compositionStart:{phasedRegistrationNames:{bubbled:\"onCompositionStart\",captured:\"onCompositionStartCapture\"},dependencies:\"blur compositionstart keydown keypress keyup mousedown\".split(\" \")},compositionUpdate:{phasedRegistrationNames:{bubbled:\"onCompositionUpdate\",captured:\"onCompositionUpdateCapture\"},dependencies:\"blur compositionupdate keydown keypress keyup mousedown\".split(\" \")}},we=!1;function ke(e,t){switch(e){case\"keyup\":return-1!==he.indexOf(t.keyCode);case\"keydown\":return 229!==t.keyCode;case\"keypress\":case\"mousedown\":case\"blur\":return!0;default:return!1}}function xe(e){return\"object\"===typeof(e=e.detail)&&\"data\"in e?e.data:null}var Se=!1;var Te={eventTypes:_e,extractEvents:function(e,t,n,r){var o=void 0,i=void 0;if(me)e:{switch(e){case\"compositionstart\":o=_e.compositionStart;break e;case\"compositionend\":o=_e.compositionEnd;break e;case\"compositionupdate\":o=_e.compositionUpdate;break e}o=void 0}else Se?ke(e,n)&&(o=_e.compositionEnd):\"keydown\"===e&&229===n.keyCode&&(o=_e.compositionStart);return o?(ge&&\"ko\"!==n.locale&&(Se||o!==_e.compositionStart?o===_e.compositionEnd&&Se&&(i=ie()):(re=\"value\"in(ne=r)?ne.value:ne.textContent,Se=!0)),o=de.getPooled(o,t,n,r),i?o.data=i:null!==(i=xe(n))&&(o.data=i),H(o),i=o):i=null,(e=ve?function(e,t){switch(e){case\"compositionend\":return xe(t);case\"keypress\":return 32!==t.which?null:(we=!0,be);case\"textInput\":return(e=t.data)===be&&we?null:e;default:return null}}(e,n):function(e,t){if(Se)return\"compositionend\"===e||!me&&ke(e,t)?(e=ie(),oe=re=ne=null,Se=!1,e):null;switch(e){case\"paste\":return null;case\"keypress\":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1<t.char.length)return t.char;if(t.which)return String.fromCharCode(t.which)}return null;case\"compositionend\":return ge&&\"ko\"!==t.locale?null:t.data;default:return null}}(e,n))?((t=pe.getPooled(_e.beforeInput,t,n,r)).data=e,H(t)):t=null,null===i?t:null===t?i:[i,t]}},Oe=null,Ce=null,Ee=null;function Pe(e){if(e=k(e)){\"function\"!==typeof Oe&&a(\"280\");var t=w(e.stateNode);Oe(e.stateNode,e.type,t)}}function Me(e){Ce?Ee?Ee.push(e):Ee=[e]:Ce=e}function je(){if(Ce){var e=Ce,t=Ee;if(Ee=Ce=null,Pe(e),t)for(e=0;e<t.length;e++)Pe(t[e])}}function De(e,t){return e(t)}function Re(e,t,n){return e(t,n)}function Ne(){}var Fe=!1;function Ae(e,t){if(Fe)return e(t);Fe=!0;try{return De(e,t)}finally{Fe=!1,(null!==Ce||null!==Ee)&&(Ne(),je())}}var Ue={color:!0,date:!0,datetime:!0,\"datetime-local\":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function Ye(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return\"input\"===t?!!Ue[e.type]:\"textarea\"===t}function Le(e){return(e=e.target||e.srcElement||window).correspondingUseElement&&(e=e.correspondingUseElement),3===e.nodeType?e.parentNode:e}function Ie(e){if(!B)return!1;var t=(e=\"on\"+e)in document;return t||((t=document.createElement(\"div\")).setAttribute(e,\"return;\"),t=\"function\"===typeof t[e]),t}function We(e){var t=e.type;return(e=e.nodeName)&&\"input\"===e.toLowerCase()&&(\"checkbox\"===t||\"radio\"===t)}function ze(e){e._valueTracker||(e._valueTracker=function(e){var t=We(e)?\"checked\":\"value\",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=\"\"+e[t];if(!e.hasOwnProperty(t)&&\"undefined\"!==typeof n&&\"function\"===typeof n.get&&\"function\"===typeof n.set){var o=n.get,i=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return o.call(this)},set:function(e){r=\"\"+e,i.call(this,e)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(e){r=\"\"+e},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}(e))}function Ve(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r=\"\";return e&&(r=We(e)?e.checked?\"true\":\"false\":e.value),(e=r)!==n&&(t.setValue(e),!0)}var He=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;He.hasOwnProperty(\"ReactCurrentDispatcher\")||(He.ReactCurrentDispatcher={current:null});var Be=/^(.*)[\\\\\\/]/,$e=\"function\"===typeof Symbol&&Symbol.for,qe=$e?Symbol.for(\"react.element\"):60103,Ge=$e?Symbol.for(\"react.portal\"):60106,Qe=$e?Symbol.for(\"react.fragment\"):60107,Ze=$e?Symbol.for(\"react.strict_mode\"):60108,Ke=$e?Symbol.for(\"react.profiler\"):60114,Xe=$e?Symbol.for(\"react.provider\"):60109,Je=$e?Symbol.for(\"react.context\"):60110,et=$e?Symbol.for(\"react.concurrent_mode\"):60111,tt=$e?Symbol.for(\"react.forward_ref\"):60112,nt=$e?Symbol.for(\"react.suspense\"):60113,rt=$e?Symbol.for(\"react.memo\"):60115,ot=$e?Symbol.for(\"react.lazy\"):60116,it=\"function\"===typeof Symbol&&Symbol.iterator;function at(e){return null===e||\"object\"!==typeof e?null:\"function\"===typeof(e=it&&e[it]||e[\"@@iterator\"])?e:null}function ut(e){if(null==e)return null;if(\"function\"===typeof e)return e.displayName||e.name||null;if(\"string\"===typeof e)return e;switch(e){case et:return\"ConcurrentMode\";case Qe:return\"Fragment\";case Ge:return\"Portal\";case Ke:return\"Profiler\";case Ze:return\"StrictMode\";case nt:return\"Suspense\"}if(\"object\"===typeof e)switch(e.$$typeof){case Je:return\"Context.Consumer\";case Xe:return\"Context.Provider\";case tt:var t=e.render;return t=t.displayName||t.name||\"\",e.displayName||(\"\"!==t?\"ForwardRef(\"+t+\")\":\"ForwardRef\");case rt:return ut(e.type);case ot:if(e=1===e._status?e._result:null)return ut(e)}return null}function lt(e){var t=\"\";do{e:switch(e.tag){case 3:case 4:case 6:case 7:case 10:case 9:var n=\"\";break e;default:var r=e._debugOwner,o=e._debugSource,i=ut(e.type);n=null,r&&(n=ut(r.type)),r=i,i=\"\",o?i=\" (at \"+o.fileName.replace(Be,\"\")+\":\"+o.lineNumber+\")\":n&&(i=\" (created by \"+n+\")\"),n=\"\\n    in \"+(r||\"Unknown\")+i}t+=n,e=e.return}while(e);return t}var st=/^[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$/,ct=Object.prototype.hasOwnProperty,ft={},dt={};function pt(e,t,n,r,o){this.acceptsBooleans=2===t||3===t||4===t,this.attributeName=r,this.attributeNamespace=o,this.mustUseProperty=n,this.propertyName=e,this.type=t}var ht={};\"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style\".split(\" \").forEach(function(e){ht[e]=new pt(e,0,!1,e,null)}),[[\"acceptCharset\",\"accept-charset\"],[\"className\",\"class\"],[\"htmlFor\",\"for\"],[\"httpEquiv\",\"http-equiv\"]].forEach(function(e){var t=e[0];ht[t]=new pt(t,1,!1,e[1],null)}),[\"contentEditable\",\"draggable\",\"spellCheck\",\"value\"].forEach(function(e){ht[e]=new pt(e,2,!1,e.toLowerCase(),null)}),[\"autoReverse\",\"externalResourcesRequired\",\"focusable\",\"preserveAlpha\"].forEach(function(e){ht[e]=new pt(e,2,!1,e,null)}),\"allowFullScreen async autoFocus autoPlay controls default defer disabled formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope\".split(\" \").forEach(function(e){ht[e]=new pt(e,3,!1,e.toLowerCase(),null)}),[\"checked\",\"multiple\",\"muted\",\"selected\"].forEach(function(e){ht[e]=new pt(e,3,!0,e,null)}),[\"capture\",\"download\"].forEach(function(e){ht[e]=new pt(e,4,!1,e,null)}),[\"cols\",\"rows\",\"size\",\"span\"].forEach(function(e){ht[e]=new pt(e,6,!1,e,null)}),[\"rowSpan\",\"start\"].forEach(function(e){ht[e]=new pt(e,5,!1,e.toLowerCase(),null)});var mt=/[\\-:]([a-z])/g;function yt(e){return e[1].toUpperCase()}function vt(e,t,n,r){var o=ht.hasOwnProperty(t)?ht[t]:null;(null!==o?0===o.type:!r&&(2<t.length&&(\"o\"===t[0]||\"O\"===t[0])&&(\"n\"===t[1]||\"N\"===t[1])))||(function(e,t,n,r){if(null===t||\"undefined\"===typeof t||function(e,t,n,r){if(null!==n&&0===n.type)return!1;switch(typeof t){case\"function\":case\"symbol\":return!0;case\"boolean\":return!r&&(null!==n?!n.acceptsBooleans:\"data-\"!==(e=e.toLowerCase().slice(0,5))&&\"aria-\"!==e);default:return!1}}(e,t,n,r))return!0;if(r)return!1;if(null!==n)switch(n.type){case 3:return!t;case 4:return!1===t;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}(t,n,o,r)&&(n=null),r||null===o?function(e){return!!ct.call(dt,e)||!ct.call(ft,e)&&(st.test(e)?dt[e]=!0:(ft[e]=!0,!1))}(t)&&(null===n?e.removeAttribute(t):e.setAttribute(t,\"\"+n)):o.mustUseProperty?e[o.propertyName]=null===n?3!==o.type&&\"\":n:(t=o.attributeName,r=o.attributeNamespace,null===n?e.removeAttribute(t):(n=3===(o=o.type)||4===o&&!0===n?\"\":\"\"+n,r?e.setAttributeNS(r,t,n):e.setAttribute(t,n))))}function gt(e){switch(typeof e){case\"boolean\":case\"number\":case\"object\":case\"string\":case\"undefined\":return e;default:return\"\"}}function bt(e,t){var n=t.checked;return o({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=n?n:e._wrapperState.initialChecked})}function _t(e,t){var n=null==t.defaultValue?\"\":t.defaultValue,r=null!=t.checked?t.checked:t.defaultChecked;n=gt(null!=t.value?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:\"checkbox\"===t.type||\"radio\"===t.type?null!=t.checked:null!=t.value}}function wt(e,t){null!=(t=t.checked)&&vt(e,\"checked\",t,!1)}function kt(e,t){wt(e,t);var n=gt(t.value),r=t.type;if(null!=n)\"number\"===r?(0===n&&\"\"===e.value||e.value!=n)&&(e.value=\"\"+n):e.value!==\"\"+n&&(e.value=\"\"+n);else if(\"submit\"===r||\"reset\"===r)return void e.removeAttribute(\"value\");t.hasOwnProperty(\"value\")?St(e,t.type,n):t.hasOwnProperty(\"defaultValue\")&&St(e,t.type,gt(t.defaultValue)),null==t.checked&&null!=t.defaultChecked&&(e.defaultChecked=!!t.defaultChecked)}function xt(e,t,n){if(t.hasOwnProperty(\"value\")||t.hasOwnProperty(\"defaultValue\")){var r=t.type;if(!(\"submit\"!==r&&\"reset\"!==r||void 0!==t.value&&null!==t.value))return;t=\"\"+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}\"\"!==(n=e.name)&&(e.name=\"\"),e.defaultChecked=!e.defaultChecked,e.defaultChecked=!!e._wrapperState.initialChecked,\"\"!==n&&(e.name=n)}function St(e,t,n){\"number\"===t&&e.ownerDocument.activeElement===e||(null==n?e.defaultValue=\"\"+e._wrapperState.initialValue:e.defaultValue!==\"\"+n&&(e.defaultValue=\"\"+n))}\"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height\".split(\" \").forEach(function(e){var t=e.replace(mt,yt);ht[t]=new pt(t,1,!1,e,null)}),\"xlink:actuate xlink:arcrole xlink:href xlink:role xlink:show xlink:title xlink:type\".split(\" \").forEach(function(e){var t=e.replace(mt,yt);ht[t]=new pt(t,1,!1,e,\"http://www.w3.org/1999/xlink\")}),[\"xml:base\",\"xml:lang\",\"xml:space\"].forEach(function(e){var t=e.replace(mt,yt);ht[t]=new pt(t,1,!1,e,\"http://www.w3.org/XML/1998/namespace\")}),[\"tabIndex\",\"crossOrigin\"].forEach(function(e){ht[e]=new pt(e,1,!1,e.toLowerCase(),null)});var Tt={change:{phasedRegistrationNames:{bubbled:\"onChange\",captured:\"onChangeCapture\"},dependencies:\"blur change click focus input keydown keyup selectionchange\".split(\" \")}};function Ot(e,t,n){return(e=le.getPooled(Tt.change,e,t,n)).type=\"change\",Me(n),H(e),e}var Ct=null,Et=null;function Pt(e){j(e)}function Mt(e){if(Ve(U(e)))return e}function jt(e,t){if(\"change\"===e)return t}var Dt=!1;function Rt(){Ct&&(Ct.detachEvent(\"onpropertychange\",Nt),Et=Ct=null)}function Nt(e){\"value\"===e.propertyName&&Mt(Et)&&Ae(Pt,e=Ot(Et,e,Le(e)))}function Ft(e,t,n){\"focus\"===e?(Rt(),Et=n,(Ct=t).attachEvent(\"onpropertychange\",Nt)):\"blur\"===e&&Rt()}function At(e){if(\"selectionchange\"===e||\"keyup\"===e||\"keydown\"===e)return Mt(Et)}function Ut(e,t){if(\"click\"===e)return Mt(t)}function Yt(e,t){if(\"input\"===e||\"change\"===e)return Mt(t)}B&&(Dt=Ie(\"input\")&&(!document.documentMode||9<document.documentMode));var Lt={eventTypes:Tt,_isInputEventSupported:Dt,extractEvents:function(e,t,n,r){var o=t?U(t):window,i=void 0,a=void 0,u=o.nodeName&&o.nodeName.toLowerCase();if(\"select\"===u||\"input\"===u&&\"file\"===o.type?i=jt:Ye(o)?Dt?i=Yt:(i=At,a=Ft):(u=o.nodeName)&&\"input\"===u.toLowerCase()&&(\"checkbox\"===o.type||\"radio\"===o.type)&&(i=Ut),i&&(i=i(e,t)))return Ot(i,n,r);a&&a(e,o,t),\"blur\"===e&&(e=o._wrapperState)&&e.controlled&&\"number\"===o.type&&St(o,\"number\",o.value)}},It=le.extend({view:null,detail:null}),Wt={Alt:\"altKey\",Control:\"ctrlKey\",Meta:\"metaKey\",Shift:\"shiftKey\"};function zt(e){var t=this.nativeEvent;return t.getModifierState?t.getModifierState(e):!!(e=Wt[e])&&!!t[e]}function Vt(){return zt}var Ht=0,Bt=0,$t=!1,qt=!1,Gt=It.extend({screenX:null,screenY:null,clientX:null,clientY:null,pageX:null,pageY:null,ctrlKey:null,shiftKey:null,altKey:null,metaKey:null,getModifierState:Vt,button:null,buttons:null,relatedTarget:function(e){return e.relatedTarget||(e.fromElement===e.srcElement?e.toElement:e.fromElement)},movementX:function(e){if(\"movementX\"in e)return e.movementX;var t=Ht;return Ht=e.screenX,$t?\"mousemove\"===e.type?e.screenX-t:0:($t=!0,0)},movementY:function(e){if(\"movementY\"in e)return e.movementY;var t=Bt;return Bt=e.screenY,qt?\"mousemove\"===e.type?e.screenY-t:0:(qt=!0,0)}}),Qt=Gt.extend({pointerId:null,width:null,height:null,pressure:null,tangentialPressure:null,tiltX:null,tiltY:null,twist:null,pointerType:null,isPrimary:null}),Zt={mouseEnter:{registrationName:\"onMouseEnter\",dependencies:[\"mouseout\",\"mouseover\"]},mouseLeave:{registrationName:\"onMouseLeave\",dependencies:[\"mouseout\",\"mouseover\"]},pointerEnter:{registrationName:\"onPointerEnter\",dependencies:[\"pointerout\",\"pointerover\"]},pointerLeave:{registrationName:\"onPointerLeave\",dependencies:[\"pointerout\",\"pointerover\"]}},Kt={eventTypes:Zt,extractEvents:function(e,t,n,r){var o=\"mouseover\"===e||\"pointerover\"===e,i=\"mouseout\"===e||\"pointerout\"===e;if(o&&(n.relatedTarget||n.fromElement)||!i&&!o)return null;if(o=r.window===r?r:(o=r.ownerDocument)?o.defaultView||o.parentWindow:window,i?(i=t,t=(t=n.relatedTarget||n.toElement)?F(t):null):i=null,i===t)return null;var a=void 0,u=void 0,l=void 0,s=void 0;\"mouseout\"===e||\"mouseover\"===e?(a=Gt,u=Zt.mouseLeave,l=Zt.mouseEnter,s=\"mouse\"):\"pointerout\"!==e&&\"pointerover\"!==e||(a=Qt,u=Zt.pointerLeave,l=Zt.pointerEnter,s=\"pointer\");var c=null==i?o:U(i);if(o=null==t?o:U(t),(e=a.getPooled(u,i,n,r)).type=s+\"leave\",e.target=c,e.relatedTarget=o,(n=a.getPooled(l,t,n,r)).type=s+\"enter\",n.target=o,n.relatedTarget=c,r=t,i&&r)e:{for(o=r,s=0,a=t=i;a;a=L(a))s++;for(a=0,l=o;l;l=L(l))a++;for(;0<s-a;)t=L(t),s--;for(;0<a-s;)o=L(o),a--;for(;s--;){if(t===o||t===o.alternate)break e;t=L(t),o=L(o)}t=null}else t=null;for(o=t,t=[];i&&i!==o&&(null===(s=i.alternate)||s!==o);)t.push(i),i=L(i);for(i=[];r&&r!==o&&(null===(s=r.alternate)||s!==o);)i.push(r),r=L(r);for(r=0;r<t.length;r++)z(t[r],\"bubbled\",e);for(r=i.length;0<r--;)z(i[r],\"captured\",n);return[e,n]}};function Xt(e,t){return e===t&&(0!==e||1/e===1/t)||e!==e&&t!==t}var Jt=Object.prototype.hasOwnProperty;function en(e,t){if(Xt(e,t))return!0;if(\"object\"!==typeof e||null===e||\"object\"!==typeof t||null===t)return!1;var n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(r=0;r<n.length;r++)if(!Jt.call(t,n[r])||!Xt(e[n[r]],t[n[r]]))return!1;return!0}function tn(e){var t=e;if(e.alternate)for(;t.return;)t=t.return;else{if(0!==(2&t.effectTag))return 1;for(;t.return;)if(0!==(2&(t=t.return).effectTag))return 1}return 3===t.tag?2:3}function nn(e){2!==tn(e)&&a(\"188\")}function rn(e){if(!(e=function(e){var t=e.alternate;if(!t)return 3===(t=tn(e))&&a(\"188\"),1===t?null:e;for(var n=e,r=t;;){var o=n.return,i=o?o.alternate:null;if(!o||!i)break;if(o.child===i.child){for(var u=o.child;u;){if(u===n)return nn(o),e;if(u===r)return nn(o),t;u=u.sibling}a(\"188\")}if(n.return!==r.return)n=o,r=i;else{u=!1;for(var l=o.child;l;){if(l===n){u=!0,n=o,r=i;break}if(l===r){u=!0,r=o,n=i;break}l=l.sibling}if(!u){for(l=i.child;l;){if(l===n){u=!0,n=i,r=o;break}if(l===r){u=!0,r=i,n=o;break}l=l.sibling}u||a(\"189\")}}n.alternate!==r&&a(\"190\")}return 3!==n.tag&&a(\"188\"),n.stateNode.current===n?e:t}(e)))return null;for(var t=e;;){if(5===t.tag||6===t.tag)return t;if(t.child)t.child.return=t,t=t.child;else{if(t===e)break;for(;!t.sibling;){if(!t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}}return null}var on=le.extend({animationName:null,elapsedTime:null,pseudoElement:null}),an=le.extend({clipboardData:function(e){return\"clipboardData\"in e?e.clipboardData:window.clipboardData}}),un=It.extend({relatedTarget:null});function ln(e){var t=e.keyCode;return\"charCode\"in e?0===(e=e.charCode)&&13===t&&(e=13):e=t,10===e&&(e=13),32<=e||13===e?e:0}var sn={Esc:\"Escape\",Spacebar:\" \",Left:\"ArrowLeft\",Up:\"ArrowUp\",Right:\"ArrowRight\",Down:\"ArrowDown\",Del:\"Delete\",Win:\"OS\",Menu:\"ContextMenu\",Apps:\"ContextMenu\",Scroll:\"ScrollLock\",MozPrintableKey:\"Unidentified\"},cn={8:\"Backspace\",9:\"Tab\",12:\"Clear\",13:\"Enter\",16:\"Shift\",17:\"Control\",18:\"Alt\",19:\"Pause\",20:\"CapsLock\",27:\"Escape\",32:\" \",33:\"PageUp\",34:\"PageDown\",35:\"End\",36:\"Home\",37:\"ArrowLeft\",38:\"ArrowUp\",39:\"ArrowRight\",40:\"ArrowDown\",45:\"Insert\",46:\"Delete\",112:\"F1\",113:\"F2\",114:\"F3\",115:\"F4\",116:\"F5\",117:\"F6\",118:\"F7\",119:\"F8\",120:\"F9\",121:\"F10\",122:\"F11\",123:\"F12\",144:\"NumLock\",145:\"ScrollLock\",224:\"Meta\"},fn=It.extend({key:function(e){if(e.key){var t=sn[e.key]||e.key;if(\"Unidentified\"!==t)return t}return\"keypress\"===e.type?13===(e=ln(e))?\"Enter\":String.fromCharCode(e):\"keydown\"===e.type||\"keyup\"===e.type?cn[e.keyCode]||\"Unidentified\":\"\"},location:null,ctrlKey:null,shiftKey:null,altKey:null,metaKey:null,repeat:null,locale:null,getModifierState:Vt,charCode:function(e){return\"keypress\"===e.type?ln(e):0},keyCode:function(e){return\"keydown\"===e.type||\"keyup\"===e.type?e.keyCode:0},which:function(e){return\"keypress\"===e.type?ln(e):\"keydown\"===e.type||\"keyup\"===e.type?e.keyCode:0}}),dn=Gt.extend({dataTransfer:null}),pn=It.extend({touches:null,targetTouches:null,changedTouches:null,altKey:null,metaKey:null,ctrlKey:null,shiftKey:null,getModifierState:Vt}),hn=le.extend({propertyName:null,elapsedTime:null,pseudoElement:null}),mn=Gt.extend({deltaX:function(e){return\"deltaX\"in e?e.deltaX:\"wheelDeltaX\"in e?-e.wheelDeltaX:0},deltaY:function(e){return\"deltaY\"in e?e.deltaY:\"wheelDeltaY\"in e?-e.wheelDeltaY:\"wheelDelta\"in e?-e.wheelDelta:0},deltaZ:null,deltaMode:null}),yn=[[\"abort\",\"abort\"],[K,\"animationEnd\"],[X,\"animationIteration\"],[J,\"animationStart\"],[\"canplay\",\"canPlay\"],[\"canplaythrough\",\"canPlayThrough\"],[\"drag\",\"drag\"],[\"dragenter\",\"dragEnter\"],[\"dragexit\",\"dragExit\"],[\"dragleave\",\"dragLeave\"],[\"dragover\",\"dragOver\"],[\"durationchange\",\"durationChange\"],[\"emptied\",\"emptied\"],[\"encrypted\",\"encrypted\"],[\"ended\",\"ended\"],[\"error\",\"error\"],[\"gotpointercapture\",\"gotPointerCapture\"],[\"load\",\"load\"],[\"loadeddata\",\"loadedData\"],[\"loadedmetadata\",\"loadedMetadata\"],[\"loadstart\",\"loadStart\"],[\"lostpointercapture\",\"lostPointerCapture\"],[\"mousemove\",\"mouseMove\"],[\"mouseout\",\"mouseOut\"],[\"mouseover\",\"mouseOver\"],[\"playing\",\"playing\"],[\"pointermove\",\"pointerMove\"],[\"pointerout\",\"pointerOut\"],[\"pointerover\",\"pointerOver\"],[\"progress\",\"progress\"],[\"scroll\",\"scroll\"],[\"seeking\",\"seeking\"],[\"stalled\",\"stalled\"],[\"suspend\",\"suspend\"],[\"timeupdate\",\"timeUpdate\"],[\"toggle\",\"toggle\"],[\"touchmove\",\"touchMove\"],[ee,\"transitionEnd\"],[\"waiting\",\"waiting\"],[\"wheel\",\"wheel\"]],vn={},gn={};function bn(e,t){var n=e[0],r=\"on\"+((e=e[1])[0].toUpperCase()+e.slice(1));t={phasedRegistrationNames:{bubbled:r,captured:r+\"Capture\"},dependencies:[n],isInteractive:t},vn[e]=t,gn[n]=t}[[\"blur\",\"blur\"],[\"cancel\",\"cancel\"],[\"click\",\"click\"],[\"close\",\"close\"],[\"contextmenu\",\"contextMenu\"],[\"copy\",\"copy\"],[\"cut\",\"cut\"],[\"auxclick\",\"auxClick\"],[\"dblclick\",\"doubleClick\"],[\"dragend\",\"dragEnd\"],[\"dragstart\",\"dragStart\"],[\"drop\",\"drop\"],[\"focus\",\"focus\"],[\"input\",\"input\"],[\"invalid\",\"invalid\"],[\"keydown\",\"keyDown\"],[\"keypress\",\"keyPress\"],[\"keyup\",\"keyUp\"],[\"mousedown\",\"mouseDown\"],[\"mouseup\",\"mouseUp\"],[\"paste\",\"paste\"],[\"pause\",\"pause\"],[\"play\",\"play\"],[\"pointercancel\",\"pointerCancel\"],[\"pointerdown\",\"pointerDown\"],[\"pointerup\",\"pointerUp\"],[\"ratechange\",\"rateChange\"],[\"reset\",\"reset\"],[\"seeked\",\"seeked\"],[\"submit\",\"submit\"],[\"touchcancel\",\"touchCancel\"],[\"touchend\",\"touchEnd\"],[\"touchstart\",\"touchStart\"],[\"volumechange\",\"volumeChange\"]].forEach(function(e){bn(e,!0)}),yn.forEach(function(e){bn(e,!1)});var _n={eventTypes:vn,isInteractiveTopLevelEventType:function(e){return void 0!==(e=gn[e])&&!0===e.isInteractive},extractEvents:function(e,t,n,r){var o=gn[e];if(!o)return null;switch(e){case\"keypress\":if(0===ln(n))return null;case\"keydown\":case\"keyup\":e=fn;break;case\"blur\":case\"focus\":e=un;break;case\"click\":if(2===n.button)return null;case\"auxclick\":case\"dblclick\":case\"mousedown\":case\"mousemove\":case\"mouseup\":case\"mouseout\":case\"mouseover\":case\"contextmenu\":e=Gt;break;case\"drag\":case\"dragend\":case\"dragenter\":case\"dragexit\":case\"dragleave\":case\"dragover\":case\"dragstart\":case\"drop\":e=dn;break;case\"touchcancel\":case\"touchend\":case\"touchmove\":case\"touchstart\":e=pn;break;case K:case X:case J:e=on;break;case ee:e=hn;break;case\"scroll\":e=It;break;case\"wheel\":e=mn;break;case\"copy\":case\"cut\":case\"paste\":e=an;break;case\"gotpointercapture\":case\"lostpointercapture\":case\"pointercancel\":case\"pointerdown\":case\"pointermove\":case\"pointerout\":case\"pointerover\":case\"pointerup\":e=Qt;break;default:e=le}return H(t=e.getPooled(o,t,n,r)),t}},wn=_n.isInteractiveTopLevelEventType,kn=[];function xn(e){var t=e.targetInst,n=t;do{if(!n){e.ancestors.push(n);break}var r;for(r=n;r.return;)r=r.return;if(!(r=3!==r.tag?null:r.stateNode.containerInfo))break;e.ancestors.push(n),n=F(r)}while(n);for(n=0;n<e.ancestors.length;n++){t=e.ancestors[n];var o=Le(e.nativeEvent);r=e.topLevelType;for(var i=e.nativeEvent,a=null,u=0;u<v.length;u++){var l=v[u];l&&(l=l.extractEvents(r,t,i,o))&&(a=T(a,l))}j(a)}}var Sn=!0;function Tn(e,t){if(!t)return null;var n=(wn(e)?Cn:En).bind(null,e);t.addEventListener(e,n,!1)}function On(e,t){if(!t)return null;var n=(wn(e)?Cn:En).bind(null,e);t.addEventListener(e,n,!0)}function Cn(e,t){Re(En,e,t)}function En(e,t){if(Sn){var n=Le(t);if(null===(n=F(n))||\"number\"!==typeof n.tag||2===tn(n)||(n=null),kn.length){var r=kn.pop();r.topLevelType=e,r.nativeEvent=t,r.targetInst=n,e=r}else e={topLevelType:e,nativeEvent:t,targetInst:n,ancestors:[]};try{Ae(xn,e)}finally{e.topLevelType=null,e.nativeEvent=null,e.targetInst=null,e.ancestors.length=0,10>kn.length&&kn.push(e)}}}var Pn={},Mn=0,jn=\"_reactListenersID\"+(\"\"+Math.random()).slice(2);function Dn(e){return Object.prototype.hasOwnProperty.call(e,jn)||(e[jn]=Mn++,Pn[e[jn]]={}),Pn[e[jn]]}function Rn(e){if(\"undefined\"===typeof(e=e||(\"undefined\"!==typeof document?document:void 0)))return null;try{return e.activeElement||e.body}catch(t){return e.body}}function Nn(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function Fn(e,t){var n,r=Nn(e);for(e=0;r;){if(3===r.nodeType){if(n=e+r.textContent.length,e<=t&&n>=t)return{node:r,offset:t-e};e=n}e:{for(;r;){if(r.nextSibling){r=r.nextSibling;break e}r=r.parentNode}r=void 0}r=Nn(r)}}function An(){for(var e=window,t=Rn();t instanceof e.HTMLIFrameElement;){try{e=t.contentDocument.defaultView}catch(n){break}t=Rn(e.document)}return t}function Un(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(\"input\"===t&&(\"text\"===e.type||\"search\"===e.type||\"tel\"===e.type||\"url\"===e.type||\"password\"===e.type)||\"textarea\"===t||\"true\"===e.contentEditable)}function Yn(e){var t=An(),n=e.focusedElem,r=e.selectionRange;if(t!==n&&n&&n.ownerDocument&&function e(t,n){return!(!t||!n)&&(t===n||(!t||3!==t.nodeType)&&(n&&3===n.nodeType?e(t,n.parentNode):\"contains\"in t?t.contains(n):!!t.compareDocumentPosition&&!!(16&t.compareDocumentPosition(n))))}(n.ownerDocument.documentElement,n)){if(null!==r&&Un(n))if(t=r.start,void 0===(e=r.end)&&(e=t),\"selectionStart\"in n)n.selectionStart=t,n.selectionEnd=Math.min(e,n.value.length);else if((e=(t=n.ownerDocument||document)&&t.defaultView||window).getSelection){e=e.getSelection();var o=n.textContent.length,i=Math.min(r.start,o);r=void 0===r.end?i:Math.min(r.end,o),!e.extend&&i>r&&(o=r,r=i,i=o),o=Fn(n,i);var a=Fn(n,r);o&&a&&(1!==e.rangeCount||e.anchorNode!==o.node||e.anchorOffset!==o.offset||e.focusNode!==a.node||e.focusOffset!==a.offset)&&((t=t.createRange()).setStart(o.node,o.offset),e.removeAllRanges(),i>r?(e.addRange(t),e.extend(a.node,a.offset)):(t.setEnd(a.node,a.offset),e.addRange(t)))}for(t=[],e=n;e=e.parentNode;)1===e.nodeType&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for(\"function\"===typeof n.focus&&n.focus(),n=0;n<t.length;n++)(e=t[n]).element.scrollLeft=e.left,e.element.scrollTop=e.top}}var Ln=B&&\"documentMode\"in document&&11>=document.documentMode,In={select:{phasedRegistrationNames:{bubbled:\"onSelect\",captured:\"onSelectCapture\"},dependencies:\"blur contextmenu dragend focus keydown keyup mousedown mouseup selectionchange\".split(\" \")}},Wn=null,zn=null,Vn=null,Hn=!1;function Bn(e,t){var n=t.window===t?t.document:9===t.nodeType?t:t.ownerDocument;return Hn||null==Wn||Wn!==Rn(n)?null:(\"selectionStart\"in(n=Wn)&&Un(n)?n={start:n.selectionStart,end:n.selectionEnd}:n={anchorNode:(n=(n.ownerDocument&&n.ownerDocument.defaultView||window).getSelection()).anchorNode,anchorOffset:n.anchorOffset,focusNode:n.focusNode,focusOffset:n.focusOffset},Vn&&en(Vn,n)?null:(Vn=n,(e=le.getPooled(In.select,zn,e,t)).type=\"select\",e.target=Wn,H(e),e))}var $n={eventTypes:In,extractEvents:function(e,t,n,r){var o,i=r.window===r?r.document:9===r.nodeType?r:r.ownerDocument;if(!(o=!i)){e:{i=Dn(i),o=_.onSelect;for(var a=0;a<o.length;a++){var u=o[a];if(!i.hasOwnProperty(u)||!i[u]){i=!1;break e}}i=!0}o=!i}if(o)return null;switch(i=t?U(t):window,e){case\"focus\":(Ye(i)||\"true\"===i.contentEditable)&&(Wn=i,zn=t,Vn=null);break;case\"blur\":Vn=zn=Wn=null;break;case\"mousedown\":Hn=!0;break;case\"contextmenu\":case\"mouseup\":case\"dragend\":return Hn=!1,Bn(n,r);case\"selectionchange\":if(Ln)break;case\"keydown\":case\"keyup\":return Bn(n,r)}return null}};function qn(e,t){return e=o({children:void 0},t),(t=function(e){var t=\"\";return r.Children.forEach(e,function(e){null!=e&&(t+=e)}),t}(t.children))&&(e.children=t),e}function Gn(e,t,n,r){if(e=e.options,t){t={};for(var o=0;o<n.length;o++)t[\"$\"+n[o]]=!0;for(n=0;n<e.length;n++)o=t.hasOwnProperty(\"$\"+e[n].value),e[n].selected!==o&&(e[n].selected=o),o&&r&&(e[n].defaultSelected=!0)}else{for(n=\"\"+gt(n),t=null,o=0;o<e.length;o++){if(e[o].value===n)return e[o].selected=!0,void(r&&(e[o].defaultSelected=!0));null!==t||e[o].disabled||(t=e[o])}null!==t&&(t.selected=!0)}}function Qn(e,t){return null!=t.dangerouslySetInnerHTML&&a(\"91\"),o({},t,{value:void 0,defaultValue:void 0,children:\"\"+e._wrapperState.initialValue})}function Zn(e,t){var n=t.value;null==n&&(n=t.defaultValue,null!=(t=t.children)&&(null!=n&&a(\"92\"),Array.isArray(t)&&(1>=t.length||a(\"93\"),t=t[0]),n=t),null==n&&(n=\"\")),e._wrapperState={initialValue:gt(n)}}function Kn(e,t){var n=gt(t.value),r=gt(t.defaultValue);null!=n&&((n=\"\"+n)!==e.value&&(e.value=n),null==t.defaultValue&&e.defaultValue!==n&&(e.defaultValue=n)),null!=r&&(e.defaultValue=\"\"+r)}function Xn(e){var t=e.textContent;t===e._wrapperState.initialValue&&(e.value=t)}P.injectEventPluginOrder(\"ResponderEventPlugin SimpleEventPlugin EnterLeaveEventPlugin ChangeEventPlugin SelectEventPlugin BeforeInputEventPlugin\".split(\" \")),w=Y,k=A,x=U,P.injectEventPluginsByName({SimpleEventPlugin:_n,EnterLeaveEventPlugin:Kt,ChangeEventPlugin:Lt,SelectEventPlugin:$n,BeforeInputEventPlugin:Te});var Jn={html:\"http://www.w3.org/1999/xhtml\",mathml:\"http://www.w3.org/1998/Math/MathML\",svg:\"http://www.w3.org/2000/svg\"};function er(e){switch(e){case\"svg\":return\"http://www.w3.org/2000/svg\";case\"math\":return\"http://www.w3.org/1998/Math/MathML\";default:return\"http://www.w3.org/1999/xhtml\"}}function tr(e,t){return null==e||\"http://www.w3.org/1999/xhtml\"===e?er(t):\"http://www.w3.org/2000/svg\"===e&&\"foreignObject\"===t?\"http://www.w3.org/1999/xhtml\":e}var nr,rr=void 0,or=(nr=function(e,t){if(e.namespaceURI!==Jn.svg||\"innerHTML\"in e)e.innerHTML=t;else{for((rr=rr||document.createElement(\"div\")).innerHTML=\"<svg>\"+t+\"</svg>\",t=rr.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}},\"undefined\"!==typeof MSApp&&MSApp.execUnsafeLocalFunction?function(e,t,n,r){MSApp.execUnsafeLocalFunction(function(){return nr(e,t)})}:nr);function ir(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&3===n.nodeType)return void(n.nodeValue=t)}e.textContent=t}var ar={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},ur=[\"Webkit\",\"ms\",\"Moz\",\"O\"];function lr(e,t,n){return null==t||\"boolean\"===typeof t||\"\"===t?\"\":n||\"number\"!==typeof t||0===t||ar.hasOwnProperty(e)&&ar[e]?(\"\"+t).trim():t+\"px\"}function sr(e,t){for(var n in e=e.style,t)if(t.hasOwnProperty(n)){var r=0===n.indexOf(\"--\"),o=lr(n,t[n],r);\"float\"===n&&(n=\"cssFloat\"),r?e.setProperty(n,o):e[n]=o}}Object.keys(ar).forEach(function(e){ur.forEach(function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),ar[t]=ar[e]})});var cr=o({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function fr(e,t){t&&(cr[e]&&(null!=t.children||null!=t.dangerouslySetInnerHTML)&&a(\"137\",e,\"\"),null!=t.dangerouslySetInnerHTML&&(null!=t.children&&a(\"60\"),\"object\"===typeof t.dangerouslySetInnerHTML&&\"__html\"in t.dangerouslySetInnerHTML||a(\"61\")),null!=t.style&&\"object\"!==typeof t.style&&a(\"62\",\"\"))}function dr(e,t){if(-1===e.indexOf(\"-\"))return\"string\"===typeof t.is;switch(e){case\"annotation-xml\":case\"color-profile\":case\"font-face\":case\"font-face-src\":case\"font-face-uri\":case\"font-face-format\":case\"font-face-name\":case\"missing-glyph\":return!1;default:return!0}}function pr(e,t){var n=Dn(e=9===e.nodeType||11===e.nodeType?e:e.ownerDocument);t=_[t];for(var r=0;r<t.length;r++){var o=t[r];if(!n.hasOwnProperty(o)||!n[o]){switch(o){case\"scroll\":On(\"scroll\",e);break;case\"focus\":case\"blur\":On(\"focus\",e),On(\"blur\",e),n.blur=!0,n.focus=!0;break;case\"cancel\":case\"close\":Ie(o)&&On(o,e);break;case\"invalid\":case\"submit\":case\"reset\":break;default:-1===te.indexOf(o)&&Tn(o,e)}n[o]=!0}}}function hr(){}var mr=null,yr=null;function vr(e,t){switch(e){case\"button\":case\"input\":case\"select\":case\"textarea\":return!!t.autoFocus}return!1}function gr(e,t){return\"textarea\"===e||\"option\"===e||\"noscript\"===e||\"string\"===typeof t.children||\"number\"===typeof t.children||\"object\"===typeof t.dangerouslySetInnerHTML&&null!==t.dangerouslySetInnerHTML&&null!=t.dangerouslySetInnerHTML.__html}var br=\"function\"===typeof setTimeout?setTimeout:void 0,_r=\"function\"===typeof clearTimeout?clearTimeout:void 0,wr=i.unstable_scheduleCallback,kr=i.unstable_cancelCallback;function xr(e){for(e=e.nextSibling;e&&1!==e.nodeType&&3!==e.nodeType;)e=e.nextSibling;return e}function Sr(e){for(e=e.firstChild;e&&1!==e.nodeType&&3!==e.nodeType;)e=e.nextSibling;return e}new Set;var Tr=[],Or=-1;function Cr(e){0>Or||(e.current=Tr[Or],Tr[Or]=null,Or--)}function Er(e,t){Tr[++Or]=e.current,e.current=t}var Pr={},Mr={current:Pr},jr={current:!1},Dr=Pr;function Rr(e,t){var n=e.type.contextTypes;if(!n)return Pr;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var o,i={};for(o in n)i[o]=t[o];return r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=i),i}function Nr(e){return null!==(e=e.childContextTypes)&&void 0!==e}function Fr(e){Cr(jr),Cr(Mr)}function Ar(e){Cr(jr),Cr(Mr)}function Ur(e,t,n){Mr.current!==Pr&&a(\"168\"),Er(Mr,t),Er(jr,n)}function Yr(e,t,n){var r=e.stateNode;if(e=t.childContextTypes,\"function\"!==typeof r.getChildContext)return n;for(var i in r=r.getChildContext())i in e||a(\"108\",ut(t)||\"Unknown\",i);return o({},n,r)}function Lr(e){var t=e.stateNode;return t=t&&t.__reactInternalMemoizedMergedChildContext||Pr,Dr=Mr.current,Er(Mr,t),Er(jr,jr.current),!0}function Ir(e,t,n){var r=e.stateNode;r||a(\"169\"),n?(t=Yr(e,t,Dr),r.__reactInternalMemoizedMergedChildContext=t,Cr(jr),Cr(Mr),Er(Mr,t)):Cr(jr),Er(jr,n)}var Wr=null,zr=null;function Vr(e){return function(t){try{return e(t)}catch(n){}}}function Hr(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.contextDependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.effectTag=0,this.lastEffect=this.firstEffect=this.nextEffect=null,this.childExpirationTime=this.expirationTime=0,this.alternate=null}function Br(e,t,n,r){return new Hr(e,t,n,r)}function $r(e){return!(!(e=e.prototype)||!e.isReactComponent)}function qr(e,t){var n=e.alternate;return null===n?((n=Br(e.tag,t,e.key,e.mode)).elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.effectTag=0,n.nextEffect=null,n.firstEffect=null,n.lastEffect=null),n.childExpirationTime=e.childExpirationTime,n.expirationTime=e.expirationTime,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,n.contextDependencies=e.contextDependencies,n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function Gr(e,t,n,r,o,i){var u=2;if(r=e,\"function\"===typeof e)$r(e)&&(u=1);else if(\"string\"===typeof e)u=5;else e:switch(e){case Qe:return Qr(n.children,o,i,t);case et:return Zr(n,3|o,i,t);case Ze:return Zr(n,2|o,i,t);case Ke:return(e=Br(12,n,t,4|o)).elementType=Ke,e.type=Ke,e.expirationTime=i,e;case nt:return(e=Br(13,n,t,o)).elementType=nt,e.type=nt,e.expirationTime=i,e;default:if(\"object\"===typeof e&&null!==e)switch(e.$$typeof){case Xe:u=10;break e;case Je:u=9;break e;case tt:u=11;break e;case rt:u=14;break e;case ot:u=16,r=null;break e}a(\"130\",null==e?e:typeof e,\"\")}return(t=Br(u,n,t,o)).elementType=e,t.type=r,t.expirationTime=i,t}function Qr(e,t,n,r){return(e=Br(7,e,r,t)).expirationTime=n,e}function Zr(e,t,n,r){return e=Br(8,e,r,t),t=0===(1&t)?Ze:et,e.elementType=t,e.type=t,e.expirationTime=n,e}function Kr(e,t,n){return(e=Br(6,e,null,t)).expirationTime=n,e}function Xr(e,t,n){return(t=Br(4,null!==e.children?e.children:[],e.key,t)).expirationTime=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function Jr(e,t){e.didError=!1;var n=e.earliestPendingTime;0===n?e.earliestPendingTime=e.latestPendingTime=t:n<t?e.earliestPendingTime=t:e.latestPendingTime>t&&(e.latestPendingTime=t),no(t,e)}function eo(e,t){e.didError=!1,e.latestPingedTime>=t&&(e.latestPingedTime=0);var n=e.earliestPendingTime,r=e.latestPendingTime;n===t?e.earliestPendingTime=r===t?e.latestPendingTime=0:r:r===t&&(e.latestPendingTime=n),n=e.earliestSuspendedTime,r=e.latestSuspendedTime,0===n?e.earliestSuspendedTime=e.latestSuspendedTime=t:n<t?e.earliestSuspendedTime=t:r>t&&(e.latestSuspendedTime=t),no(t,e)}function to(e,t){var n=e.earliestPendingTime;return n>t&&(t=n),(e=e.earliestSuspendedTime)>t&&(t=e),t}function no(e,t){var n=t.earliestSuspendedTime,r=t.latestSuspendedTime,o=t.earliestPendingTime,i=t.latestPingedTime;0===(o=0!==o?o:i)&&(0===e||r<e)&&(o=r),0!==(e=o)&&n>e&&(e=n),t.nextExpirationTimeToWorkOn=o,t.expirationTime=e}function ro(e,t){if(e&&e.defaultProps)for(var n in t=o({},t),e=e.defaultProps)void 0===t[n]&&(t[n]=e[n]);return t}var oo=(new r.Component).refs;function io(e,t,n,r){n=null===(n=n(r,t=e.memoizedState))||void 0===n?t:o({},t,n),e.memoizedState=n,null!==(r=e.updateQueue)&&0===e.expirationTime&&(r.baseState=n)}var ao={isMounted:function(e){return!!(e=e._reactInternalFiber)&&2===tn(e)},enqueueSetState:function(e,t,n){e=e._reactInternalFiber;var r=ku(),o=Zi(r=Qa(r,e));o.payload=t,void 0!==n&&null!==n&&(o.callback=n),Va(),Xi(e,o),Xa(e,r)},enqueueReplaceState:function(e,t,n){e=e._reactInternalFiber;var r=ku(),o=Zi(r=Qa(r,e));o.tag=Hi,o.payload=t,void 0!==n&&null!==n&&(o.callback=n),Va(),Xi(e,o),Xa(e,r)},enqueueForceUpdate:function(e,t){e=e._reactInternalFiber;var n=ku(),r=Zi(n=Qa(n,e));r.tag=Bi,void 0!==t&&null!==t&&(r.callback=t),Va(),Xi(e,r),Xa(e,n)}};function uo(e,t,n,r,o,i,a){return\"function\"===typeof(e=e.stateNode).shouldComponentUpdate?e.shouldComponentUpdate(r,i,a):!t.prototype||!t.prototype.isPureReactComponent||(!en(n,r)||!en(o,i))}function lo(e,t,n){var r=!1,o=Pr,i=t.contextType;return\"object\"===typeof i&&null!==i?i=zi(i):(o=Nr(t)?Dr:Mr.current,i=(r=null!==(r=t.contextTypes)&&void 0!==r)?Rr(e,o):Pr),t=new t(n,i),e.memoizedState=null!==t.state&&void 0!==t.state?t.state:null,t.updater=ao,e.stateNode=t,t._reactInternalFiber=e,r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=o,e.__reactInternalMemoizedMaskedChildContext=i),t}function so(e,t,n,r){e=t.state,\"function\"===typeof t.componentWillReceiveProps&&t.componentWillReceiveProps(n,r),\"function\"===typeof t.UNSAFE_componentWillReceiveProps&&t.UNSAFE_componentWillReceiveProps(n,r),t.state!==e&&ao.enqueueReplaceState(t,t.state,null)}function co(e,t,n,r){var o=e.stateNode;o.props=n,o.state=e.memoizedState,o.refs=oo;var i=t.contextType;\"object\"===typeof i&&null!==i?o.context=zi(i):(i=Nr(t)?Dr:Mr.current,o.context=Rr(e,i)),null!==(i=e.updateQueue)&&(na(e,i,n,o,r),o.state=e.memoizedState),\"function\"===typeof(i=t.getDerivedStateFromProps)&&(io(e,t,i,n),o.state=e.memoizedState),\"function\"===typeof t.getDerivedStateFromProps||\"function\"===typeof o.getSnapshotBeforeUpdate||\"function\"!==typeof o.UNSAFE_componentWillMount&&\"function\"!==typeof o.componentWillMount||(t=o.state,\"function\"===typeof o.componentWillMount&&o.componentWillMount(),\"function\"===typeof o.UNSAFE_componentWillMount&&o.UNSAFE_componentWillMount(),t!==o.state&&ao.enqueueReplaceState(o,o.state,null),null!==(i=e.updateQueue)&&(na(e,i,n,o,r),o.state=e.memoizedState)),\"function\"===typeof o.componentDidMount&&(e.effectTag|=4)}var fo=Array.isArray;function po(e,t,n){if(null!==(e=n.ref)&&\"function\"!==typeof e&&\"object\"!==typeof e){if(n._owner){n=n._owner;var r=void 0;n&&(1!==n.tag&&a(\"309\"),r=n.stateNode),r||a(\"147\",e);var o=\"\"+e;return null!==t&&null!==t.ref&&\"function\"===typeof t.ref&&t.ref._stringRef===o?t.ref:((t=function(e){var t=r.refs;t===oo&&(t=r.refs={}),null===e?delete t[o]:t[o]=e})._stringRef=o,t)}\"string\"!==typeof e&&a(\"284\"),n._owner||a(\"290\",e)}return e}function ho(e,t){\"textarea\"!==e.type&&a(\"31\",\"[object Object]\"===Object.prototype.toString.call(t)?\"object with keys {\"+Object.keys(t).join(\", \")+\"}\":t,\"\")}function mo(e){function t(t,n){if(e){var r=t.lastEffect;null!==r?(r.nextEffect=n,t.lastEffect=n):t.firstEffect=t.lastEffect=n,n.nextEffect=null,n.effectTag=8}}function n(n,r){if(!e)return null;for(;null!==r;)t(n,r),r=r.sibling;return null}function r(e,t){for(e=new Map;null!==t;)null!==t.key?e.set(t.key,t):e.set(t.index,t),t=t.sibling;return e}function o(e,t,n){return(e=qr(e,t)).index=0,e.sibling=null,e}function i(t,n,r){return t.index=r,e?null!==(r=t.alternate)?(r=r.index)<n?(t.effectTag=2,n):r:(t.effectTag=2,n):n}function u(t){return e&&null===t.alternate&&(t.effectTag=2),t}function l(e,t,n,r){return null===t||6!==t.tag?((t=Kr(n,e.mode,r)).return=e,t):((t=o(t,n)).return=e,t)}function s(e,t,n,r){return null!==t&&t.elementType===n.type?((r=o(t,n.props)).ref=po(e,t,n),r.return=e,r):((r=Gr(n.type,n.key,n.props,null,e.mode,r)).ref=po(e,t,n),r.return=e,r)}function c(e,t,n,r){return null===t||4!==t.tag||t.stateNode.containerInfo!==n.containerInfo||t.stateNode.implementation!==n.implementation?((t=Xr(n,e.mode,r)).return=e,t):((t=o(t,n.children||[])).return=e,t)}function f(e,t,n,r,i){return null===t||7!==t.tag?((t=Qr(n,e.mode,r,i)).return=e,t):((t=o(t,n)).return=e,t)}function d(e,t,n){if(\"string\"===typeof t||\"number\"===typeof t)return(t=Kr(\"\"+t,e.mode,n)).return=e,t;if(\"object\"===typeof t&&null!==t){switch(t.$$typeof){case qe:return(n=Gr(t.type,t.key,t.props,null,e.mode,n)).ref=po(e,null,t),n.return=e,n;case Ge:return(t=Xr(t,e.mode,n)).return=e,t}if(fo(t)||at(t))return(t=Qr(t,e.mode,n,null)).return=e,t;ho(e,t)}return null}function p(e,t,n,r){var o=null!==t?t.key:null;if(\"string\"===typeof n||\"number\"===typeof n)return null!==o?null:l(e,t,\"\"+n,r);if(\"object\"===typeof n&&null!==n){switch(n.$$typeof){case qe:return n.key===o?n.type===Qe?f(e,t,n.props.children,r,o):s(e,t,n,r):null;case Ge:return n.key===o?c(e,t,n,r):null}if(fo(n)||at(n))return null!==o?null:f(e,t,n,r,null);ho(e,n)}return null}function h(e,t,n,r,o){if(\"string\"===typeof r||\"number\"===typeof r)return l(t,e=e.get(n)||null,\"\"+r,o);if(\"object\"===typeof r&&null!==r){switch(r.$$typeof){case qe:return e=e.get(null===r.key?n:r.key)||null,r.type===Qe?f(t,e,r.props.children,o,r.key):s(t,e,r,o);case Ge:return c(t,e=e.get(null===r.key?n:r.key)||null,r,o)}if(fo(r)||at(r))return f(t,e=e.get(n)||null,r,o,null);ho(t,r)}return null}function m(o,a,u,l){for(var s=null,c=null,f=a,m=a=0,y=null;null!==f&&m<u.length;m++){f.index>m?(y=f,f=null):y=f.sibling;var v=p(o,f,u[m],l);if(null===v){null===f&&(f=y);break}e&&f&&null===v.alternate&&t(o,f),a=i(v,a,m),null===c?s=v:c.sibling=v,c=v,f=y}if(m===u.length)return n(o,f),s;if(null===f){for(;m<u.length;m++)(f=d(o,u[m],l))&&(a=i(f,a,m),null===c?s=f:c.sibling=f,c=f);return s}for(f=r(o,f);m<u.length;m++)(y=h(f,o,m,u[m],l))&&(e&&null!==y.alternate&&f.delete(null===y.key?m:y.key),a=i(y,a,m),null===c?s=y:c.sibling=y,c=y);return e&&f.forEach(function(e){return t(o,e)}),s}function y(o,u,l,s){var c=at(l);\"function\"!==typeof c&&a(\"150\"),null==(l=c.call(l))&&a(\"151\");for(var f=c=null,m=u,y=u=0,v=null,g=l.next();null!==m&&!g.done;y++,g=l.next()){m.index>y?(v=m,m=null):v=m.sibling;var b=p(o,m,g.value,s);if(null===b){m||(m=v);break}e&&m&&null===b.alternate&&t(o,m),u=i(b,u,y),null===f?c=b:f.sibling=b,f=b,m=v}if(g.done)return n(o,m),c;if(null===m){for(;!g.done;y++,g=l.next())null!==(g=d(o,g.value,s))&&(u=i(g,u,y),null===f?c=g:f.sibling=g,f=g);return c}for(m=r(o,m);!g.done;y++,g=l.next())null!==(g=h(m,o,y,g.value,s))&&(e&&null!==g.alternate&&m.delete(null===g.key?y:g.key),u=i(g,u,y),null===f?c=g:f.sibling=g,f=g);return e&&m.forEach(function(e){return t(o,e)}),c}return function(e,r,i,l){var s=\"object\"===typeof i&&null!==i&&i.type===Qe&&null===i.key;s&&(i=i.props.children);var c=\"object\"===typeof i&&null!==i;if(c)switch(i.$$typeof){case qe:e:{for(c=i.key,s=r;null!==s;){if(s.key===c){if(7===s.tag?i.type===Qe:s.elementType===i.type){n(e,s.sibling),(r=o(s,i.type===Qe?i.props.children:i.props)).ref=po(e,s,i),r.return=e,e=r;break e}n(e,s);break}t(e,s),s=s.sibling}i.type===Qe?((r=Qr(i.props.children,e.mode,l,i.key)).return=e,e=r):((l=Gr(i.type,i.key,i.props,null,e.mode,l)).ref=po(e,r,i),l.return=e,e=l)}return u(e);case Ge:e:{for(s=i.key;null!==r;){if(r.key===s){if(4===r.tag&&r.stateNode.containerInfo===i.containerInfo&&r.stateNode.implementation===i.implementation){n(e,r.sibling),(r=o(r,i.children||[])).return=e,e=r;break e}n(e,r);break}t(e,r),r=r.sibling}(r=Xr(i,e.mode,l)).return=e,e=r}return u(e)}if(\"string\"===typeof i||\"number\"===typeof i)return i=\"\"+i,null!==r&&6===r.tag?(n(e,r.sibling),(r=o(r,i)).return=e,e=r):(n(e,r),(r=Kr(i,e.mode,l)).return=e,e=r),u(e);if(fo(i))return m(e,r,i,l);if(at(i))return y(e,r,i,l);if(c&&ho(e,i),\"undefined\"===typeof i&&!s)switch(e.tag){case 1:case 0:a(\"152\",(l=e.type).displayName||l.name||\"Component\")}return n(e,r)}}var yo=mo(!0),vo=mo(!1),go={},bo={current:go},_o={current:go},wo={current:go};function ko(e){return e===go&&a(\"174\"),e}function xo(e,t){Er(wo,t),Er(_o,e),Er(bo,go);var n=t.nodeType;switch(n){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:tr(null,\"\");break;default:t=tr(t=(n=8===n?t.parentNode:t).namespaceURI||null,n=n.tagName)}Cr(bo),Er(bo,t)}function So(e){Cr(bo),Cr(_o),Cr(wo)}function To(e){ko(wo.current);var t=ko(bo.current),n=tr(t,e.type);t!==n&&(Er(_o,e),Er(bo,n))}function Oo(e){_o.current===e&&(Cr(bo),Cr(_o))}var Co=0,Eo=2,Po=4,Mo=8,jo=16,Do=32,Ro=64,No=128,Fo=He.ReactCurrentDispatcher,Ao=0,Uo=null,Yo=null,Lo=null,Io=null,Wo=null,zo=null,Vo=0,Ho=null,Bo=0,$o=!1,qo=null,Go=0;function Qo(){a(\"307\")}function Zo(e,t){if(null===t)return!1;for(var n=0;n<t.length&&n<e.length;n++)if(!Xt(e[n],t[n]))return!1;return!0}function Ko(e,t,n,r,o,i){if(Ao=i,Uo=t,Lo=null!==e?e.memoizedState:null,Fo.current=null===Lo?ci:fi,t=n(r,o),$o){do{$o=!1,Go+=1,Lo=null!==e?e.memoizedState:null,zo=Io,Ho=Wo=Yo=null,Fo.current=fi,t=n(r,o)}while($o);qo=null,Go=0}return Fo.current=si,(e=Uo).memoizedState=Io,e.expirationTime=Vo,e.updateQueue=Ho,e.effectTag|=Bo,e=null!==Yo&&null!==Yo.next,Ao=0,zo=Wo=Io=Lo=Yo=Uo=null,Vo=0,Ho=null,Bo=0,e&&a(\"300\"),t}function Xo(){Fo.current=si,Ao=0,zo=Wo=Io=Lo=Yo=Uo=null,Vo=0,Ho=null,Bo=0,$o=!1,qo=null,Go=0}function Jo(){var e={memoizedState:null,baseState:null,queue:null,baseUpdate:null,next:null};return null===Wo?Io=Wo=e:Wo=Wo.next=e,Wo}function ei(){if(null!==zo)zo=(Wo=zo).next,Lo=null!==(Yo=Lo)?Yo.next:null;else{null===Lo&&a(\"310\");var e={memoizedState:(Yo=Lo).memoizedState,baseState:Yo.baseState,queue:Yo.queue,baseUpdate:Yo.baseUpdate,next:null};Wo=null===Wo?Io=e:Wo.next=e,Lo=Yo.next}return Wo}function ti(e,t){return\"function\"===typeof t?t(e):t}function ni(e){var t=ei(),n=t.queue;if(null===n&&a(\"311\"),0<Go){var r=n.dispatch;if(null!==qo){var o=qo.get(n);if(void 0!==o){qo.delete(n);var i=t.memoizedState;do{i=e(i,o.action),o=o.next}while(null!==o);return Xt(i,t.memoizedState)||(ki=!0),t.memoizedState=i,t.baseUpdate===n.last&&(t.baseState=i),n.eagerReducer=e,n.eagerState=i,[i,r]}}return[t.memoizedState,r]}r=n.last;var u=t.baseUpdate;if(i=t.baseState,null!==u?(null!==r&&(r.next=null),r=u.next):r=null!==r?r.next:null,null!==r){var l=o=null,s=r,c=!1;do{var f=s.expirationTime;f<Ao?(c||(c=!0,l=u,o=i),f>Vo&&(Vo=f)):i=s.eagerReducer===e?s.eagerState:e(i,s.action),u=s,s=s.next}while(null!==s&&s!==r);c||(l=u,o=i),Xt(i,t.memoizedState)||(ki=!0),t.memoizedState=i,t.baseUpdate=l,t.baseState=o,n.eagerReducer=e,n.eagerState=i}return[t.memoizedState,n.dispatch]}function ri(e,t,n,r){return e={tag:e,create:t,destroy:n,deps:r,next:null},null===Ho?(Ho={lastEffect:null}).lastEffect=e.next=e:null===(t=Ho.lastEffect)?Ho.lastEffect=e.next=e:(n=t.next,t.next=e,e.next=n,Ho.lastEffect=e),e}function oi(e,t,n,r){var o=Jo();Bo|=e,o.memoizedState=ri(t,n,void 0,void 0===r?null:r)}function ii(e,t,n,r){var o=ei();r=void 0===r?null:r;var i=void 0;if(null!==Yo){var a=Yo.memoizedState;if(i=a.destroy,null!==r&&Zo(r,a.deps))return void ri(Co,n,i,r)}Bo|=e,o.memoizedState=ri(t,n,i,r)}function ai(e,t){return\"function\"===typeof t?(e=e(),t(e),function(){t(null)}):null!==t&&void 0!==t?(e=e(),t.current=e,function(){t.current=null}):void 0}function ui(){}function li(e,t,n){25>Go||a(\"301\");var r=e.alternate;if(e===Uo||null!==r&&r===Uo)if($o=!0,e={expirationTime:Ao,action:n,eagerReducer:null,eagerState:null,next:null},null===qo&&(qo=new Map),void 0===(n=qo.get(t)))qo.set(t,e);else{for(t=n;null!==t.next;)t=t.next;t.next=e}else{Va();var o=ku(),i={expirationTime:o=Qa(o,e),action:n,eagerReducer:null,eagerState:null,next:null},u=t.last;if(null===u)i.next=i;else{var l=u.next;null!==l&&(i.next=l),u.next=i}if(t.last=i,0===e.expirationTime&&(null===r||0===r.expirationTime)&&null!==(r=t.eagerReducer))try{var s=t.eagerState,c=r(s,n);if(i.eagerReducer=r,i.eagerState=c,Xt(c,s))return}catch(f){}Xa(e,o)}}var si={readContext:zi,useCallback:Qo,useContext:Qo,useEffect:Qo,useImperativeHandle:Qo,useLayoutEffect:Qo,useMemo:Qo,useReducer:Qo,useRef:Qo,useState:Qo,useDebugValue:Qo},ci={readContext:zi,useCallback:function(e,t){return Jo().memoizedState=[e,void 0===t?null:t],e},useContext:zi,useEffect:function(e,t){return oi(516,No|Ro,e,t)},useImperativeHandle:function(e,t,n){return n=null!==n&&void 0!==n?n.concat([e]):null,oi(4,Po|Do,ai.bind(null,t,e),n)},useLayoutEffect:function(e,t){return oi(4,Po|Do,e,t)},useMemo:function(e,t){var n=Jo();return t=void 0===t?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var r=Jo();return t=void 0!==n?n(t):t,r.memoizedState=r.baseState=t,e=(e=r.queue={last:null,dispatch:null,eagerReducer:e,eagerState:t}).dispatch=li.bind(null,Uo,e),[r.memoizedState,e]},useRef:function(e){return e={current:e},Jo().memoizedState=e},useState:function(e){var t=Jo();return\"function\"===typeof e&&(e=e()),t.memoizedState=t.baseState=e,e=(e=t.queue={last:null,dispatch:null,eagerReducer:ti,eagerState:e}).dispatch=li.bind(null,Uo,e),[t.memoizedState,e]},useDebugValue:ui},fi={readContext:zi,useCallback:function(e,t){var n=ei();t=void 0===t?null:t;var r=n.memoizedState;return null!==r&&null!==t&&Zo(t,r[1])?r[0]:(n.memoizedState=[e,t],e)},useContext:zi,useEffect:function(e,t){return ii(516,No|Ro,e,t)},useImperativeHandle:function(e,t,n){return n=null!==n&&void 0!==n?n.concat([e]):null,ii(4,Po|Do,ai.bind(null,t,e),n)},useLayoutEffect:function(e,t){return ii(4,Po|Do,e,t)},useMemo:function(e,t){var n=ei();t=void 0===t?null:t;var r=n.memoizedState;return null!==r&&null!==t&&Zo(t,r[1])?r[0]:(e=e(),n.memoizedState=[e,t],e)},useReducer:ni,useRef:function(){return ei().memoizedState},useState:function(e){return ni(ti)},useDebugValue:ui},di=null,pi=null,hi=!1;function mi(e,t){var n=Br(5,null,null,0);n.elementType=\"DELETED\",n.type=\"DELETED\",n.stateNode=t,n.return=e,n.effectTag=8,null!==e.lastEffect?(e.lastEffect.nextEffect=n,e.lastEffect=n):e.firstEffect=e.lastEffect=n}function yi(e,t){switch(e.tag){case 5:var n=e.type;return null!==(t=1!==t.nodeType||n.toLowerCase()!==t.nodeName.toLowerCase()?null:t)&&(e.stateNode=t,!0);case 6:return null!==(t=\"\"===e.pendingProps||3!==t.nodeType?null:t)&&(e.stateNode=t,!0);case 13:default:return!1}}function vi(e){if(hi){var t=pi;if(t){var n=t;if(!yi(e,t)){if(!(t=xr(n))||!yi(e,t))return e.effectTag|=2,hi=!1,void(di=e);mi(di,n)}di=e,pi=Sr(t)}else e.effectTag|=2,hi=!1,di=e}}function gi(e){for(e=e.return;null!==e&&5!==e.tag&&3!==e.tag&&18!==e.tag;)e=e.return;di=e}function bi(e){if(e!==di)return!1;if(!hi)return gi(e),hi=!0,!1;var t=e.type;if(5!==e.tag||\"head\"!==t&&\"body\"!==t&&!gr(t,e.memoizedProps))for(t=pi;t;)mi(e,t),t=xr(t);return gi(e),pi=di?xr(e.stateNode):null,!0}function _i(){pi=di=null,hi=!1}var wi=He.ReactCurrentOwner,ki=!1;function xi(e,t,n,r){t.child=null===e?vo(t,null,n,r):yo(t,e.child,n,r)}function Si(e,t,n,r,o){n=n.render;var i=t.ref;return Wi(t,o),r=Ko(e,t,n,r,i,o),null===e||ki?(t.effectTag|=1,xi(e,t,r,o),t.child):(t.updateQueue=e.updateQueue,t.effectTag&=-517,e.expirationTime<=o&&(e.expirationTime=0),Ri(e,t,o))}function Ti(e,t,n,r,o,i){if(null===e){var a=n.type;return\"function\"!==typeof a||$r(a)||void 0!==a.defaultProps||null!==n.compare||void 0!==n.defaultProps?((e=Gr(n.type,null,r,null,t.mode,i)).ref=t.ref,e.return=t,t.child=e):(t.tag=15,t.type=a,Oi(e,t,a,r,o,i))}return a=e.child,o<i&&(o=a.memoizedProps,(n=null!==(n=n.compare)?n:en)(o,r)&&e.ref===t.ref)?Ri(e,t,i):(t.effectTag|=1,(e=qr(a,r)).ref=t.ref,e.return=t,t.child=e)}function Oi(e,t,n,r,o,i){return null!==e&&en(e.memoizedProps,r)&&e.ref===t.ref&&(ki=!1,o<i)?Ri(e,t,i):Ei(e,t,n,r,i)}function Ci(e,t){var n=t.ref;(null===e&&null!==n||null!==e&&e.ref!==n)&&(t.effectTag|=128)}function Ei(e,t,n,r,o){var i=Nr(n)?Dr:Mr.current;return i=Rr(t,i),Wi(t,o),n=Ko(e,t,n,r,i,o),null===e||ki?(t.effectTag|=1,xi(e,t,n,o),t.child):(t.updateQueue=e.updateQueue,t.effectTag&=-517,e.expirationTime<=o&&(e.expirationTime=0),Ri(e,t,o))}function Pi(e,t,n,r,o){if(Nr(n)){var i=!0;Lr(t)}else i=!1;if(Wi(t,o),null===t.stateNode)null!==e&&(e.alternate=null,t.alternate=null,t.effectTag|=2),lo(t,n,r),co(t,n,r,o),r=!0;else if(null===e){var a=t.stateNode,u=t.memoizedProps;a.props=u;var l=a.context,s=n.contextType;\"object\"===typeof s&&null!==s?s=zi(s):s=Rr(t,s=Nr(n)?Dr:Mr.current);var c=n.getDerivedStateFromProps,f=\"function\"===typeof c||\"function\"===typeof a.getSnapshotBeforeUpdate;f||\"function\"!==typeof a.UNSAFE_componentWillReceiveProps&&\"function\"!==typeof a.componentWillReceiveProps||(u!==r||l!==s)&&so(t,a,r,s),qi=!1;var d=t.memoizedState;l=a.state=d;var p=t.updateQueue;null!==p&&(na(t,p,r,a,o),l=t.memoizedState),u!==r||d!==l||jr.current||qi?(\"function\"===typeof c&&(io(t,n,c,r),l=t.memoizedState),(u=qi||uo(t,n,u,r,d,l,s))?(f||\"function\"!==typeof a.UNSAFE_componentWillMount&&\"function\"!==typeof a.componentWillMount||(\"function\"===typeof a.componentWillMount&&a.componentWillMount(),\"function\"===typeof a.UNSAFE_componentWillMount&&a.UNSAFE_componentWillMount()),\"function\"===typeof a.componentDidMount&&(t.effectTag|=4)):(\"function\"===typeof a.componentDidMount&&(t.effectTag|=4),t.memoizedProps=r,t.memoizedState=l),a.props=r,a.state=l,a.context=s,r=u):(\"function\"===typeof a.componentDidMount&&(t.effectTag|=4),r=!1)}else a=t.stateNode,u=t.memoizedProps,a.props=t.type===t.elementType?u:ro(t.type,u),l=a.context,\"object\"===typeof(s=n.contextType)&&null!==s?s=zi(s):s=Rr(t,s=Nr(n)?Dr:Mr.current),(f=\"function\"===typeof(c=n.getDerivedStateFromProps)||\"function\"===typeof a.getSnapshotBeforeUpdate)||\"function\"!==typeof a.UNSAFE_componentWillReceiveProps&&\"function\"!==typeof a.componentWillReceiveProps||(u!==r||l!==s)&&so(t,a,r,s),qi=!1,l=t.memoizedState,d=a.state=l,null!==(p=t.updateQueue)&&(na(t,p,r,a,o),d=t.memoizedState),u!==r||l!==d||jr.current||qi?(\"function\"===typeof c&&(io(t,n,c,r),d=t.memoizedState),(c=qi||uo(t,n,u,r,l,d,s))?(f||\"function\"!==typeof a.UNSAFE_componentWillUpdate&&\"function\"!==typeof a.componentWillUpdate||(\"function\"===typeof a.componentWillUpdate&&a.componentWillUpdate(r,d,s),\"function\"===typeof a.UNSAFE_componentWillUpdate&&a.UNSAFE_componentWillUpdate(r,d,s)),\"function\"===typeof a.componentDidUpdate&&(t.effectTag|=4),\"function\"===typeof a.getSnapshotBeforeUpdate&&(t.effectTag|=256)):(\"function\"!==typeof a.componentDidUpdate||u===e.memoizedProps&&l===e.memoizedState||(t.effectTag|=4),\"function\"!==typeof a.getSnapshotBeforeUpdate||u===e.memoizedProps&&l===e.memoizedState||(t.effectTag|=256),t.memoizedProps=r,t.memoizedState=d),a.props=r,a.state=d,a.context=s,r=c):(\"function\"!==typeof a.componentDidUpdate||u===e.memoizedProps&&l===e.memoizedState||(t.effectTag|=4),\"function\"!==typeof a.getSnapshotBeforeUpdate||u===e.memoizedProps&&l===e.memoizedState||(t.effectTag|=256),r=!1);return Mi(e,t,n,r,i,o)}function Mi(e,t,n,r,o,i){Ci(e,t);var a=0!==(64&t.effectTag);if(!r&&!a)return o&&Ir(t,n,!1),Ri(e,t,i);r=t.stateNode,wi.current=t;var u=a&&\"function\"!==typeof n.getDerivedStateFromError?null:r.render();return t.effectTag|=1,null!==e&&a?(t.child=yo(t,e.child,null,i),t.child=yo(t,null,u,i)):xi(e,t,u,i),t.memoizedState=r.state,o&&Ir(t,n,!0),t.child}function ji(e){var t=e.stateNode;t.pendingContext?Ur(0,t.pendingContext,t.pendingContext!==t.context):t.context&&Ur(0,t.context,!1),xo(e,t.containerInfo)}function Di(e,t,n){var r=t.mode,o=t.pendingProps,i=t.memoizedState;if(0===(64&t.effectTag)){i=null;var a=!1}else i={timedOutAt:null!==i?i.timedOutAt:0},a=!0,t.effectTag&=-65;if(null===e)if(a){var u=o.fallback;e=Qr(null,r,0,null),0===(1&t.mode)&&(e.child=null!==t.memoizedState?t.child.child:t.child),r=Qr(u,r,n,null),e.sibling=r,(n=e).return=r.return=t}else n=r=vo(t,null,o.children,n);else null!==e.memoizedState?(u=(r=e.child).sibling,a?(n=o.fallback,o=qr(r,r.pendingProps),0===(1&t.mode)&&((a=null!==t.memoizedState?t.child.child:t.child)!==r.child&&(o.child=a)),r=o.sibling=qr(u,n,u.expirationTime),n=o,o.childExpirationTime=0,n.return=r.return=t):n=r=yo(t,r.child,o.children,n)):(u=e.child,a?(a=o.fallback,(o=Qr(null,r,0,null)).child=u,0===(1&t.mode)&&(o.child=null!==t.memoizedState?t.child.child:t.child),(r=o.sibling=Qr(a,r,n,null)).effectTag|=2,n=o,o.childExpirationTime=0,n.return=r.return=t):r=n=yo(t,u,o.children,n)),t.stateNode=e.stateNode;return t.memoizedState=i,t.child=n,r}function Ri(e,t,n){if(null!==e&&(t.contextDependencies=e.contextDependencies),t.childExpirationTime<n)return null;if(null!==e&&t.child!==e.child&&a(\"153\"),null!==t.child){for(n=qr(e=t.child,e.pendingProps,e.expirationTime),t.child=n,n.return=t;null!==e.sibling;)e=e.sibling,(n=n.sibling=qr(e,e.pendingProps,e.expirationTime)).return=t;n.sibling=null}return t.child}function Ni(e,t,n){var r=t.expirationTime;if(null!==e){if(e.memoizedProps!==t.pendingProps||jr.current)ki=!0;else if(r<n){switch(ki=!1,t.tag){case 3:ji(t),_i();break;case 5:To(t);break;case 1:Nr(t.type)&&Lr(t);break;case 4:xo(t,t.stateNode.containerInfo);break;case 10:Li(t,t.memoizedProps.value);break;case 13:if(null!==t.memoizedState)return 0!==(r=t.child.childExpirationTime)&&r>=n?Di(e,t,n):null!==(t=Ri(e,t,n))?t.sibling:null}return Ri(e,t,n)}}else ki=!1;switch(t.expirationTime=0,t.tag){case 2:r=t.elementType,null!==e&&(e.alternate=null,t.alternate=null,t.effectTag|=2),e=t.pendingProps;var o=Rr(t,Mr.current);if(Wi(t,n),o=Ko(null,t,r,e,o,n),t.effectTag|=1,\"object\"===typeof o&&null!==o&&\"function\"===typeof o.render&&void 0===o.$$typeof){if(t.tag=1,Xo(),Nr(r)){var i=!0;Lr(t)}else i=!1;t.memoizedState=null!==o.state&&void 0!==o.state?o.state:null;var u=r.getDerivedStateFromProps;\"function\"===typeof u&&io(t,r,u,e),o.updater=ao,t.stateNode=o,o._reactInternalFiber=t,co(t,r,e,n),t=Mi(null,t,r,!0,i,n)}else t.tag=0,xi(null,t,o,n),t=t.child;return t;case 16:switch(o=t.elementType,null!==e&&(e.alternate=null,t.alternate=null,t.effectTag|=2),i=t.pendingProps,e=function(e){var t=e._result;switch(e._status){case 1:return t;case 2:case 0:throw t;default:switch(e._status=0,(t=(t=e._ctor)()).then(function(t){0===e._status&&(t=t.default,e._status=1,e._result=t)},function(t){0===e._status&&(e._status=2,e._result=t)}),e._status){case 1:return e._result;case 2:throw e._result}throw e._result=t,t}}(o),t.type=e,o=t.tag=function(e){if(\"function\"===typeof e)return $r(e)?1:0;if(void 0!==e&&null!==e){if((e=e.$$typeof)===tt)return 11;if(e===rt)return 14}return 2}(e),i=ro(e,i),u=void 0,o){case 0:u=Ei(null,t,e,i,n);break;case 1:u=Pi(null,t,e,i,n);break;case 11:u=Si(null,t,e,i,n);break;case 14:u=Ti(null,t,e,ro(e.type,i),r,n);break;default:a(\"306\",e,\"\")}return u;case 0:return r=t.type,o=t.pendingProps,Ei(e,t,r,o=t.elementType===r?o:ro(r,o),n);case 1:return r=t.type,o=t.pendingProps,Pi(e,t,r,o=t.elementType===r?o:ro(r,o),n);case 3:return ji(t),null===(r=t.updateQueue)&&a(\"282\"),o=null!==(o=t.memoizedState)?o.element:null,na(t,r,t.pendingProps,null,n),(r=t.memoizedState.element)===o?(_i(),t=Ri(e,t,n)):(o=t.stateNode,(o=(null===e||null===e.child)&&o.hydrate)&&(pi=Sr(t.stateNode.containerInfo),di=t,o=hi=!0),o?(t.effectTag|=2,t.child=vo(t,null,r,n)):(xi(e,t,r,n),_i()),t=t.child),t;case 5:return To(t),null===e&&vi(t),r=t.type,o=t.pendingProps,i=null!==e?e.memoizedProps:null,u=o.children,gr(r,o)?u=null:null!==i&&gr(r,i)&&(t.effectTag|=16),Ci(e,t),1!==n&&1&t.mode&&o.hidden?(t.expirationTime=t.childExpirationTime=1,t=null):(xi(e,t,u,n),t=t.child),t;case 6:return null===e&&vi(t),null;case 13:return Di(e,t,n);case 4:return xo(t,t.stateNode.containerInfo),r=t.pendingProps,null===e?t.child=yo(t,null,r,n):xi(e,t,r,n),t.child;case 11:return r=t.type,o=t.pendingProps,Si(e,t,r,o=t.elementType===r?o:ro(r,o),n);case 7:return xi(e,t,t.pendingProps,n),t.child;case 8:case 12:return xi(e,t,t.pendingProps.children,n),t.child;case 10:e:{if(r=t.type._context,o=t.pendingProps,u=t.memoizedProps,Li(t,i=o.value),null!==u){var l=u.value;if(0===(i=Xt(l,i)?0:0|(\"function\"===typeof r._calculateChangedBits?r._calculateChangedBits(l,i):1073741823))){if(u.children===o.children&&!jr.current){t=Ri(e,t,n);break e}}else for(null!==(l=t.child)&&(l.return=t);null!==l;){var s=l.contextDependencies;if(null!==s){u=l.child;for(var c=s.first;null!==c;){if(c.context===r&&0!==(c.observedBits&i)){1===l.tag&&((c=Zi(n)).tag=Bi,Xi(l,c)),l.expirationTime<n&&(l.expirationTime=n),null!==(c=l.alternate)&&c.expirationTime<n&&(c.expirationTime=n),c=n;for(var f=l.return;null!==f;){var d=f.alternate;if(f.childExpirationTime<c)f.childExpirationTime=c,null!==d&&d.childExpirationTime<c&&(d.childExpirationTime=c);else{if(!(null!==d&&d.childExpirationTime<c))break;d.childExpirationTime=c}f=f.return}s.expirationTime<n&&(s.expirationTime=n);break}c=c.next}}else u=10===l.tag&&l.type===t.type?null:l.child;if(null!==u)u.return=l;else for(u=l;null!==u;){if(u===t){u=null;break}if(null!==(l=u.sibling)){l.return=u.return,u=l;break}u=u.return}l=u}}xi(e,t,o.children,n),t=t.child}return t;case 9:return o=t.type,r=(i=t.pendingProps).children,Wi(t,n),r=r(o=zi(o,i.unstable_observedBits)),t.effectTag|=1,xi(e,t,r,n),t.child;case 14:return i=ro(o=t.type,t.pendingProps),Ti(e,t,o,i=ro(o.type,i),r,n);case 15:return Oi(e,t,t.type,t.pendingProps,r,n);case 17:return r=t.type,o=t.pendingProps,o=t.elementType===r?o:ro(r,o),null!==e&&(e.alternate=null,t.alternate=null,t.effectTag|=2),t.tag=1,Nr(r)?(e=!0,Lr(t)):e=!1,Wi(t,n),lo(t,r,o),co(t,r,o,n),Mi(null,t,r,!0,e,n)}a(\"156\")}var Fi={current:null},Ai=null,Ui=null,Yi=null;function Li(e,t){var n=e.type._context;Er(Fi,n._currentValue),n._currentValue=t}function Ii(e){var t=Fi.current;Cr(Fi),e.type._context._currentValue=t}function Wi(e,t){Ai=e,Yi=Ui=null;var n=e.contextDependencies;null!==n&&n.expirationTime>=t&&(ki=!0),e.contextDependencies=null}function zi(e,t){return Yi!==e&&!1!==t&&0!==t&&(\"number\"===typeof t&&1073741823!==t||(Yi=e,t=1073741823),t={context:e,observedBits:t,next:null},null===Ui?(null===Ai&&a(\"308\"),Ui=t,Ai.contextDependencies={first:t,expirationTime:0}):Ui=Ui.next=t),e._currentValue}var Vi=0,Hi=1,Bi=2,$i=3,qi=!1;function Gi(e){return{baseState:e,firstUpdate:null,lastUpdate:null,firstCapturedUpdate:null,lastCapturedUpdate:null,firstEffect:null,lastEffect:null,firstCapturedEffect:null,lastCapturedEffect:null}}function Qi(e){return{baseState:e.baseState,firstUpdate:e.firstUpdate,lastUpdate:e.lastUpdate,firstCapturedUpdate:null,lastCapturedUpdate:null,firstEffect:null,lastEffect:null,firstCapturedEffect:null,lastCapturedEffect:null}}function Zi(e){return{expirationTime:e,tag:Vi,payload:null,callback:null,next:null,nextEffect:null}}function Ki(e,t){null===e.lastUpdate?e.firstUpdate=e.lastUpdate=t:(e.lastUpdate.next=t,e.lastUpdate=t)}function Xi(e,t){var n=e.alternate;if(null===n){var r=e.updateQueue,o=null;null===r&&(r=e.updateQueue=Gi(e.memoizedState))}else r=e.updateQueue,o=n.updateQueue,null===r?null===o?(r=e.updateQueue=Gi(e.memoizedState),o=n.updateQueue=Gi(n.memoizedState)):r=e.updateQueue=Qi(o):null===o&&(o=n.updateQueue=Qi(r));null===o||r===o?Ki(r,t):null===r.lastUpdate||null===o.lastUpdate?(Ki(r,t),Ki(o,t)):(Ki(r,t),o.lastUpdate=t)}function Ji(e,t){var n=e.updateQueue;null===(n=null===n?e.updateQueue=Gi(e.memoizedState):ea(e,n)).lastCapturedUpdate?n.firstCapturedUpdate=n.lastCapturedUpdate=t:(n.lastCapturedUpdate.next=t,n.lastCapturedUpdate=t)}function ea(e,t){var n=e.alternate;return null!==n&&t===n.updateQueue&&(t=e.updateQueue=Qi(t)),t}function ta(e,t,n,r,i,a){switch(n.tag){case Hi:return\"function\"===typeof(e=n.payload)?e.call(a,r,i):e;case $i:e.effectTag=-2049&e.effectTag|64;case Vi:if(null===(i=\"function\"===typeof(e=n.payload)?e.call(a,r,i):e)||void 0===i)break;return o({},r,i);case Bi:qi=!0}return r}function na(e,t,n,r,o){qi=!1;for(var i=(t=ea(e,t)).baseState,a=null,u=0,l=t.firstUpdate,s=i;null!==l;){var c=l.expirationTime;c<o?(null===a&&(a=l,i=s),u<c&&(u=c)):(s=ta(e,0,l,s,n,r),null!==l.callback&&(e.effectTag|=32,l.nextEffect=null,null===t.lastEffect?t.firstEffect=t.lastEffect=l:(t.lastEffect.nextEffect=l,t.lastEffect=l))),l=l.next}for(c=null,l=t.firstCapturedUpdate;null!==l;){var f=l.expirationTime;f<o?(null===c&&(c=l,null===a&&(i=s)),u<f&&(u=f)):(s=ta(e,0,l,s,n,r),null!==l.callback&&(e.effectTag|=32,l.nextEffect=null,null===t.lastCapturedEffect?t.firstCapturedEffect=t.lastCapturedEffect=l:(t.lastCapturedEffect.nextEffect=l,t.lastCapturedEffect=l))),l=l.next}null===a&&(t.lastUpdate=null),null===c?t.lastCapturedUpdate=null:e.effectTag|=32,null===a&&null===c&&(i=s),t.baseState=i,t.firstUpdate=a,t.firstCapturedUpdate=c,e.expirationTime=u,e.memoizedState=s}function ra(e,t,n){null!==t.firstCapturedUpdate&&(null!==t.lastUpdate&&(t.lastUpdate.next=t.firstCapturedUpdate,t.lastUpdate=t.lastCapturedUpdate),t.firstCapturedUpdate=t.lastCapturedUpdate=null),oa(t.firstEffect,n),t.firstEffect=t.lastEffect=null,oa(t.firstCapturedEffect,n),t.firstCapturedEffect=t.lastCapturedEffect=null}function oa(e,t){for(;null!==e;){var n=e.callback;if(null!==n){e.callback=null;var r=t;\"function\"!==typeof n&&a(\"191\",n),n.call(r)}e=e.nextEffect}}function ia(e,t){return{value:e,source:t,stack:lt(t)}}function aa(e){e.effectTag|=4}var ua=void 0,la=void 0,sa=void 0,ca=void 0;ua=function(e,t){for(var n=t.child;null!==n;){if(5===n.tag||6===n.tag)e.appendChild(n.stateNode);else if(4!==n.tag&&null!==n.child){n.child.return=n,n=n.child;continue}if(n===t)break;for(;null===n.sibling;){if(null===n.return||n.return===t)return;n=n.return}n.sibling.return=n.return,n=n.sibling}},la=function(){},sa=function(e,t,n,r,i){var a=e.memoizedProps;if(a!==r){var u=t.stateNode;switch(ko(bo.current),e=null,n){case\"input\":a=bt(u,a),r=bt(u,r),e=[];break;case\"option\":a=qn(u,a),r=qn(u,r),e=[];break;case\"select\":a=o({},a,{value:void 0}),r=o({},r,{value:void 0}),e=[];break;case\"textarea\":a=Qn(u,a),r=Qn(u,r),e=[];break;default:\"function\"!==typeof a.onClick&&\"function\"===typeof r.onClick&&(u.onclick=hr)}fr(n,r),u=n=void 0;var l=null;for(n in a)if(!r.hasOwnProperty(n)&&a.hasOwnProperty(n)&&null!=a[n])if(\"style\"===n){var s=a[n];for(u in s)s.hasOwnProperty(u)&&(l||(l={}),l[u]=\"\")}else\"dangerouslySetInnerHTML\"!==n&&\"children\"!==n&&\"suppressContentEditableWarning\"!==n&&\"suppressHydrationWarning\"!==n&&\"autoFocus\"!==n&&(b.hasOwnProperty(n)?e||(e=[]):(e=e||[]).push(n,null));for(n in r){var c=r[n];if(s=null!=a?a[n]:void 0,r.hasOwnProperty(n)&&c!==s&&(null!=c||null!=s))if(\"style\"===n)if(s){for(u in s)!s.hasOwnProperty(u)||c&&c.hasOwnProperty(u)||(l||(l={}),l[u]=\"\");for(u in c)c.hasOwnProperty(u)&&s[u]!==c[u]&&(l||(l={}),l[u]=c[u])}else l||(e||(e=[]),e.push(n,l)),l=c;else\"dangerouslySetInnerHTML\"===n?(c=c?c.__html:void 0,s=s?s.__html:void 0,null!=c&&s!==c&&(e=e||[]).push(n,\"\"+c)):\"children\"===n?s===c||\"string\"!==typeof c&&\"number\"!==typeof c||(e=e||[]).push(n,\"\"+c):\"suppressContentEditableWarning\"!==n&&\"suppressHydrationWarning\"!==n&&(b.hasOwnProperty(n)?(null!=c&&pr(i,n),e||s===c||(e=[])):(e=e||[]).push(n,c))}l&&(e=e||[]).push(\"style\",l),i=e,(t.updateQueue=i)&&aa(t)}},ca=function(e,t,n,r){n!==r&&aa(t)};var fa=\"function\"===typeof WeakSet?WeakSet:Set;function da(e,t){var n=t.source,r=t.stack;null===r&&null!==n&&(r=lt(n)),null!==n&&ut(n.type),t=t.value,null!==e&&1===e.tag&&ut(e.type);try{console.error(t)}catch(o){setTimeout(function(){throw o})}}function pa(e){var t=e.ref;if(null!==t)if(\"function\"===typeof t)try{t(null)}catch(n){Ga(e,n)}else t.current=null}function ha(e,t,n){if(null!==(n=null!==(n=n.updateQueue)?n.lastEffect:null)){var r=n=n.next;do{if((r.tag&e)!==Co){var o=r.destroy;r.destroy=void 0,void 0!==o&&o()}(r.tag&t)!==Co&&(o=r.create,r.destroy=o()),r=r.next}while(r!==n)}}function ma(e){switch(\"function\"===typeof zr&&zr(e),e.tag){case 0:case 11:case 14:case 15:var t=e.updateQueue;if(null!==t&&null!==(t=t.lastEffect)){var n=t=t.next;do{var r=n.destroy;if(void 0!==r){var o=e;try{r()}catch(i){Ga(o,i)}}n=n.next}while(n!==t)}break;case 1:if(pa(e),\"function\"===typeof(t=e.stateNode).componentWillUnmount)try{t.props=e.memoizedProps,t.state=e.memoizedState,t.componentWillUnmount()}catch(i){Ga(e,i)}break;case 5:pa(e);break;case 4:ga(e)}}function ya(e){return 5===e.tag||3===e.tag||4===e.tag}function va(e){e:{for(var t=e.return;null!==t;){if(ya(t)){var n=t;break e}t=t.return}a(\"160\"),n=void 0}var r=t=void 0;switch(n.tag){case 5:t=n.stateNode,r=!1;break;case 3:case 4:t=n.stateNode.containerInfo,r=!0;break;default:a(\"161\")}16&n.effectTag&&(ir(t,\"\"),n.effectTag&=-17);e:t:for(n=e;;){for(;null===n.sibling;){if(null===n.return||ya(n.return)){n=null;break e}n=n.return}for(n.sibling.return=n.return,n=n.sibling;5!==n.tag&&6!==n.tag&&18!==n.tag;){if(2&n.effectTag)continue t;if(null===n.child||4===n.tag)continue t;n.child.return=n,n=n.child}if(!(2&n.effectTag)){n=n.stateNode;break e}}for(var o=e;;){if(5===o.tag||6===o.tag)if(n)if(r){var i=t,u=o.stateNode,l=n;8===i.nodeType?i.parentNode.insertBefore(u,l):i.insertBefore(u,l)}else t.insertBefore(o.stateNode,n);else r?(u=t,l=o.stateNode,8===u.nodeType?(i=u.parentNode).insertBefore(l,u):(i=u).appendChild(l),null!==(u=u._reactRootContainer)&&void 0!==u||null!==i.onclick||(i.onclick=hr)):t.appendChild(o.stateNode);else if(4!==o.tag&&null!==o.child){o.child.return=o,o=o.child;continue}if(o===e)break;for(;null===o.sibling;){if(null===o.return||o.return===e)return;o=o.return}o.sibling.return=o.return,o=o.sibling}}function ga(e){for(var t=e,n=!1,r=void 0,o=void 0;;){if(!n){n=t.return;e:for(;;){switch(null===n&&a(\"160\"),n.tag){case 5:r=n.stateNode,o=!1;break e;case 3:case 4:r=n.stateNode.containerInfo,o=!0;break e}n=n.return}n=!0}if(5===t.tag||6===t.tag){e:for(var i=t,u=i;;)if(ma(u),null!==u.child&&4!==u.tag)u.child.return=u,u=u.child;else{if(u===i)break;for(;null===u.sibling;){if(null===u.return||u.return===i)break e;u=u.return}u.sibling.return=u.return,u=u.sibling}o?(i=r,u=t.stateNode,8===i.nodeType?i.parentNode.removeChild(u):i.removeChild(u)):r.removeChild(t.stateNode)}else if(4===t.tag){if(null!==t.child){r=t.stateNode.containerInfo,o=!0,t.child.return=t,t=t.child;continue}}else if(ma(t),null!==t.child){t.child.return=t,t=t.child;continue}if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)return;4===(t=t.return).tag&&(n=!1)}t.sibling.return=t.return,t=t.sibling}}function ba(e,t){switch(t.tag){case 0:case 11:case 14:case 15:ha(Po,Mo,t);break;case 1:break;case 5:var n=t.stateNode;if(null!=n){var r=t.memoizedProps;e=null!==e?e.memoizedProps:r;var o=t.type,i=t.updateQueue;t.updateQueue=null,null!==i&&function(e,t,n,r,o){e[N]=o,\"input\"===n&&\"radio\"===o.type&&null!=o.name&&wt(e,o),dr(n,r),r=dr(n,o);for(var i=0;i<t.length;i+=2){var a=t[i],u=t[i+1];\"style\"===a?sr(e,u):\"dangerouslySetInnerHTML\"===a?or(e,u):\"children\"===a?ir(e,u):vt(e,a,u,r)}switch(n){case\"input\":kt(e,o);break;case\"textarea\":Kn(e,o);break;case\"select\":t=e._wrapperState.wasMultiple,e._wrapperState.wasMultiple=!!o.multiple,null!=(n=o.value)?Gn(e,!!o.multiple,n,!1):t!==!!o.multiple&&(null!=o.defaultValue?Gn(e,!!o.multiple,o.defaultValue,!0):Gn(e,!!o.multiple,o.multiple?[]:\"\",!1))}}(n,i,o,e,r)}break;case 6:null===t.stateNode&&a(\"162\"),t.stateNode.nodeValue=t.memoizedProps;break;case 3:case 12:break;case 13:if(n=t.memoizedState,r=void 0,e=t,null===n?r=!1:(r=!0,e=t.child,0===n.timedOutAt&&(n.timedOutAt=ku())),null!==e&&function(e,t){for(var n=e;;){if(5===n.tag){var r=n.stateNode;if(t)r.style.display=\"none\";else{r=n.stateNode;var o=n.memoizedProps.style;o=void 0!==o&&null!==o&&o.hasOwnProperty(\"display\")?o.display:null,r.style.display=lr(\"display\",o)}}else if(6===n.tag)n.stateNode.nodeValue=t?\"\":n.memoizedProps;else{if(13===n.tag&&null!==n.memoizedState){(r=n.child.sibling).return=n,n=r;continue}if(null!==n.child){n.child.return=n,n=n.child;continue}}if(n===e)break;for(;null===n.sibling;){if(null===n.return||n.return===e)return;n=n.return}n.sibling.return=n.return,n=n.sibling}}(e,r),null!==(n=t.updateQueue)){t.updateQueue=null;var u=t.stateNode;null===u&&(u=t.stateNode=new fa),n.forEach(function(e){var n=function(e,t){var n=e.stateNode;null!==n&&n.delete(t),t=Qa(t=ku(),e),null!==(e=Ka(e,t))&&(Jr(e,t),0!==(t=e.expirationTime)&&xu(e,t))}.bind(null,t,e);u.has(e)||(u.add(e),e.then(n,n))})}break;case 17:break;default:a(\"163\")}}var _a=\"function\"===typeof WeakMap?WeakMap:Map;function wa(e,t,n){(n=Zi(n)).tag=$i,n.payload={element:null};var r=t.value;return n.callback=function(){Du(r),da(e,t)},n}function ka(e,t,n){(n=Zi(n)).tag=$i;var r=e.type.getDerivedStateFromError;if(\"function\"===typeof r){var o=t.value;n.payload=function(){return r(o)}}var i=e.stateNode;return null!==i&&\"function\"===typeof i.componentDidCatch&&(n.callback=function(){\"function\"!==typeof r&&(null===Ya?Ya=new Set([this]):Ya.add(this));var n=t.value,o=t.stack;da(e,t),this.componentDidCatch(n,{componentStack:null!==o?o:\"\"})}),n}function xa(e){switch(e.tag){case 1:Nr(e.type)&&Fr();var t=e.effectTag;return 2048&t?(e.effectTag=-2049&t|64,e):null;case 3:return So(),Ar(),0!==(64&(t=e.effectTag))&&a(\"285\"),e.effectTag=-2049&t|64,e;case 5:return Oo(e),null;case 13:return 2048&(t=e.effectTag)?(e.effectTag=-2049&t|64,e):null;case 18:return null;case 4:return So(),null;case 10:return Ii(e),null;default:return null}}var Sa=He.ReactCurrentDispatcher,Ta=He.ReactCurrentOwner,Oa=1073741822,Ca=!1,Ea=null,Pa=null,Ma=0,ja=-1,Da=!1,Ra=null,Na=!1,Fa=null,Aa=null,Ua=null,Ya=null;function La(){if(null!==Ea)for(var e=Ea.return;null!==e;){var t=e;switch(t.tag){case 1:var n=t.type.childContextTypes;null!==n&&void 0!==n&&Fr();break;case 3:So(),Ar();break;case 5:Oo(t);break;case 4:So();break;case 10:Ii(t)}e=e.return}Pa=null,Ma=0,ja=-1,Da=!1,Ea=null}function Ia(){for(;null!==Ra;){var e=Ra.effectTag;if(16&e&&ir(Ra.stateNode,\"\"),128&e){var t=Ra.alternate;null!==t&&(null!==(t=t.ref)&&(\"function\"===typeof t?t(null):t.current=null))}switch(14&e){case 2:va(Ra),Ra.effectTag&=-3;break;case 6:va(Ra),Ra.effectTag&=-3,ba(Ra.alternate,Ra);break;case 4:ba(Ra.alternate,Ra);break;case 8:ga(e=Ra),e.return=null,e.child=null,e.memoizedState=null,e.updateQueue=null,null!==(e=e.alternate)&&(e.return=null,e.child=null,e.memoizedState=null,e.updateQueue=null)}Ra=Ra.nextEffect}}function Wa(){for(;null!==Ra;){if(256&Ra.effectTag)e:{var e=Ra.alternate,t=Ra;switch(t.tag){case 0:case 11:case 15:ha(Eo,Co,t);break e;case 1:if(256&t.effectTag&&null!==e){var n=e.memoizedProps,r=e.memoizedState;t=(e=t.stateNode).getSnapshotBeforeUpdate(t.elementType===t.type?n:ro(t.type,n),r),e.__reactInternalSnapshotBeforeUpdate=t}break e;case 3:case 5:case 6:case 4:case 17:break e;default:a(\"163\")}}Ra=Ra.nextEffect}}function za(e,t){for(;null!==Ra;){var n=Ra.effectTag;if(36&n){var r=Ra.alternate,o=Ra,i=t;switch(o.tag){case 0:case 11:case 15:ha(jo,Do,o);break;case 1:var u=o.stateNode;if(4&o.effectTag)if(null===r)u.componentDidMount();else{var l=o.elementType===o.type?r.memoizedProps:ro(o.type,r.memoizedProps);u.componentDidUpdate(l,r.memoizedState,u.__reactInternalSnapshotBeforeUpdate)}null!==(r=o.updateQueue)&&ra(0,r,u);break;case 3:if(null!==(r=o.updateQueue)){if(u=null,null!==o.child)switch(o.child.tag){case 5:u=o.child.stateNode;break;case 1:u=o.child.stateNode}ra(0,r,u)}break;case 5:i=o.stateNode,null===r&&4&o.effectTag&&vr(o.type,o.memoizedProps)&&i.focus();break;case 6:case 4:case 12:case 13:case 17:break;default:a(\"163\")}}128&n&&(null!==(o=Ra.ref)&&(i=Ra.stateNode,\"function\"===typeof o?o(i):o.current=i)),512&n&&(Fa=e),Ra=Ra.nextEffect}}function Va(){null!==Aa&&kr(Aa),null!==Ua&&Ua()}function Ha(e,t){Na=Ca=!0,e.current===t&&a(\"177\");var n=e.pendingCommitExpirationTime;0===n&&a(\"261\"),e.pendingCommitExpirationTime=0;var r=t.expirationTime,o=t.childExpirationTime;for(function(e,t){if(e.didError=!1,0===t)e.earliestPendingTime=0,e.latestPendingTime=0,e.earliestSuspendedTime=0,e.latestSuspendedTime=0,e.latestPingedTime=0;else{t<e.latestPingedTime&&(e.latestPingedTime=0);var n=e.latestPendingTime;0!==n&&(n>t?e.earliestPendingTime=e.latestPendingTime=0:e.earliestPendingTime>t&&(e.earliestPendingTime=e.latestPendingTime)),0===(n=e.earliestSuspendedTime)?Jr(e,t):t<e.latestSuspendedTime?(e.earliestSuspendedTime=0,e.latestSuspendedTime=0,e.latestPingedTime=0,Jr(e,t)):t>n&&Jr(e,t)}no(0,e)}(e,o>r?o:r),Ta.current=null,r=void 0,1<t.effectTag?null!==t.lastEffect?(t.lastEffect.nextEffect=t,r=t.firstEffect):r=t:r=t.firstEffect,mr=Sn,yr=function(){var e=An();if(Un(e)){if(\"selectionStart\"in e)var t={start:e.selectionStart,end:e.selectionEnd};else e:{var n=(t=(t=e.ownerDocument)&&t.defaultView||window).getSelection&&t.getSelection();if(n&&0!==n.rangeCount){t=n.anchorNode;var r=n.anchorOffset,o=n.focusNode;n=n.focusOffset;try{t.nodeType,o.nodeType}catch(p){t=null;break e}var i=0,a=-1,u=-1,l=0,s=0,c=e,f=null;t:for(;;){for(var d;c!==t||0!==r&&3!==c.nodeType||(a=i+r),c!==o||0!==n&&3!==c.nodeType||(u=i+n),3===c.nodeType&&(i+=c.nodeValue.length),null!==(d=c.firstChild);)f=c,c=d;for(;;){if(c===e)break t;if(f===t&&++l===r&&(a=i),f===o&&++s===n&&(u=i),null!==(d=c.nextSibling))break;f=(c=f).parentNode}c=d}t=-1===a||-1===u?null:{start:a,end:u}}else t=null}t=t||{start:0,end:0}}else t=null;return{focusedElem:e,selectionRange:t}}(),Sn=!1,Ra=r;null!==Ra;){o=!1;var u=void 0;try{Wa()}catch(s){o=!0,u=s}o&&(null===Ra&&a(\"178\"),Ga(Ra,u),null!==Ra&&(Ra=Ra.nextEffect))}for(Ra=r;null!==Ra;){o=!1,u=void 0;try{Ia()}catch(s){o=!0,u=s}o&&(null===Ra&&a(\"178\"),Ga(Ra,u),null!==Ra&&(Ra=Ra.nextEffect))}for(Yn(yr),yr=null,Sn=!!mr,mr=null,e.current=t,Ra=r;null!==Ra;){o=!1,u=void 0;try{za(e,n)}catch(s){o=!0,u=s}o&&(null===Ra&&a(\"178\"),Ga(Ra,u),null!==Ra&&(Ra=Ra.nextEffect))}if(null!==r&&null!==Fa){var l=function(e,t){Ua=Aa=Fa=null;var n=ou;ou=!0;do{if(512&t.effectTag){var r=!1,o=void 0;try{var i=t;ha(No,Co,i),ha(Co,Ro,i)}catch(l){r=!0,o=l}r&&Ga(t,o)}t=t.nextEffect}while(null!==t);ou=n,0!==(n=e.expirationTime)&&xu(e,n),cu||ou||Eu(1073741823,!1)}.bind(null,e,r);Aa=i.unstable_runWithPriority(i.unstable_NormalPriority,function(){return wr(l)}),Ua=l}Ca=Na=!1,\"function\"===typeof Wr&&Wr(t.stateNode),n=t.expirationTime,0===(t=(t=t.childExpirationTime)>n?t:n)&&(Ya=null),function(e,t){e.expirationTime=t,e.finishedWork=null}(e,t)}function Ba(e){for(;;){var t=e.alternate,n=e.return,r=e.sibling;if(0===(1024&e.effectTag)){Ea=e;e:{var i=t,u=Ma,l=(t=e).pendingProps;switch(t.tag){case 2:case 16:break;case 15:case 0:break;case 1:Nr(t.type)&&Fr();break;case 3:So(),Ar(),(l=t.stateNode).pendingContext&&(l.context=l.pendingContext,l.pendingContext=null),null!==i&&null!==i.child||(bi(t),t.effectTag&=-3),la(t);break;case 5:Oo(t);var s=ko(wo.current);if(u=t.type,null!==i&&null!=t.stateNode)sa(i,t,u,l,s),i.ref!==t.ref&&(t.effectTag|=128);else if(l){var c=ko(bo.current);if(bi(t)){i=(l=t).stateNode;var f=l.type,d=l.memoizedProps,p=s;switch(i[R]=l,i[N]=d,u=void 0,s=f){case\"iframe\":case\"object\":Tn(\"load\",i);break;case\"video\":case\"audio\":for(f=0;f<te.length;f++)Tn(te[f],i);break;case\"source\":Tn(\"error\",i);break;case\"img\":case\"image\":case\"link\":Tn(\"error\",i),Tn(\"load\",i);break;case\"form\":Tn(\"reset\",i),Tn(\"submit\",i);break;case\"details\":Tn(\"toggle\",i);break;case\"input\":_t(i,d),Tn(\"invalid\",i),pr(p,\"onChange\");break;case\"select\":i._wrapperState={wasMultiple:!!d.multiple},Tn(\"invalid\",i),pr(p,\"onChange\");break;case\"textarea\":Zn(i,d),Tn(\"invalid\",i),pr(p,\"onChange\")}for(u in fr(s,d),f=null,d)d.hasOwnProperty(u)&&(c=d[u],\"children\"===u?\"string\"===typeof c?i.textContent!==c&&(f=[\"children\",c]):\"number\"===typeof c&&i.textContent!==\"\"+c&&(f=[\"children\",\"\"+c]):b.hasOwnProperty(u)&&null!=c&&pr(p,u));switch(s){case\"input\":ze(i),xt(i,d,!0);break;case\"textarea\":ze(i),Xn(i);break;case\"select\":case\"option\":break;default:\"function\"===typeof d.onClick&&(i.onclick=hr)}u=f,l.updateQueue=u,(l=null!==u)&&aa(t)}else{d=t,i=u,p=l,f=9===s.nodeType?s:s.ownerDocument,c===Jn.html&&(c=er(i)),c===Jn.html?\"script\"===i?((i=f.createElement(\"div\")).innerHTML=\"<script><\\/script>\",f=i.removeChild(i.firstChild)):\"string\"===typeof p.is?f=f.createElement(i,{is:p.is}):(f=f.createElement(i),\"select\"===i&&p.multiple&&(f.multiple=!0)):f=f.createElementNS(c,i),(i=f)[R]=d,i[N]=l,ua(i,t,!1,!1),p=i;var h=s,m=dr(f=u,d=l);switch(f){case\"iframe\":case\"object\":Tn(\"load\",p),s=d;break;case\"video\":case\"audio\":for(s=0;s<te.length;s++)Tn(te[s],p);s=d;break;case\"source\":Tn(\"error\",p),s=d;break;case\"img\":case\"image\":case\"link\":Tn(\"error\",p),Tn(\"load\",p),s=d;break;case\"form\":Tn(\"reset\",p),Tn(\"submit\",p),s=d;break;case\"details\":Tn(\"toggle\",p),s=d;break;case\"input\":_t(p,d),s=bt(p,d),Tn(\"invalid\",p),pr(h,\"onChange\");break;case\"option\":s=qn(p,d);break;case\"select\":p._wrapperState={wasMultiple:!!d.multiple},s=o({},d,{value:void 0}),Tn(\"invalid\",p),pr(h,\"onChange\");break;case\"textarea\":Zn(p,d),s=Qn(p,d),Tn(\"invalid\",p),pr(h,\"onChange\");break;default:s=d}fr(f,s),c=void 0;var y=f,v=p,g=s;for(c in g)if(g.hasOwnProperty(c)){var _=g[c];\"style\"===c?sr(v,_):\"dangerouslySetInnerHTML\"===c?null!=(_=_?_.__html:void 0)&&or(v,_):\"children\"===c?\"string\"===typeof _?(\"textarea\"!==y||\"\"!==_)&&ir(v,_):\"number\"===typeof _&&ir(v,\"\"+_):\"suppressContentEditableWarning\"!==c&&\"suppressHydrationWarning\"!==c&&\"autoFocus\"!==c&&(b.hasOwnProperty(c)?null!=_&&pr(h,c):null!=_&&vt(v,c,_,m))}switch(f){case\"input\":ze(p),xt(p,d,!1);break;case\"textarea\":ze(p),Xn(p);break;case\"option\":null!=d.value&&p.setAttribute(\"value\",\"\"+gt(d.value));break;case\"select\":(s=p).multiple=!!d.multiple,null!=(p=d.value)?Gn(s,!!d.multiple,p,!1):null!=d.defaultValue&&Gn(s,!!d.multiple,d.defaultValue,!0);break;default:\"function\"===typeof s.onClick&&(p.onclick=hr)}(l=vr(u,l))&&aa(t),t.stateNode=i}null!==t.ref&&(t.effectTag|=128)}else null===t.stateNode&&a(\"166\");break;case 6:i&&null!=t.stateNode?ca(i,t,i.memoizedProps,l):(\"string\"!==typeof l&&(null===t.stateNode&&a(\"166\")),i=ko(wo.current),ko(bo.current),bi(t)?(u=(l=t).stateNode,i=l.memoizedProps,u[R]=l,(l=u.nodeValue!==i)&&aa(t)):(u=t,(l=(9===i.nodeType?i:i.ownerDocument).createTextNode(l))[R]=t,u.stateNode=l));break;case 11:break;case 13:if(l=t.memoizedState,0!==(64&t.effectTag)){t.expirationTime=u,Ea=t;break e}l=null!==l,u=null!==i&&null!==i.memoizedState,null!==i&&!l&&u&&(null!==(i=i.child.sibling)&&(null!==(s=t.firstEffect)?(t.firstEffect=i,i.nextEffect=s):(t.firstEffect=t.lastEffect=i,i.nextEffect=null),i.effectTag=8)),(l||u)&&(t.effectTag|=4);break;case 7:case 8:case 12:break;case 4:So(),la(t);break;case 10:Ii(t);break;case 9:case 14:break;case 17:Nr(t.type)&&Fr();break;case 18:break;default:a(\"156\")}Ea=null}if(t=e,1===Ma||1!==t.childExpirationTime){for(l=0,u=t.child;null!==u;)(i=u.expirationTime)>l&&(l=i),(s=u.childExpirationTime)>l&&(l=s),u=u.sibling;t.childExpirationTime=l}if(null!==Ea)return Ea;null!==n&&0===(1024&n.effectTag)&&(null===n.firstEffect&&(n.firstEffect=e.firstEffect),null!==e.lastEffect&&(null!==n.lastEffect&&(n.lastEffect.nextEffect=e.firstEffect),n.lastEffect=e.lastEffect),1<e.effectTag&&(null!==n.lastEffect?n.lastEffect.nextEffect=e:n.firstEffect=e,n.lastEffect=e))}else{if(null!==(e=xa(e)))return e.effectTag&=1023,e;null!==n&&(n.firstEffect=n.lastEffect=null,n.effectTag|=1024)}if(null!==r)return r;if(null===n)break;e=n}return null}function $a(e){var t=Ni(e.alternate,e,Ma);return e.memoizedProps=e.pendingProps,null===t&&(t=Ba(e)),Ta.current=null,t}function qa(e,t){Ca&&a(\"243\"),Va(),Ca=!0;var n=Sa.current;Sa.current=si;var r=e.nextExpirationTimeToWorkOn;r===Ma&&e===Pa&&null!==Ea||(La(),Ma=r,Ea=qr((Pa=e).current,null),e.pendingCommitExpirationTime=0);for(var o=!1;;){try{if(t)for(;null!==Ea&&!Ou();)Ea=$a(Ea);else for(;null!==Ea;)Ea=$a(Ea)}catch(v){if(Yi=Ui=Ai=null,Xo(),null===Ea)o=!0,Du(v);else{null===Ea&&a(\"271\");var i=Ea,u=i.return;if(null!==u){e:{var l=e,s=u,c=i,f=v;if(u=Ma,c.effectTag|=1024,c.firstEffect=c.lastEffect=null,null!==f&&\"object\"===typeof f&&\"function\"===typeof f.then){var d=f;f=s;var p=-1,h=-1;do{if(13===f.tag){var m=f.alternate;if(null!==m&&null!==(m=m.memoizedState)){h=10*(1073741822-m.timedOutAt);break}\"number\"===typeof(m=f.pendingProps.maxDuration)&&(0>=m?p=0:(-1===p||m<p)&&(p=m))}f=f.return}while(null!==f);f=s;do{if((m=13===f.tag)&&(m=void 0!==f.memoizedProps.fallback&&null===f.memoizedState),m){if(null===(s=f.updateQueue)?((s=new Set).add(d),f.updateQueue=s):s.add(d),0===(1&f.mode)){f.effectTag|=64,c.effectTag&=-1957,1===c.tag&&(null===c.alternate?c.tag=17:((u=Zi(1073741823)).tag=Bi,Xi(c,u))),c.expirationTime=1073741823;break e}s=u;var y=(c=l).pingCache;null===y?(y=c.pingCache=new _a,m=new Set,y.set(d,m)):void 0===(m=y.get(d))&&(m=new Set,y.set(d,m)),m.has(s)||(m.add(s),c=Za.bind(null,c,d,s),d.then(c,c)),-1===p?l=1073741823:(-1===h&&(h=10*(1073741822-to(l,u))-5e3),l=h+p),0<=l&&ja<l&&(ja=l),f.effectTag|=2048,f.expirationTime=u;break e}f=f.return}while(null!==f);f=Error((ut(c.type)||\"A React component\")+\" suspended while rendering, but no fallback UI was specified.\\n\\nAdd a <Suspense fallback=...> component higher in the tree to provide a loading indicator or placeholder to display.\"+lt(c))}Da=!0,f=ia(f,c),l=s;do{switch(l.tag){case 3:l.effectTag|=2048,l.expirationTime=u,Ji(l,u=wa(l,f,u));break e;case 1:if(p=f,h=l.type,c=l.stateNode,0===(64&l.effectTag)&&(\"function\"===typeof h.getDerivedStateFromError||null!==c&&\"function\"===typeof c.componentDidCatch&&(null===Ya||!Ya.has(c)))){l.effectTag|=2048,l.expirationTime=u,Ji(l,u=ka(l,p,u));break e}}l=l.return}while(null!==l)}Ea=Ba(i);continue}o=!0,Du(v)}}break}if(Ca=!1,Sa.current=n,Yi=Ui=Ai=null,Xo(),o)Pa=null,e.finishedWork=null;else if(null!==Ea)e.finishedWork=null;else{if(null===(n=e.current.alternate)&&a(\"281\"),Pa=null,Da){if(o=e.latestPendingTime,i=e.latestSuspendedTime,u=e.latestPingedTime,0!==o&&o<r||0!==i&&i<r||0!==u&&u<r)return eo(e,r),void wu(e,n,r,e.expirationTime,-1);if(!e.didError&&t)return e.didError=!0,r=e.nextExpirationTimeToWorkOn=r,t=e.expirationTime=1073741823,void wu(e,n,r,t,-1)}t&&-1!==ja?(eo(e,r),(t=10*(1073741822-to(e,r)))<ja&&(ja=t),t=10*(1073741822-ku()),t=ja-t,wu(e,n,r,e.expirationTime,0>t?0:t)):(e.pendingCommitExpirationTime=r,e.finishedWork=n)}}function Ga(e,t){for(var n=e.return;null!==n;){switch(n.tag){case 1:var r=n.stateNode;if(\"function\"===typeof n.type.getDerivedStateFromError||\"function\"===typeof r.componentDidCatch&&(null===Ya||!Ya.has(r)))return Xi(n,e=ka(n,e=ia(t,e),1073741823)),void Xa(n,1073741823);break;case 3:return Xi(n,e=wa(n,e=ia(t,e),1073741823)),void Xa(n,1073741823)}n=n.return}3===e.tag&&(Xi(e,n=wa(e,n=ia(t,e),1073741823)),Xa(e,1073741823))}function Qa(e,t){var n=i.unstable_getCurrentPriorityLevel(),r=void 0;if(0===(1&t.mode))r=1073741823;else if(Ca&&!Na)r=Ma;else{switch(n){case i.unstable_ImmediatePriority:r=1073741823;break;case i.unstable_UserBlockingPriority:r=1073741822-10*(1+((1073741822-e+15)/10|0));break;case i.unstable_NormalPriority:r=1073741822-25*(1+((1073741822-e+500)/25|0));break;case i.unstable_LowPriority:case i.unstable_IdlePriority:r=1;break;default:a(\"313\")}null!==Pa&&r===Ma&&--r}return n===i.unstable_UserBlockingPriority&&(0===uu||r<uu)&&(uu=r),r}function Za(e,t,n){var r=e.pingCache;null!==r&&r.delete(t),null!==Pa&&Ma===n?Pa=null:(t=e.earliestSuspendedTime,r=e.latestSuspendedTime,0!==t&&n<=t&&n>=r&&(e.didError=!1,(0===(t=e.latestPingedTime)||t>n)&&(e.latestPingedTime=n),no(n,e),0!==(n=e.expirationTime)&&xu(e,n)))}function Ka(e,t){e.expirationTime<t&&(e.expirationTime=t);var n=e.alternate;null!==n&&n.expirationTime<t&&(n.expirationTime=t);var r=e.return,o=null;if(null===r&&3===e.tag)o=e.stateNode;else for(;null!==r;){if(n=r.alternate,r.childExpirationTime<t&&(r.childExpirationTime=t),null!==n&&n.childExpirationTime<t&&(n.childExpirationTime=t),null===r.return&&3===r.tag){o=r.stateNode;break}r=r.return}return o}function Xa(e,t){null!==(e=Ka(e,t))&&(!Ca&&0!==Ma&&t>Ma&&La(),Jr(e,t),Ca&&!Na&&Pa===e||xu(e,e.expirationTime),vu>yu&&(vu=0,a(\"185\")))}function Ja(e,t,n,r,o){return i.unstable_runWithPriority(i.unstable_ImmediatePriority,function(){return e(t,n,r,o)})}var eu=null,tu=null,nu=0,ru=void 0,ou=!1,iu=null,au=0,uu=0,lu=!1,su=null,cu=!1,fu=!1,du=null,pu=i.unstable_now(),hu=1073741822-(pu/10|0),mu=hu,yu=50,vu=0,gu=null;function bu(){hu=1073741822-((i.unstable_now()-pu)/10|0)}function _u(e,t){if(0!==nu){if(t<nu)return;null!==ru&&i.unstable_cancelCallback(ru)}nu=t,e=i.unstable_now()-pu,ru=i.unstable_scheduleCallback(Cu,{timeout:10*(1073741822-t)-e})}function wu(e,t,n,r,o){e.expirationTime=r,0!==o||Ou()?0<o&&(e.timeoutHandle=br(function(e,t,n){e.pendingCommitExpirationTime=n,e.finishedWork=t,bu(),mu=hu,Pu(e,n)}.bind(null,e,t,n),o)):(e.pendingCommitExpirationTime=n,e.finishedWork=t)}function ku(){return ou?mu:(Su(),0!==au&&1!==au||(bu(),mu=hu),mu)}function xu(e,t){null===e.nextScheduledRoot?(e.expirationTime=t,null===tu?(eu=tu=e,e.nextScheduledRoot=e):(tu=tu.nextScheduledRoot=e).nextScheduledRoot=eu):t>e.expirationTime&&(e.expirationTime=t),ou||(cu?fu&&(iu=e,au=1073741823,Mu(e,1073741823,!1)):1073741823===t?Eu(1073741823,!1):_u(e,t))}function Su(){var e=0,t=null;if(null!==tu)for(var n=tu,r=eu;null!==r;){var o=r.expirationTime;if(0===o){if((null===n||null===tu)&&a(\"244\"),r===r.nextScheduledRoot){eu=tu=r.nextScheduledRoot=null;break}if(r===eu)eu=o=r.nextScheduledRoot,tu.nextScheduledRoot=o,r.nextScheduledRoot=null;else{if(r===tu){(tu=n).nextScheduledRoot=eu,r.nextScheduledRoot=null;break}n.nextScheduledRoot=r.nextScheduledRoot,r.nextScheduledRoot=null}r=n.nextScheduledRoot}else{if(o>e&&(e=o,t=r),r===tu)break;if(1073741823===e)break;n=r,r=r.nextScheduledRoot}}iu=t,au=e}var Tu=!1;function Ou(){return!!Tu||!!i.unstable_shouldYield()&&(Tu=!0)}function Cu(){try{if(!Ou()&&null!==eu){bu();var e=eu;do{var t=e.expirationTime;0!==t&&hu<=t&&(e.nextExpirationTimeToWorkOn=hu),e=e.nextScheduledRoot}while(e!==eu)}Eu(0,!0)}finally{Tu=!1}}function Eu(e,t){if(Su(),t)for(bu(),mu=hu;null!==iu&&0!==au&&e<=au&&!(Tu&&hu>au);)Mu(iu,au,hu>au),Su(),bu(),mu=hu;else for(;null!==iu&&0!==au&&e<=au;)Mu(iu,au,!1),Su();if(t&&(nu=0,ru=null),0!==au&&_u(iu,au),vu=0,gu=null,null!==du)for(e=du,du=null,t=0;t<e.length;t++){var n=e[t];try{n._onComplete()}catch(r){lu||(lu=!0,su=r)}}if(lu)throw e=su,su=null,lu=!1,e}function Pu(e,t){ou&&a(\"253\"),iu=e,au=t,Mu(e,t,!1),Eu(1073741823,!1)}function Mu(e,t,n){if(ou&&a(\"245\"),ou=!0,n){var r=e.finishedWork;null!==r?ju(e,r,t):(e.finishedWork=null,-1!==(r=e.timeoutHandle)&&(e.timeoutHandle=-1,_r(r)),qa(e,n),null!==(r=e.finishedWork)&&(Ou()?e.finishedWork=r:ju(e,r,t)))}else null!==(r=e.finishedWork)?ju(e,r,t):(e.finishedWork=null,-1!==(r=e.timeoutHandle)&&(e.timeoutHandle=-1,_r(r)),qa(e,n),null!==(r=e.finishedWork)&&ju(e,r,t));ou=!1}function ju(e,t,n){var r=e.firstBatch;if(null!==r&&r._expirationTime>=n&&(null===du?du=[r]:du.push(r),r._defer))return e.finishedWork=t,void(e.expirationTime=0);e.finishedWork=null,e===gu?vu++:(gu=e,vu=0),i.unstable_runWithPriority(i.unstable_ImmediatePriority,function(){Ha(e,t)})}function Du(e){null===iu&&a(\"246\"),iu.expirationTime=0,lu||(lu=!0,su=e)}function Ru(e,t){var n=cu;cu=!0;try{return e(t)}finally{(cu=n)||ou||Eu(1073741823,!1)}}function Nu(e,t){if(cu&&!fu){fu=!0;try{return e(t)}finally{fu=!1}}return e(t)}function Fu(e,t,n){cu||ou||0===uu||(Eu(uu,!1),uu=0);var r=cu;cu=!0;try{return i.unstable_runWithPriority(i.unstable_UserBlockingPriority,function(){return e(t,n)})}finally{(cu=r)||ou||Eu(1073741823,!1)}}function Au(e,t,n,r,o){var i=t.current;e:if(n){t:{2===tn(n=n._reactInternalFiber)&&1===n.tag||a(\"170\");var u=n;do{switch(u.tag){case 3:u=u.stateNode.context;break t;case 1:if(Nr(u.type)){u=u.stateNode.__reactInternalMemoizedMergedChildContext;break t}}u=u.return}while(null!==u);a(\"171\"),u=void 0}if(1===n.tag){var l=n.type;if(Nr(l)){n=Yr(n,l,u);break e}}n=u}else n=Pr;return null===t.context?t.context=n:t.pendingContext=n,t=o,(o=Zi(r)).payload={element:e},null!==(t=void 0===t?null:t)&&(o.callback=t),Va(),Xi(i,o),Xa(i,r),r}function Uu(e,t,n,r){var o=t.current;return Au(e,t,n,o=Qa(ku(),o),r)}function Yu(e){if(!(e=e.current).child)return null;switch(e.child.tag){case 5:default:return e.child.stateNode}}function Lu(e){var t=1073741822-25*(1+((1073741822-ku()+500)/25|0));t>=Oa&&(t=Oa-1),this._expirationTime=Oa=t,this._root=e,this._callbacks=this._next=null,this._hasChildren=this._didComplete=!1,this._children=null,this._defer=!0}function Iu(){this._callbacks=null,this._didCommit=!1,this._onCommit=this._onCommit.bind(this)}function Wu(e,t,n){e={current:t=Br(3,null,null,t?3:0),containerInfo:e,pendingChildren:null,pingCache:null,earliestPendingTime:0,latestPendingTime:0,earliestSuspendedTime:0,latestSuspendedTime:0,latestPingedTime:0,didError:!1,pendingCommitExpirationTime:0,finishedWork:null,timeoutHandle:-1,context:null,pendingContext:null,hydrate:n,nextExpirationTimeToWorkOn:0,expirationTime:0,firstBatch:null,nextScheduledRoot:null},this._internalRoot=t.stateNode=e}function zu(e){return!(!e||1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType&&(8!==e.nodeType||\" react-mount-point-unstable \"!==e.nodeValue))}function Vu(e,t,n,r,o){var i=n._reactRootContainer;if(i){if(\"function\"===typeof o){var a=o;o=function(){var e=Yu(i._internalRoot);a.call(e)}}null!=e?i.legacy_renderSubtreeIntoContainer(e,t,o):i.render(t,o)}else{if(i=n._reactRootContainer=function(e,t){if(t||(t=!(!(t=e?9===e.nodeType?e.documentElement:e.firstChild:null)||1!==t.nodeType||!t.hasAttribute(\"data-reactroot\"))),!t)for(var n;n=e.lastChild;)e.removeChild(n);return new Wu(e,!1,t)}(n,r),\"function\"===typeof o){var u=o;o=function(){var e=Yu(i._internalRoot);u.call(e)}}Nu(function(){null!=e?i.legacy_renderSubtreeIntoContainer(e,t,o):i.render(t,o)})}return Yu(i._internalRoot)}function Hu(e,t){var n=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;return zu(t)||a(\"200\"),function(e,t,n){var r=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:Ge,key:null==r?null:\"\"+r,children:e,containerInfo:t,implementation:n}}(e,t,null,n)}Oe=function(e,t,n){switch(t){case\"input\":if(kt(e,n),t=n.name,\"radio\"===n.type&&null!=t){for(n=e;n.parentNode;)n=n.parentNode;for(n=n.querySelectorAll(\"input[name=\"+JSON.stringify(\"\"+t)+'][type=\"radio\"]'),t=0;t<n.length;t++){var r=n[t];if(r!==e&&r.form===e.form){var o=Y(r);o||a(\"90\"),Ve(r),kt(r,o)}}}break;case\"textarea\":Kn(e,n);break;case\"select\":null!=(t=n.value)&&Gn(e,!!n.multiple,t,!1)}},Lu.prototype.render=function(e){this._defer||a(\"250\"),this._hasChildren=!0,this._children=e;var t=this._root._internalRoot,n=this._expirationTime,r=new Iu;return Au(e,t,null,n,r._onCommit),r},Lu.prototype.then=function(e){if(this._didComplete)e();else{var t=this._callbacks;null===t&&(t=this._callbacks=[]),t.push(e)}},Lu.prototype.commit=function(){var e=this._root._internalRoot,t=e.firstBatch;if(this._defer&&null!==t||a(\"251\"),this._hasChildren){var n=this._expirationTime;if(t!==this){this._hasChildren&&(n=this._expirationTime=t._expirationTime,this.render(this._children));for(var r=null,o=t;o!==this;)r=o,o=o._next;null===r&&a(\"251\"),r._next=o._next,this._next=t,e.firstBatch=this}this._defer=!1,Pu(e,n),t=this._next,this._next=null,null!==(t=e.firstBatch=t)&&t._hasChildren&&t.render(t._children)}else this._next=null,this._defer=!1},Lu.prototype._onComplete=function(){if(!this._didComplete){this._didComplete=!0;var e=this._callbacks;if(null!==e)for(var t=0;t<e.length;t++)(0,e[t])()}},Iu.prototype.then=function(e){if(this._didCommit)e();else{var t=this._callbacks;null===t&&(t=this._callbacks=[]),t.push(e)}},Iu.prototype._onCommit=function(){if(!this._didCommit){this._didCommit=!0;var e=this._callbacks;if(null!==e)for(var t=0;t<e.length;t++){var n=e[t];\"function\"!==typeof n&&a(\"191\",n),n()}}},Wu.prototype.render=function(e,t){var n=this._internalRoot,r=new Iu;return null!==(t=void 0===t?null:t)&&r.then(t),Uu(e,n,null,r._onCommit),r},Wu.prototype.unmount=function(e){var t=this._internalRoot,n=new Iu;return null!==(e=void 0===e?null:e)&&n.then(e),Uu(null,t,null,n._onCommit),n},Wu.prototype.legacy_renderSubtreeIntoContainer=function(e,t,n){var r=this._internalRoot,o=new Iu;return null!==(n=void 0===n?null:n)&&o.then(n),Uu(t,r,e,o._onCommit),o},Wu.prototype.createBatch=function(){var e=new Lu(this),t=e._expirationTime,n=this._internalRoot,r=n.firstBatch;if(null===r)n.firstBatch=e,e._next=null;else{for(n=null;null!==r&&r._expirationTime>=t;)n=r,r=r._next;e._next=r,null!==n&&(n._next=e)}return e},De=Ru,Re=Fu,Ne=function(){ou||0===uu||(Eu(uu,!1),uu=0)};var Bu={createPortal:Hu,findDOMNode:function(e){if(null==e)return null;if(1===e.nodeType)return e;var t=e._reactInternalFiber;return void 0===t&&(\"function\"===typeof e.render?a(\"188\"):a(\"268\",Object.keys(e))),e=null===(e=rn(t))?null:e.stateNode},hydrate:function(e,t,n){return zu(t)||a(\"200\"),Vu(null,e,t,!0,n)},render:function(e,t,n){return zu(t)||a(\"200\"),Vu(null,e,t,!1,n)},unstable_renderSubtreeIntoContainer:function(e,t,n,r){return zu(n)||a(\"200\"),(null==e||void 0===e._reactInternalFiber)&&a(\"38\"),Vu(e,t,n,!1,r)},unmountComponentAtNode:function(e){return zu(e)||a(\"40\"),!!e._reactRootContainer&&(Nu(function(){Vu(null,null,e,!1,function(){e._reactRootContainer=null})}),!0)},unstable_createPortal:function(){return Hu.apply(void 0,arguments)},unstable_batchedUpdates:Ru,unstable_interactiveUpdates:Fu,flushSync:function(e,t){ou&&a(\"187\");var n=cu;cu=!0;try{return Ja(e,t)}finally{cu=n,Eu(1073741823,!1)}},unstable_createRoot:function(e,t){return zu(e)||a(\"299\",\"unstable_createRoot\"),new Wu(e,!0,null!=t&&!0===t.hydrate)},unstable_flushControlled:function(e){var t=cu;cu=!0;try{Ja(e)}finally{(cu=t)||ou||Eu(1073741823,!1)}},__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:{Events:[A,U,Y,P.injectEventPluginsByName,g,H,function(e){O(e,V)},Me,je,En,j]}};!function(e){var t=e.findFiberByHostInstance;(function(e){if(\"undefined\"===typeof __REACT_DEVTOOLS_GLOBAL_HOOK__)return!1;var t=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(t.isDisabled||!t.supportsFiber)return!0;try{var n=t.inject(e);Wr=Vr(function(e){return t.onCommitFiberRoot(n,e)}),zr=Vr(function(e){return t.onCommitFiberUnmount(n,e)})}catch(r){}})(o({},e,{overrideProps:null,currentDispatcherRef:He.ReactCurrentDispatcher,findHostInstanceByFiber:function(e){return null===(e=rn(e))?null:e.stateNode},findFiberByHostInstance:function(e){return t?t(e):null}}))}({findFiberByHostInstance:F,bundleType:0,version:\"16.8.4\",rendererPackageName:\"react-dom\"});var $u={default:Bu},qu=$u&&Bu||$u;e.exports=qu.default||qu},function(e,t,n){\"use strict\";e.exports=n(43)},function(e,t,n){\"use strict\";(function(e){Object.defineProperty(t,\"__esModule\",{value:!0});var n=null,r=!1,o=3,i=-1,a=-1,u=!1,l=!1;function s(){if(!u){var e=n.expirationTime;l?x():l=!0,k(d,e)}}function c(){var e=n,t=n.next;if(n===t)n=null;else{var r=n.previous;n=r.next=t,t.previous=r}e.next=e.previous=null,r=e.callback,t=e.expirationTime,e=e.priorityLevel;var i=o,u=a;o=e,a=t;try{var l=r()}finally{o=i,a=u}if(\"function\"===typeof l)if(l={callback:l,priorityLevel:e,expirationTime:t,next:null,previous:null},null===n)n=l.next=l.previous=l;else{r=null,e=n;do{if(e.expirationTime>=t){r=e;break}e=e.next}while(e!==n);null===r?r=n:r===n&&(n=l,s()),(t=r.previous).next=r.previous=l,l.next=r,l.previous=t}}function f(){if(-1===i&&null!==n&&1===n.priorityLevel){u=!0;try{do{c()}while(null!==n&&1===n.priorityLevel)}finally{u=!1,null!==n?s():l=!1}}}function d(e){u=!0;var o=r;r=e;try{if(e)for(;null!==n;){var i=t.unstable_now();if(!(n.expirationTime<=i))break;do{c()}while(null!==n&&n.expirationTime<=i)}else if(null!==n)do{c()}while(null!==n&&!S())}finally{u=!1,r=o,null!==n?s():l=!1,f()}}var p,h,m=Date,y=\"function\"===typeof setTimeout?setTimeout:void 0,v=\"function\"===typeof clearTimeout?clearTimeout:void 0,g=\"function\"===typeof requestAnimationFrame?requestAnimationFrame:void 0,b=\"function\"===typeof cancelAnimationFrame?cancelAnimationFrame:void 0;function _(e){p=g(function(t){v(h),e(t)}),h=y(function(){b(p),e(t.unstable_now())},100)}if(\"object\"===typeof performance&&\"function\"===typeof performance.now){var w=performance;t.unstable_now=function(){return w.now()}}else t.unstable_now=function(){return m.now()};var k,x,S,T=null;if(\"undefined\"!==typeof window?T=window:\"undefined\"!==typeof e&&(T=e),T&&T._schedMock){var O=T._schedMock;k=O[0],x=O[1],S=O[2],t.unstable_now=O[3]}else if(\"undefined\"===typeof window||\"function\"!==typeof MessageChannel){var C=null,E=function(e){if(null!==C)try{C(e)}finally{C=null}};k=function(e){null!==C?setTimeout(k,0,e):(C=e,setTimeout(E,0,!1))},x=function(){C=null},S=function(){return!1}}else{\"undefined\"!==typeof console&&(\"function\"!==typeof g&&console.error(\"This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills\"),\"function\"!==typeof b&&console.error(\"This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills\"));var P=null,M=!1,j=-1,D=!1,R=!1,N=0,F=33,A=33;S=function(){return N<=t.unstable_now()};var U=new MessageChannel,Y=U.port2;U.port1.onmessage=function(){M=!1;var e=P,n=j;P=null,j=-1;var r=t.unstable_now(),o=!1;if(0>=N-r){if(!(-1!==n&&n<=r))return D||(D=!0,_(L)),P=e,void(j=n);o=!0}if(null!==e){R=!0;try{e(o)}finally{R=!1}}};var L=function e(t){if(null!==P){_(e);var n=t-N+A;n<A&&F<A?(8>n&&(n=8),A=n<F?F:n):F=n,N=t+A,M||(M=!0,Y.postMessage(void 0))}else D=!1};k=function(e,t){P=e,j=t,R||0>t?Y.postMessage(void 0):D||(D=!0,_(L))},x=function(){P=null,M=!1,j=-1}}t.unstable_ImmediatePriority=1,t.unstable_UserBlockingPriority=2,t.unstable_NormalPriority=3,t.unstable_IdlePriority=5,t.unstable_LowPriority=4,t.unstable_runWithPriority=function(e,n){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var r=o,a=i;o=e,i=t.unstable_now();try{return n()}finally{o=r,i=a,f()}},t.unstable_next=function(e){switch(o){case 1:case 2:case 3:var n=3;break;default:n=o}var r=o,a=i;o=n,i=t.unstable_now();try{return e()}finally{o=r,i=a,f()}},t.unstable_scheduleCallback=function(e,r){var a=-1!==i?i:t.unstable_now();if(\"object\"===typeof r&&null!==r&&\"number\"===typeof r.timeout)r=a+r.timeout;else switch(o){case 1:r=a+-1;break;case 2:r=a+250;break;case 5:r=a+1073741823;break;case 4:r=a+1e4;break;default:r=a+5e3}if(e={callback:e,priorityLevel:o,expirationTime:r,next:null,previous:null},null===n)n=e.next=e.previous=e,s();else{a=null;var u=n;do{if(u.expirationTime>r){a=u;break}u=u.next}while(u!==n);null===a?a=n:a===n&&(n=e,s()),(r=a.previous).next=a.previous=e,e.next=a,e.previous=r}return e},t.unstable_cancelCallback=function(e){var t=e.next;if(null!==t){if(t===e)n=null;else{e===n&&(n=t);var r=e.previous;r.next=t,t.previous=r}e.next=e.previous=null}},t.unstable_wrapCallback=function(e){var n=o;return function(){var r=o,a=i;o=n,i=t.unstable_now();try{return e.apply(this,arguments)}finally{o=r,i=a,f()}}},t.unstable_getCurrentPriorityLevel=function(){return o},t.unstable_shouldYield=function(){return!r&&(null!==n&&n.expirationTime<a||S())},t.unstable_continueExecution=function(){null!==n&&s()},t.unstable_pauseExecution=function(){},t.unstable_getFirstCallbackNode=function(){return n}}).call(this,n(24))},,function(e,t,n){\"use strict\";var r=n(13),o=n(29),i=n(47),a=n(25);function u(e){var t=new i(e),n=o(i.prototype.request,t);return r.extend(n,i.prototype,t),r.extend(n,t),n}var l=u(a);l.Axios=i,l.create=function(e){return u(r.merge(a,e))},l.Cancel=n(33),l.CancelToken=n(62),l.isCancel=n(32),l.all=function(e){return Promise.all(e)},l.spread=n(63),e.exports=l,e.exports.default=l},function(e,t){function n(e){return!!e.constructor&&\"function\"===typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)}e.exports=function(e){return null!=e&&(n(e)||function(e){return\"function\"===typeof e.readFloatLE&&\"function\"===typeof e.slice&&n(e.slice(0,0))}(e)||!!e._isBuffer)}},function(e,t,n){\"use strict\";var r=n(25),o=n(13),i=n(57),a=n(58);function u(e){this.defaults=e,this.interceptors={request:new i,response:new i}}u.prototype.request=function(e){\"string\"===typeof e&&(e=o.merge({url:arguments[0]},arguments[1])),(e=o.merge(r,{method:\"get\"},this.defaults,e)).method=e.method.toLowerCase();var t=[a,void 0],n=Promise.resolve(e);for(this.interceptors.request.forEach(function(e){t.unshift(e.fulfilled,e.rejected)}),this.interceptors.response.forEach(function(e){t.push(e.fulfilled,e.rejected)});t.length;)n=n.then(t.shift(),t.shift());return n},o.forEach([\"delete\",\"get\",\"head\",\"options\"],function(e){u.prototype[e]=function(t,n){return this.request(o.merge(n||{},{method:e,url:t}))}}),o.forEach([\"post\",\"put\",\"patch\"],function(e){u.prototype[e]=function(t,n,r){return this.request(o.merge(r||{},{method:e,url:t,data:n}))}}),e.exports=u},function(e,t){var n,r,o=e.exports={};function i(){throw new Error(\"setTimeout has not been defined\")}function a(){throw new Error(\"clearTimeout has not been defined\")}function u(e){if(n===setTimeout)return setTimeout(e,0);if((n===i||!n)&&setTimeout)return n=setTimeout,setTimeout(e,0);try{return n(e,0)}catch(t){try{return n.call(null,e,0)}catch(t){return n.call(this,e,0)}}}!function(){try{n=\"function\"===typeof setTimeout?setTimeout:i}catch(e){n=i}try{r=\"function\"===typeof clearTimeout?clearTimeout:a}catch(e){r=a}}();var l,s=[],c=!1,f=-1;function d(){c&&l&&(c=!1,l.length?s=l.concat(s):f=-1,s.length&&p())}function p(){if(!c){var e=u(d);c=!0;for(var t=s.length;t;){for(l=s,s=[];++f<t;)l&&l[f].run();f=-1,t=s.length}l=null,c=!1,function(e){if(r===clearTimeout)return clearTimeout(e);if((r===a||!r)&&clearTimeout)return r=clearTimeout,clearTimeout(e);try{r(e)}catch(t){try{return r.call(null,e)}catch(t){return r.call(this,e)}}}(e)}}function h(e,t){this.fun=e,this.array=t}function m(){}o.nextTick=function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)t[n-1]=arguments[n];s.push(new h(e,t)),1!==s.length||c||u(p)},h.prototype.run=function(){this.fun.apply(null,this.array)},o.title=\"browser\",o.browser=!0,o.env={},o.argv=[],o.version=\"\",o.versions={},o.on=m,o.addListener=m,o.once=m,o.off=m,o.removeListener=m,o.removeAllListeners=m,o.emit=m,o.prependListener=m,o.prependOnceListener=m,o.listeners=function(e){return[]},o.binding=function(e){throw new Error(\"process.binding is not supported\")},o.cwd=function(){return\"/\"},o.chdir=function(e){throw new Error(\"process.chdir is not supported\")},o.umask=function(){return 0}},function(e,t,n){\"use strict\";var r=n(13);e.exports=function(e,t){r.forEach(e,function(n,r){r!==t&&r.toUpperCase()===t.toUpperCase()&&(e[t]=n,delete e[r])})}},function(e,t,n){\"use strict\";var r=n(31);e.exports=function(e,t,n){var o=n.config.validateStatus;n.status&&o&&!o(n.status)?t(r(\"Request failed with status code \"+n.status,n.config,null,n.request,n)):e(n)}},function(e,t,n){\"use strict\";e.exports=function(e,t,n,r,o){return e.config=t,n&&(e.code=n),e.request=r,e.response=o,e}},function(e,t,n){\"use strict\";var r=n(13);function o(e){return encodeURIComponent(e).replace(/%40/gi,\"@\").replace(/%3A/gi,\":\").replace(/%24/g,\"$\").replace(/%2C/gi,\",\").replace(/%20/g,\"+\").replace(/%5B/gi,\"[\").replace(/%5D/gi,\"]\")}e.exports=function(e,t,n){if(!t)return e;var i;if(n)i=n(t);else if(r.isURLSearchParams(t))i=t.toString();else{var a=[];r.forEach(t,function(e,t){null!==e&&\"undefined\"!==typeof e&&(r.isArray(e)?t+=\"[]\":e=[e],r.forEach(e,function(e){r.isDate(e)?e=e.toISOString():r.isObject(e)&&(e=JSON.stringify(e)),a.push(o(t)+\"=\"+o(e))}))}),i=a.join(\"&\")}return i&&(e+=(-1===e.indexOf(\"?\")?\"?\":\"&\")+i),e}},function(e,t,n){\"use strict\";var r=n(13),o=[\"age\",\"authorization\",\"content-length\",\"content-type\",\"etag\",\"expires\",\"from\",\"host\",\"if-modified-since\",\"if-unmodified-since\",\"last-modified\",\"location\",\"max-forwards\",\"proxy-authorization\",\"referer\",\"retry-after\",\"user-agent\"];e.exports=function(e){var t,n,i,a={};return e?(r.forEach(e.split(\"\\n\"),function(e){if(i=e.indexOf(\":\"),t=r.trim(e.substr(0,i)).toLowerCase(),n=r.trim(e.substr(i+1)),t){if(a[t]&&o.indexOf(t)>=0)return;a[t]=\"set-cookie\"===t?(a[t]?a[t]:[]).concat([n]):a[t]?a[t]+\", \"+n:n}}),a):a}},function(e,t,n){\"use strict\";var r=n(13);e.exports=r.isStandardBrowserEnv()?function(){var e,t=/(msie|trident)/i.test(navigator.userAgent),n=document.createElement(\"a\");function o(e){var r=e;return t&&(n.setAttribute(\"href\",r),r=n.href),n.setAttribute(\"href\",r),{href:n.href,protocol:n.protocol?n.protocol.replace(/:$/,\"\"):\"\",host:n.host,search:n.search?n.search.replace(/^\\?/,\"\"):\"\",hash:n.hash?n.hash.replace(/^#/,\"\"):\"\",hostname:n.hostname,port:n.port,pathname:\"/\"===n.pathname.charAt(0)?n.pathname:\"/\"+n.pathname}}return e=o(window.location.href),function(t){var n=r.isString(t)?o(t):t;return n.protocol===e.protocol&&n.host===e.host}}():function(){return!0}},function(e,t,n){\"use strict\";var r=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";function o(){this.message=\"String contains an invalid character\"}o.prototype=new Error,o.prototype.code=5,o.prototype.name=\"InvalidCharacterError\",e.exports=function(e){for(var t,n,i=String(e),a=\"\",u=0,l=r;i.charAt(0|u)||(l=\"=\",u%1);a+=l.charAt(63&t>>8-u%1*8)){if((n=i.charCodeAt(u+=.75))>255)throw new o;t=t<<8|n}return a}},function(e,t,n){\"use strict\";var r=n(13);e.exports=r.isStandardBrowserEnv()?{write:function(e,t,n,o,i,a){var u=[];u.push(e+\"=\"+encodeURIComponent(t)),r.isNumber(n)&&u.push(\"expires=\"+new Date(n).toGMTString()),r.isString(o)&&u.push(\"path=\"+o),r.isString(i)&&u.push(\"domain=\"+i),!0===a&&u.push(\"secure\"),document.cookie=u.join(\"; \")},read:function(e){var t=document.cookie.match(new RegExp(\"(^|;\\\\s*)(\"+e+\")=([^;]*)\"));return t?decodeURIComponent(t[3]):null},remove:function(e){this.write(e,\"\",Date.now()-864e5)}}:{write:function(){},read:function(){return null},remove:function(){}}},function(e,t,n){\"use strict\";var r=n(13);function o(){this.handlers=[]}o.prototype.use=function(e,t){return this.handlers.push({fulfilled:e,rejected:t}),this.handlers.length-1},o.prototype.eject=function(e){this.handlers[e]&&(this.handlers[e]=null)},o.prototype.forEach=function(e){r.forEach(this.handlers,function(t){null!==t&&e(t)})},e.exports=o},function(e,t,n){\"use strict\";var r=n(13),o=n(59),i=n(32),a=n(25),u=n(60),l=n(61);function s(e){e.cancelToken&&e.cancelToken.throwIfRequested()}e.exports=function(e){return s(e),e.baseURL&&!u(e.url)&&(e.url=l(e.baseURL,e.url)),e.headers=e.headers||{},e.data=o(e.data,e.headers,e.transformRequest),e.headers=r.merge(e.headers.common||{},e.headers[e.method]||{},e.headers||{}),r.forEach([\"delete\",\"get\",\"head\",\"post\",\"put\",\"patch\",\"common\"],function(t){delete e.headers[t]}),(e.adapter||a.adapter)(e).then(function(t){return s(e),t.data=o(t.data,t.headers,e.transformResponse),t},function(t){return i(t)||(s(e),t&&t.response&&(t.response.data=o(t.response.data,t.response.headers,e.transformResponse))),Promise.reject(t)})}},function(e,t,n){\"use strict\";var r=n(13);e.exports=function(e,t,n){return r.forEach(n,function(n){e=n(e,t)}),e}},function(e,t,n){\"use strict\";e.exports=function(e){return/^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(e)}},function(e,t,n){\"use strict\";e.exports=function(e,t){return t?e.replace(/\\/+$/,\"\")+\"/\"+t.replace(/^\\/+/,\"\"):e}},function(e,t,n){\"use strict\";var r=n(33);function o(e){if(\"function\"!==typeof e)throw new TypeError(\"executor must be a function.\");var t;this.promise=new Promise(function(e){t=e});var n=this;e(function(e){n.reason||(n.reason=new r(e),t(n.reason))})}o.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},o.source=function(){var e;return{token:new o(function(t){e=t}),cancel:e}},e.exports=o},function(e,t,n){\"use strict\";e.exports=function(e){return function(t){return e.apply(null,t)}}},function(e,t,n){\"use strict\";var r=n(65);function o(){}function i(){}i.resetWarningCache=o,e.exports=function(){function e(e,t,n,o,i,a){if(a!==r){var u=new Error(\"Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types\");throw u.name=\"Invariant Violation\",u}}function t(){return e}e.isRequired=e;var n={array:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:i,resetWarningCache:o};return n.PropTypes=n,n}},function(e,t,n){\"use strict\";e.exports=\"SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED\"},function(e,t){e.exports=Array.isArray||function(e){return\"[object Array]\"==Object.prototype.toString.call(e)}},function(e,t){e.exports=function(e){return e.webpackPolyfill||(e.deprecate=function(){},e.paths=[],e.children||(e.children=[]),Object.defineProperty(e,\"loaded\",{enumerable:!0,get:function(){return e.l}}),Object.defineProperty(e,\"id\",{enumerable:!0,get:function(){return e.i}}),e.webpackPolyfill=1),e}},function(e,t,n){\"use strict\";t.__esModule=!0;var r=n(0),o=(a(r),a(n(1))),i=a(n(69));a(n(70));function a(e){return e&&e.__esModule?e:{default:e}}function u(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function l(e,t){if(!e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return!t||\"object\"!==typeof t&&\"function\"!==typeof t?e:t}function s(e,t){if(\"function\"!==typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var c=1073741823;t.default=function(e,t){var n,a,f=\"__create-react-context-\"+(0,i.default)()+\"__\",d=function(e){function n(){var t,r;u(this,n);for(var o=arguments.length,i=Array(o),a=0;a<o;a++)i[a]=arguments[a];return t=r=l(this,e.call.apply(e,[this].concat(i))),r.emitter=function(e){var t=[];return{on:function(e){t.push(e)},off:function(e){t=t.filter(function(t){return t!==e})},get:function(){return e},set:function(n,r){e=n,t.forEach(function(t){return t(e,r)})}}}(r.props.value),l(r,t)}return s(n,e),n.prototype.getChildContext=function(){var e;return(e={})[f]=this.emitter,e},n.prototype.componentWillReceiveProps=function(e){if(this.props.value!==e.value){var n=this.props.value,r=e.value,o=void 0;((i=n)===(a=r)?0!==i||1/i===1/a:i!==i&&a!==a)?o=0:(o=\"function\"===typeof t?t(n,r):c,0!==(o|=0)&&this.emitter.set(e.value,o))}var i,a},n.prototype.render=function(){return this.props.children},n}(r.Component);d.childContextTypes=((n={})[f]=o.default.object.isRequired,n);var p=function(t){function n(){var e,r;u(this,n);for(var o=arguments.length,i=Array(o),a=0;a<o;a++)i[a]=arguments[a];return e=r=l(this,t.call.apply(t,[this].concat(i))),r.state={value:r.getValue()},r.onUpdate=function(e,t){0!==((0|r.observedBits)&t)&&r.setState({value:r.getValue()})},l(r,e)}return s(n,t),n.prototype.componentWillReceiveProps=function(e){var t=e.observedBits;this.observedBits=void 0===t||null===t?c:t},n.prototype.componentDidMount=function(){this.context[f]&&this.context[f].on(this.onUpdate);var e=this.props.observedBits;this.observedBits=void 0===e||null===e?c:e},n.prototype.componentWillUnmount=function(){this.context[f]&&this.context[f].off(this.onUpdate)},n.prototype.getValue=function(){return this.context[f]?this.context[f].get():e},n.prototype.render=function(){return(e=this.props.children,Array.isArray(e)?e[0]:e)(this.state.value);var e},n}(r.Component);return p.contextTypes=((a={})[f]=o.default.object,a),{Provider:d,Consumer:p}},e.exports=t.default},function(e,t,n){\"use strict\";(function(t){var n=\"__global_unique_id__\";e.exports=function(){return t[n]=(t[n]||0)+1}}).call(this,n(24))},function(e,t,n){\"use strict\";var r=n(71);e.exports=r},function(e,t,n){\"use strict\";function r(e){return function(){return e}}var o=function(){};o.thatReturns=r,o.thatReturnsFalse=r(!1),o.thatReturnsTrue=r(!0),o.thatReturnsNull=r(null),o.thatReturnsThis=function(){return this},o.thatReturnsArgument=function(e){return e},e.exports=o},,,,,function(e,t,n){\"use strict\";var r=n(0),o=n.n(r),i=n(1),a=n.n(i),u=n(10),l=n.n(u),s=n(15),c=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e};function f(e,t){if(!e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return!t||\"object\"!==typeof t&&\"function\"!==typeof t?e:t}var d=function(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)},p=function(e){function t(){var n,r;!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t);for(var o=arguments.length,i=Array(o),a=0;a<o;a++)i[a]=arguments[a];return n=r=f(this,e.call.apply(e,[this].concat(i))),r.handleClick=function(e){if(r.props.onClick&&r.props.onClick(e),!e.defaultPrevented&&0===e.button&&!r.props.target&&!d(e)){e.preventDefault();var t=r.context.router.history,n=r.props,o=n.replace,i=n.to;o?t.replace(i):t.push(i)}},f(r,n)}return function(e,t){if(\"function\"!==typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),t.prototype.render=function(){var e=this.props,t=(e.replace,e.to),n=e.innerRef,r=function(e,t){var n={};for(var r in e)t.indexOf(r)>=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}(e,[\"replace\",\"to\",\"innerRef\"]);l()(this.context.router,\"You should not use <Link> outside a <Router>\"),l()(void 0!==t,'You must specify the \"to\" property');var i=this.context.router.history,a=\"string\"===typeof t?Object(s.b)(t,null,null,i.location):t,u=i.createHref(a);return o.a.createElement(\"a\",c({},r,{onClick:this.handleClick,href:u,ref:n}))},t}(o.a.Component);p.propTypes={onClick:a.a.func,target:a.a.string,replace:a.a.bool,to:a.a.oneOfType([a.a.string,a.a.object]).isRequired,innerRef:a.a.oneOfType([a.a.string,a.a.func])},p.defaultProps={replace:!1},p.contextTypes={router:a.a.shape({history:a.a.shape({push:a.a.func.isRequired,replace:a.a.func.isRequired,createHref:a.a.func.isRequired}).isRequired}).isRequired},t.a=p},function(e,t,n){\"use strict\";var r=n(11),o=n.n(r),i=n(0),a=n.n(i),u=n(1),l=n.n(u),s=n(15),c=n(10),f=n.n(c),d=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e};function p(e,t){if(!e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return!t||\"object\"!==typeof t&&\"function\"!==typeof t?e:t}var h=function(e){function t(){var n,r;!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t);for(var o=arguments.length,i=Array(o),a=0;a<o;a++)i[a]=arguments[a];return n=r=p(this,e.call.apply(e,[this].concat(i))),r.state={match:r.computeMatch(r.props.history.location.pathname)},p(r,n)}return function(e,t){if(\"function\"!==typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),t.prototype.getChildContext=function(){return{router:d({},this.context.router,{history:this.props.history,route:{location:this.props.history.location,match:this.state.match}})}},t.prototype.computeMatch=function(e){return{path:\"/\",url:\"/\",params:{},isExact:\"/\"===e}},t.prototype.componentWillMount=function(){var e=this,t=this.props,n=t.children,r=t.history;f()(null==n||1===a.a.Children.count(n),\"A <Router> may have only one child element\"),this.unlisten=r.listen(function(){e.setState({match:e.computeMatch(r.location.pathname)})})},t.prototype.componentWillReceiveProps=function(e){o()(this.props.history===e.history,\"You cannot change <Router history>\")},t.prototype.componentWillUnmount=function(){this.unlisten()},t.prototype.render=function(){var e=this.props.children;return e?a.a.Children.only(e):null},t}(a.a.Component);h.propTypes={history:l.a.object.isRequired,children:l.a.node},h.contextTypes={router:l.a.object},h.childContextTypes={router:l.a.object.isRequired};var m=h;function y(e,t){if(!e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return!t||\"object\"!==typeof t&&\"function\"!==typeof t?e:t}var v=function(e){function t(){var n,r;!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t);for(var o=arguments.length,i=Array(o),a=0;a<o;a++)i[a]=arguments[a];return n=r=y(this,e.call.apply(e,[this].concat(i))),r.history=Object(s.a)(r.props),y(r,n)}return function(e,t){if(\"function\"!==typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),t.prototype.componentWillMount=function(){o()(!this.props.history,\"<BrowserRouter> ignores the history prop. To use a custom history, use `import { Router }` instead of `import { BrowserRouter as Router }`.\")},t.prototype.render=function(){return a.a.createElement(m,{history:this.history,children:this.props.children})},t}(a.a.Component);v.propTypes={basename:l.a.string,forceRefresh:l.a.bool,getUserConfirmation:l.a.func,keyLength:l.a.number,children:l.a.node};t.a=v},function(e,t,n){\"use strict\";var r=n(0),o=n.n(r),i=n(1),a=n.n(i),u=n(11),l=n.n(u),s=n(10),c=n.n(s),f=n(15),d=n(19),p=n.n(d),h={},m=0,y=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"/\",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return\"/\"===e?e:function(e){var t=e,n=h[t]||(h[t]={});if(n[e])return n[e];var r=p.a.compile(e);return m<1e4&&(n[e]=r,m++),r}(e)(t,{pretty:!0})},v=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e};var g=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t),function(e,t){if(!e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return!t||\"object\"!==typeof t&&\"function\"!==typeof t?e:t}(this,e.apply(this,arguments))}return function(e,t){if(\"function\"!==typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),t.prototype.isStatic=function(){return this.context.router&&this.context.router.staticContext},t.prototype.componentWillMount=function(){c()(this.context.router,\"You should not use <Redirect> outside a <Router>\"),this.isStatic()&&this.perform()},t.prototype.componentDidMount=function(){this.isStatic()||this.perform()},t.prototype.componentDidUpdate=function(e){var t=Object(f.b)(e.to),n=Object(f.b)(this.props.to);Object(f.c)(t,n)?l()(!1,\"You tried to redirect to the same route you're currently on: \\\"\"+n.pathname+n.search+'\"'):this.perform()},t.prototype.computeTo=function(e){var t=e.computedMatch,n=e.to;return t?\"string\"===typeof n?y(n,t.params):v({},n,{pathname:y(n.pathname,t.params)}):n},t.prototype.perform=function(){var e=this.context.router.history,t=this.props.push,n=this.computeTo(this.props);t?e.push(n):e.replace(n)},t.prototype.render=function(){return null},t}(o.a.Component);g.propTypes={computedMatch:a.a.object,push:a.a.bool,from:a.a.string,to:a.a.oneOfType([a.a.string,a.a.object]).isRequired},g.defaultProps={push:!1},g.contextTypes={router:a.a.shape({history:a.a.shape({push:a.a.func.isRequired,replace:a.a.func.isRequired}).isRequired,staticContext:a.a.object}).isRequired};var b=g;t.a=b},function(e,t,n){\"use strict\";var r=n(11),o=n.n(r),i=n(10),a=n.n(i),u=n(0),l=n.n(u),s=n(1),c=n.n(s),f=n(18),d=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e};function p(e,t){if(!e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return!t||\"object\"!==typeof t&&\"function\"!==typeof t?e:t}var h=function(e){return 0===l.a.Children.count(e)},m=function(e){function t(){var n,r;!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t);for(var o=arguments.length,i=Array(o),a=0;a<o;a++)i[a]=arguments[a];return n=r=p(this,e.call.apply(e,[this].concat(i))),r.state={match:r.computeMatch(r.props,r.context.router)},p(r,n)}return function(e,t){if(\"function\"!==typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),t.prototype.getChildContext=function(){return{router:d({},this.context.router,{route:{location:this.props.location||this.context.router.route.location,match:this.state.match}})}},t.prototype.computeMatch=function(e,t){var n=e.computedMatch,r=e.location,o=e.path,i=e.strict,u=e.exact,l=e.sensitive;if(n)return n;a()(t,\"You should not use <Route> or withRouter() outside a <Router>\");var s=t.route,c=(r||s.location).pathname;return Object(f.a)(c,{path:o,strict:i,exact:u,sensitive:l},s.match)},t.prototype.componentWillMount=function(){o()(!(this.props.component&&this.props.render),\"You should not use <Route component> and <Route render> in the same route; <Route render> will be ignored\"),o()(!(this.props.component&&this.props.children&&!h(this.props.children)),\"You should not use <Route component> and <Route children> in the same route; <Route children> will be ignored\"),o()(!(this.props.render&&this.props.children&&!h(this.props.children)),\"You should not use <Route render> and <Route children> in the same route; <Route children> will be ignored\")},t.prototype.componentWillReceiveProps=function(e,t){o()(!(e.location&&!this.props.location),'<Route> elements should not change from uncontrolled to controlled (or vice versa). You initially used no \"location\" prop and then provided one on a subsequent render.'),o()(!(!e.location&&this.props.location),'<Route> elements should not change from controlled to uncontrolled (or vice versa). You provided a \"location\" prop initially but omitted it on a subsequent render.'),this.setState({match:this.computeMatch(e,t.router)})},t.prototype.render=function(){var e=this.state.match,t=this.props,n=t.children,r=t.component,o=t.render,i=this.context.router,a=i.history,u=i.route,s=i.staticContext,c={match:e,location:this.props.location||u.location,history:a,staticContext:s};return r?e?l.a.createElement(r,c):null:o?e?o(c):null:\"function\"===typeof n?n(c):n&&!h(n)?l.a.Children.only(n):null},t}(l.a.Component);m.propTypes={computedMatch:c.a.object,path:c.a.string,exact:c.a.bool,strict:c.a.bool,sensitive:c.a.bool,component:c.a.func,render:c.a.func,children:c.a.oneOfType([c.a.func,c.a.node]),location:c.a.object},m.contextTypes={router:c.a.shape({history:c.a.object.isRequired,route:c.a.object.isRequired,staticContext:c.a.object})},m.childContextTypes={router:c.a.object.isRequired};var y=m;t.a=y},function(e,t,n){\"use strict\";var r=n(0),o=n.n(r),i=n(1),a=n.n(i),u=n(11),l=n.n(u),s=n(10),c=n.n(s),f=n(18);var d=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t),function(e,t){if(!e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return!t||\"object\"!==typeof t&&\"function\"!==typeof t?e:t}(this,e.apply(this,arguments))}return function(e,t){if(\"function\"!==typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),t.prototype.componentWillMount=function(){c()(this.context.router,\"You should not use <Switch> outside a <Router>\")},t.prototype.componentWillReceiveProps=function(e){l()(!(e.location&&!this.props.location),'<Switch> elements should not change from uncontrolled to controlled (or vice versa). You initially used no \"location\" prop and then provided one on a subsequent render.'),l()(!(!e.location&&this.props.location),'<Switch> elements should not change from controlled to uncontrolled (or vice versa). You provided a \"location\" prop initially but omitted it on a subsequent render.')},t.prototype.render=function(){var e=this.context.router.route,t=this.props.children,n=this.props.location||e.location,r=void 0,i=void 0;return o.a.Children.forEach(t,function(t){if(null==r&&o.a.isValidElement(t)){var a=t.props,u=a.path,l=a.exact,s=a.strict,c=a.sensitive,d=a.from,p=u||d;i=t,r=Object(f.a)(n.pathname,{path:p,exact:l,strict:s,sensitive:c},e.match)}}),r?o.a.cloneElement(i,{location:n,computedMatch:r}):null},t}(o.a.Component);d.contextTypes={router:a.a.shape({route:a.a.object.isRequired}).isRequired},d.propTypes={children:a.a.node,location:a.a.object};var p=d;t.a=p}]]);\n//# sourceMappingURL=2.3f64e426.chunk.js.map"
  },
  {
    "path": "05-spring-boot-react-full-stack-h2/build-artifacts-backup/build/static/js/main.85126504.chunk.js",
    "content": "(window.webpackJsonp=window.webpackJsonp||[]).push([[0],{39:function(e,t,a){e.exports=a(74)},44:function(e,t,a){},72:function(e,t,a){},73:function(e,t,a){},74:function(e,t,a){\"use strict\";a.r(t);var n=a(0),o=a.n(n),c=a(34),r=a.n(c),s=(a(44),a(3)),l=a(4),i=a(7),u=a(5),d=a(8),m=a(77),h=a(80),p=a(79),g=a(78),b=a(12),v=a.n(b),f=\"http://rest-api-in28minutes-qa.kvajmpmiiu.us-east-1.elasticbeanstalk.com\",E=\"\".concat(f,\"/jpa\"),k=new(function(){function e(){Object(s.a)(this,e)}return Object(l.a)(e,[{key:\"executeBasicAuthenticationService\",value:function(e,t){return v.a.get(\"\".concat(f,\"/basicauth\"),{headers:{authorization:this.createBasicAuthToken(e,t)}})}},{key:\"executeJwtAuthenticationService\",value:function(e,t){return v.a.post(\"\".concat(f,\"/authenticate\"),{username:e,password:t})}},{key:\"createBasicAuthToken\",value:function(e,t){return\"Basic \"+window.btoa(e+\":\"+t)}},{key:\"registerSuccessfulLogin\",value:function(e,t){sessionStorage.setItem(\"authenticatedUser\",e),this.setupAxiosInterceptors(this.createBasicAuthToken(e,t))}},{key:\"registerSuccessfulLoginForJwt\",value:function(e,t){sessionStorage.setItem(\"authenticatedUser\",e),this.setupAxiosInterceptors(this.createJWTToken(t))}},{key:\"createJWTToken\",value:function(e){return\"Bearer \"+e}},{key:\"logout\",value:function(){sessionStorage.removeItem(\"authenticatedUser\")}},{key:\"isUserLoggedIn\",value:function(){return null!==sessionStorage.getItem(\"authenticatedUser\")}},{key:\"getLoggedInUserName\",value:function(){var e=sessionStorage.getItem(\"authenticatedUser\");return null===e?\"\":e}},{key:\"setupAxiosInterceptors\",value:function(e){var t=this;v.a.interceptors.request.use(function(a){return t.isUserLoggedIn()&&(a.headers.authorization=e),a})}}]),e}()),j=function(e){function t(){return Object(s.a)(this,t),Object(i.a)(this,Object(u.a)(t).apply(this,arguments))}return Object(d.a)(t,e),Object(l.a)(t,[{key:\"render\",value:function(){return k.isUserLoggedIn()?o.a.createElement(p.a,this.props):o.a.createElement(g.a,{to:\"/login\"})}}]),t}(n.Component),O=a(35),y=a(2),w=function(e){function t(e){var a;return Object(s.a)(this,t),(a=Object(i.a)(this,Object(u.a)(t).call(this,e))).state={username:\"in28minutes\",password:\"\",hasLoginFailed:!1,showSuccessMessage:!1},a.handleChange=a.handleChange.bind(Object(y.a)(Object(y.a)(a))),a.loginClicked=a.loginClicked.bind(Object(y.a)(Object(y.a)(a))),a}return Object(d.a)(t,e),Object(l.a)(t,[{key:\"handleChange\",value:function(e){this.setState(Object(O.a)({},e.target.name,e.target.value))}},{key:\"loginClicked\",value:function(){var e=this;k.executeJwtAuthenticationService(this.state.username,this.state.password).then(function(t){k.registerSuccessfulLoginForJwt(e.state.username,t.data.token),e.props.history.push(\"/welcome/\".concat(e.state.username))}).catch(function(){e.setState({showSuccessMessage:!1}),e.setState({hasLoginFailed:!0})})}},{key:\"render\",value:function(){return o.a.createElement(\"div\",null,o.a.createElement(\"h1\",null,\"Login\"),o.a.createElement(\"div\",{className:\"container\"},this.state.hasLoginFailed&&o.a.createElement(\"div\",{className:\"alert alert-warning\"},\"Invalid Credentials\"),this.state.showSuccessMessage&&o.a.createElement(\"div\",null,\"Login Sucessful\"),\"User Name: \",o.a.createElement(\"input\",{type:\"text\",name:\"username\",value:this.state.username,onChange:this.handleChange}),\"Password: \",o.a.createElement(\"input\",{type:\"password\",name:\"password\",value:this.state.password,onChange:this.handleChange}),o.a.createElement(\"button\",{className:\"btn btn-success\",onClick:this.loginClicked},\"Login\")))}}]),t}(n.Component),C=new(function(){function e(){Object(s.a)(this,e)}return Object(l.a)(e,[{key:\"retrieveAllTodos\",value:function(e){return v.a.get(\"\".concat(E,\"/users/\").concat(e,\"/todos\"))}},{key:\"retrieveTodo\",value:function(e,t){return v.a.get(\"\".concat(E,\"/users/\").concat(e,\"/todos/\").concat(t))}},{key:\"deleteTodo\",value:function(e,t){return v.a.delete(\"\".concat(E,\"/users/\").concat(e,\"/todos/\").concat(t))}},{key:\"updateTodo\",value:function(e,t,a){return v.a.put(\"\".concat(E,\"/users/\").concat(e,\"/todos/\").concat(t),a)}},{key:\"createTodo\",value:function(e,t){return v.a.post(\"\".concat(E,\"/users/\").concat(e,\"/todos/\"),t)}}]),e}()),T=a(17),N=a.n(T),S=function(e){function t(e){var a;return Object(s.a)(this,t),console.log(\"constructor\"),(a=Object(i.a)(this,Object(u.a)(t).call(this,e))).state={todos:[],message:null},a.deleteTodoClicked=a.deleteTodoClicked.bind(Object(y.a)(Object(y.a)(a))),a.updateTodoClicked=a.updateTodoClicked.bind(Object(y.a)(Object(y.a)(a))),a.addTodoClicked=a.addTodoClicked.bind(Object(y.a)(Object(y.a)(a))),a.refreshTodos=a.refreshTodos.bind(Object(y.a)(Object(y.a)(a))),a}return Object(d.a)(t,e),Object(l.a)(t,[{key:\"componentWillUnmount\",value:function(){console.log(\"componentWillUnmount\")}},{key:\"shouldComponentUpdate\",value:function(e,t){return console.log(\"shouldComponentUpdate\"),console.log(e),console.log(t),!0}},{key:\"componentDidMount\",value:function(){console.log(\"componentDidMount\"),this.refreshTodos(),console.log(this.state)}},{key:\"refreshTodos\",value:function(){var e=this,t=k.getLoggedInUserName();C.retrieveAllTodos(t).then(function(t){e.setState({todos:t.data})})}},{key:\"deleteTodoClicked\",value:function(e){var t=this,a=k.getLoggedInUserName();C.deleteTodo(a,e).then(function(a){t.setState({message:\"Delete of todo \".concat(e,\" Successful\")}),t.refreshTodos()})}},{key:\"addTodoClicked\",value:function(){this.props.history.push(\"/todos/-1\")}},{key:\"updateTodoClicked\",value:function(e){console.log(\"update \"+e),this.props.history.push(\"/todos/\".concat(e))}},{key:\"render\",value:function(){var e=this;return console.log(\"render\"),o.a.createElement(\"div\",null,o.a.createElement(\"h1\",null,\"List Todos\"),this.state.message&&o.a.createElement(\"div\",{class:\"alert alert-success\"},this.state.message),o.a.createElement(\"div\",{className:\"container\"},o.a.createElement(\"table\",{className:\"table\"},o.a.createElement(\"thead\",null,o.a.createElement(\"tr\",null,o.a.createElement(\"th\",null,\"Description\"),o.a.createElement(\"th\",null,\"Target Date\"),o.a.createElement(\"th\",null,\"IsCompleted?\"),o.a.createElement(\"th\",null,\"Update\"),o.a.createElement(\"th\",null,\"Delete\"))),o.a.createElement(\"tbody\",null,this.state.todos.map(function(t){return o.a.createElement(\"tr\",{key:t.id},o.a.createElement(\"td\",null,t.description),o.a.createElement(\"td\",null,N()(t.targetDate).format(\"YYYY-MM-DD\")),o.a.createElement(\"td\",null,t.done.toString()),o.a.createElement(\"td\",null,o.a.createElement(\"button\",{className:\"btn btn-success\",onClick:function(){return e.updateTodoClicked(t.id)}},\"Update\")),o.a.createElement(\"td\",null,o.a.createElement(\"button\",{className:\"btn btn-warning\",onClick:function(){return e.deleteTodoClicked(t.id)}},\"Delete\")))}))),o.a.createElement(\"div\",{className:\"row\"},o.a.createElement(\"button\",{className:\"btn btn-success\",onClick:this.addTodoClicked},\"Add\"))))}}]),t}(n.Component);var D=function(){return o.a.createElement(\"div\",null,\"An Error Occurred. I don't know what to do! Contact support at abcd-efgh-ijkl\")},M=a(76),U=function(e){function t(){return Object(s.a)(this,t),Object(i.a)(this,Object(u.a)(t).apply(this,arguments))}return Object(d.a)(t,e),Object(l.a)(t,[{key:\"render\",value:function(){var e=k.isUserLoggedIn();return o.a.createElement(\"header\",null,o.a.createElement(\"nav\",{className:\"navbar navbar-expand-md navbar-dark bg-dark\"},o.a.createElement(\"div\",null,o.a.createElement(\"a\",{href:\"http://www.in28minutes.com\",className:\"navbar-brand\"},\"in28Minutes\")),o.a.createElement(\"ul\",{className:\"navbar-nav\"},e&&o.a.createElement(\"li\",null,o.a.createElement(M.a,{className:\"nav-link\",to:\"/welcome/in28minutes\"},\"Home\")),e&&o.a.createElement(\"li\",null,o.a.createElement(M.a,{className:\"nav-link\",to:\"/todos\"},\"Todos\"))),o.a.createElement(\"ul\",{className:\"navbar-nav navbar-collapse justify-content-end\"},!e&&o.a.createElement(\"li\",null,o.a.createElement(M.a,{className:\"nav-link\",to:\"/login\"},\"Login\")),e&&o.a.createElement(\"li\",null,o.a.createElement(M.a,{className:\"nav-link\",to:\"/logout\",onClick:k.logout},\"Logout\")))))}}]),t}(n.Component),I=function(e){function t(){return Object(s.a)(this,t),Object(i.a)(this,Object(u.a)(t).apply(this,arguments))}return Object(d.a)(t,e),Object(l.a)(t,[{key:\"render\",value:function(){return o.a.createElement(\"footer\",{className:\"footer\"},o.a.createElement(\"span\",{className:\"text-muted\"},\"All Rights Reserved 2018 @in28minutes\"))}}]),t}(n.Component),L=function(e){function t(){return Object(s.a)(this,t),Object(i.a)(this,Object(u.a)(t).apply(this,arguments))}return Object(d.a)(t,e),Object(l.a)(t,[{key:\"render\",value:function(){return o.a.createElement(o.a.Fragment,null,o.a.createElement(\"h1\",null,\"You are logged out\"),o.a.createElement(\"div\",{className:\"container\"},\"Thank You for Using Our Application.\"))}}]),t}(n.Component),A=new(function(){function e(){Object(s.a)(this,e)}return Object(l.a)(e,[{key:\"executeHelloWorldService\",value:function(){return v.a.get(\"\".concat(f,\"/hello-world\"))}},{key:\"executeHelloWorldBeanService\",value:function(){return v.a.get(\"\".concat(f,\"/hello-world-bean\"))}},{key:\"executeHelloWorldPathVariableService\",value:function(e){return v.a.get(\"\".concat(f,\"/hello-world/path-variable/\").concat(e))}}]),e}()),W=function(e){function t(e){var a;return Object(s.a)(this,t),(a=Object(i.a)(this,Object(u.a)(t).call(this,e))).retrieveWelcomeMessage=a.retrieveWelcomeMessage.bind(Object(y.a)(Object(y.a)(a))),a.state={welcomeMessage:\"\"},a.handleSuccessfulResponse=a.handleSuccessfulResponse.bind(Object(y.a)(Object(y.a)(a))),a.handleError=a.handleError.bind(Object(y.a)(Object(y.a)(a))),a}return Object(d.a)(t,e),Object(l.a)(t,[{key:\"render\",value:function(){return o.a.createElement(o.a.Fragment,null,o.a.createElement(\"h1\",null,\"Welcome!\"),o.a.createElement(\"div\",{className:\"container\"},\"Welcome \",this.props.match.params.name,\". You can manage your todos \",o.a.createElement(M.a,{to:\"/todos\"},\"here\"),\".\"),o.a.createElement(\"div\",{className:\"container\"},\"Click here to get a customized welcome message.\",o.a.createElement(\"button\",{onClick:this.retrieveWelcomeMessage,className:\"btn btn-success\"},\"Get Welcome Message\")),o.a.createElement(\"div\",{className:\"container\"},this.state.welcomeMessage))}},{key:\"retrieveWelcomeMessage\",value:function(){var e=this;A.executeHelloWorldPathVariableService(this.props.match.params.name).then(function(t){return e.handleSuccessfulResponse(t)}).catch(function(t){return e.handleError(t)})}},{key:\"handleSuccessfulResponse\",value:function(e){console.log(e),this.setState({welcomeMessage:e.data.message})}},{key:\"handleError\",value:function(e){console.log(e.response);var t=\"\";e.message&&(t+=e.message),e.response&&e.response.data&&(t+=e.response.data.message),this.setState({welcomeMessage:t})}}]),t}(n.Component),x=a(16),Y=function(e){function t(e){var a;return Object(s.a)(this,t),(a=Object(i.a)(this,Object(u.a)(t).call(this,e))).state={id:a.props.match.params.id,description:\"\",targetDate:N()(new Date).format(\"YYYY-MM-DD\")},a.onSubmit=a.onSubmit.bind(Object(y.a)(Object(y.a)(a))),a.validate=a.validate.bind(Object(y.a)(Object(y.a)(a))),a}return Object(d.a)(t,e),Object(l.a)(t,[{key:\"componentDidMount\",value:function(){var e=this;if(-1!==this.state.id){var t=k.getLoggedInUserName();C.retrieveTodo(t,this.state.id).then(function(t){return e.setState({description:t.data.description,targetDate:N()(t.data.targetDate).format(\"YYYY-MM-DD\")})})}}},{key:\"validate\",value:function(e){var t={};return e.description?e.description.length<5&&(t.description=\"Enter atleast 5 Characters in Description\"):t.description=\"Enter a Description\",N()(e.targetDate).isValid()||(t.targetDate=\"Enter a valid Target Date\"),t}},{key:\"onSubmit\",value:function(e){var t=this,a=k.getLoggedInUserName(),n={id:this.state.id,description:e.description,targetDate:e.targetDate};-1===this.state.id?C.createTodo(a,n).then(function(){return t.props.history.push(\"/todos\")}):C.updateTodo(a,this.state.id,n).then(function(){return t.props.history.push(\"/todos\")}),console.log(e)}},{key:\"render\",value:function(){var e=this.state,t=e.description,a=e.targetDate;return o.a.createElement(\"div\",null,o.a.createElement(\"h1\",null,\"Todo\"),o.a.createElement(\"div\",{className:\"container\"},o.a.createElement(x.d,{initialValues:{description:t,targetDate:a},onSubmit:this.onSubmit,validateOnChange:!1,validateOnBlur:!1,validate:this.validate,enableReinitialize:!0},function(e){return o.a.createElement(x.c,null,o.a.createElement(x.a,{name:\"description\",component:\"div\",className:\"alert alert-warning\"}),o.a.createElement(x.a,{name:\"targetDate\",component:\"div\",className:\"alert alert-warning\"}),o.a.createElement(\"fieldset\",{className:\"form-group\"},o.a.createElement(\"label\",null,\"Description\"),o.a.createElement(x.b,{className:\"form-control\",type:\"text\",name:\"description\"})),o.a.createElement(\"fieldset\",{className:\"form-group\"},o.a.createElement(\"label\",null,\"Target Date\"),o.a.createElement(x.b,{className:\"form-control\",type:\"date\",name:\"targetDate\"})),o.a.createElement(\"button\",{className:\"btn btn-success\",type:\"submit\"},\"Save\"))})))}}]),t}(n.Component),B=function(e){function t(){return Object(s.a)(this,t),Object(i.a)(this,Object(u.a)(t).apply(this,arguments))}return Object(d.a)(t,e),Object(l.a)(t,[{key:\"render\",value:function(){return o.a.createElement(\"div\",{className:\"TodoApp\"},o.a.createElement(m.a,null,o.a.createElement(o.a.Fragment,null,o.a.createElement(U,null),o.a.createElement(h.a,null,o.a.createElement(p.a,{path:\"/\",exact:!0,component:w}),o.a.createElement(p.a,{path:\"/login\",component:w}),o.a.createElement(j,{path:\"/welcome/:name\",component:W}),o.a.createElement(j,{path:\"/todos/:id\",component:Y}),o.a.createElement(j,{path:\"/todos\",component:S}),o.a.createElement(j,{path:\"/logout\",component:L}),o.a.createElement(p.a,{component:D})),o.a.createElement(I,null))))}}]),t}(n.Component),F=(a(72),a(73),function(e){function t(){return Object(s.a)(this,t),Object(i.a)(this,Object(u.a)(t).apply(this,arguments))}return Object(d.a)(t,e),Object(l.a)(t,[{key:\"render\",value:function(){return o.a.createElement(\"div\",{className:\"App\"},o.a.createElement(B,null))}}]),t}(n.Component));Boolean(\"localhost\"===window.location.hostname||\"[::1]\"===window.location.hostname||window.location.hostname.match(/^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/));r.a.render(o.a.createElement(F,null),document.getElementById(\"root\")),\"serviceWorker\"in navigator&&navigator.serviceWorker.ready.then(function(e){e.unregister()})}},[[39,1,2]]]);\n//# sourceMappingURL=main.85126504.chunk.js.map"
  },
  {
    "path": "05-spring-boot-react-full-stack-h2/build-artifacts-backup/build/static/js/runtime~main.c5541365.js",
    "content": "!function(e){function r(r){for(var n,f,i=r[0],l=r[1],a=r[2],c=0,s=[];c<i.length;c++)f=i[c],o[f]&&s.push(o[f][0]),o[f]=0;for(n in l)Object.prototype.hasOwnProperty.call(l,n)&&(e[n]=l[n]);for(p&&p(r);s.length;)s.shift()();return u.push.apply(u,a||[]),t()}function t(){for(var e,r=0;r<u.length;r++){for(var t=u[r],n=!0,i=1;i<t.length;i++){var l=t[i];0!==o[l]&&(n=!1)}n&&(u.splice(r--,1),e=f(f.s=t[0]))}return e}var n={},o={1:0},u=[];function f(r){if(n[r])return n[r].exports;var t=n[r]={i:r,l:!1,exports:{}};return e[r].call(t.exports,t,t.exports,f),t.l=!0,t.exports}f.m=e,f.c=n,f.d=function(e,r,t){f.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:t})},f.r=function(e){\"undefined\"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},f.t=function(e,r){if(1&r&&(e=f(e)),8&r)return e;if(4&r&&\"object\"===typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(f.r(t),Object.defineProperty(t,\"default\",{enumerable:!0,value:e}),2&r&&\"string\"!=typeof e)for(var n in e)f.d(t,n,function(r){return e[r]}.bind(null,n));return t},f.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return f.d(r,\"a\",r),r},f.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},f.p=\"/\";var i=window.webpackJsonp=window.webpackJsonp||[],l=i.push.bind(i);i.push=r,i=i.slice();for(var a=0;a<i.length;a++)r(i[a]);var p=l;t()}([]);\n//# sourceMappingURL=runtime~main.c5541365.js.map"
  },
  {
    "path": "05-spring-boot-react-full-stack-h2/frontend/todo-app/package.json",
    "content": "{\n  \"name\": \"todo-app\",\n  \"version\": \"0.1.0\",\n  \"private\": true,\n  \"dependencies\": {\n    \"axios\": \"^0.18.0\",\n    \"formik\": \"^1.5.1\",\n    \"moment\": \"^2.24.0\",\n    \"react\": \"^16.8.4\",\n    \"react-dom\": \"^16.8.4\",\n    \"react-router-dom\": \"^4.3.1\",\n    \"react-scripts\": \"2.1.8\"\n  },\n  \"scripts\": {\n    \"start\": \"PORT=4200 react-scripts start\",\n    \"build\": \"react-scripts build\",\n    \"test\": \"react-scripts test\",\n    \"eject\": \"react-scripts eject\"\n  },\n  \"eslintConfig\": {\n    \"extends\": \"react-app\"\n  },\n  \"browserslist\": [\n    \">0.2%\",\n    \"not dead\",\n    \"not ie <= 11\",\n    \"not op_mini all\"\n  ]\n}\n"
  },
  {
    "path": "05-spring-boot-react-full-stack-h2/frontend/todo-app/public/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\" />\n    <link rel=\"shortcut icon\" href=\"%PUBLIC_URL%/favicon.ico\" />\n    <meta\n      name=\"viewport\"\n      content=\"width=device-width, initial-scale=1, shrink-to-fit=no\"\n    />\n    <meta name=\"theme-color\" content=\"#000000\" />\n    <!--\n      manifest.json provides metadata used when your web app is installed on a\n      user's mobile device or desktop. See https://developers.google.com/web/fundamentals/web-app-manifest/\n    -->\n    <link rel=\"manifest\" href=\"%PUBLIC_URL%/manifest.json\" />\n    <!--\n      Notice the use of %PUBLIC_URL% in the tags above.\n      It will be replaced with the URL of the `public` folder during the build.\n      Only files inside the `public` folder can be referenced from the HTML.\n\n      Unlike \"/favicon.ico\" or \"favicon.ico\", \"%PUBLIC_URL%/favicon.ico\" will\n      work correctly both with client-side routing and a non-root public URL.\n      Learn how to configure a non-root public URL by running `npm run build`.\n    -->\n    <title>My Todo Application</title>\n  </head>\n  <body>\n    <noscript>You need to enable JavaScript to run this app.</noscript>\n    <div id=\"root\"></div>\n    <!--\n      This HTML file is a template.\n      If you open it directly in the browser, you will see an empty page.\n\n      You can add webfonts, meta tags, or analytics to this file.\n      The build step will place the bundled scripts into the <body> tag.\n\n      To begin the development, run `npm start` or `yarn start`.\n      To create a production bundle, use `npm run build` or `yarn build`.\n    -->\n  </body>\n</html>\n"
  },
  {
    "path": "05-spring-boot-react-full-stack-h2/frontend/todo-app/public/manifest.json",
    "content": "{\n  \"short_name\": \"React App\",\n  \"name\": \"Create React App Sample\",\n  \"icons\": [\n    {\n      \"src\": \"favicon.ico\",\n      \"sizes\": \"64x64 32x32 24x24 16x16\",\n      \"type\": \"image/x-icon\"\n    }\n  ],\n  \"start_url\": \".\",\n  \"display\": \"standalone\",\n  \"theme_color\": \"#000000\",\n  \"background_color\": \"#ffffff\"\n}\n"
  },
  {
    "path": "05-spring-boot-react-full-stack-h2/frontend/todo-app/src/App.css",
    "content": ".footer {\n  position: absolute;\n  bottom: 0;\n  width: 100%;\n  height: 40px;\n  background-color: #222222;\n}\n\n.App {\n  text-align: center;\n}\n\n.App-logo {\n  animation: App-logo-spin infinite 20s linear;\n  height: 40vmin;\n  pointer-events: none;\n}\n\n.App-header {\n  background-color: #282c34;\n  min-height: 100vh;\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  font-size: calc(10px + 2vmin);\n  color: white;\n}\n\n.App-link {\n  color: #61dafb;\n}\n\n@keyframes App-logo-spin {\n  from {\n    transform: rotate(0deg);\n  }\n  to {\n    transform: rotate(360deg);\n  }\n}\n"
  },
  {
    "path": "05-spring-boot-react-full-stack-h2/frontend/todo-app/src/App.js",
    "content": "import React, { Component } from 'react';\n//import FirstComponent from './components/learning-examples/FirstComponent'\n//import SecondComponent from './components/learning-examples/SecondComponent'\n//import ThirdComponent from './components/learning-examples/ThirdComponent'\n//import Counter from './components/counter/Counter'\nimport TodoApp from './components/todo/TodoApp'\nimport './App.css';\nimport './bootstrap.css';\n\nclass App extends Component {\n  render() {\n    return (\n      <div className=\"App\">\n        {/*<Counter/>*/}\n        <TodoApp />\n      </div>\n    );\n  }\n}\n\n// class LearningComponents extends Component {\n//   render() {\n//     return (\n//       <div className=\"LearningComponents\">\n//          My Hello World\n//          <FirstComponent></FirstComponent>\n//          <SecondComponent></SecondComponent>\n//          <ThirdComponent></ThirdComponent>\n//       </div>\n//     );\n//   }\n// }\n\nexport default App;"
  },
  {
    "path": "05-spring-boot-react-full-stack-h2/frontend/todo-app/src/App.test.js",
    "content": "import React from 'react';\nimport ReactDOM from 'react-dom';\nimport App from './App';\n\nit('renders without crashing', () => {\n  const div = document.createElement('div');\n  ReactDOM.render(<App />, div);\n  ReactDOM.unmountComponentAtNode(div);\n});\n"
  },
  {
    "path": "05-spring-boot-react-full-stack-h2/frontend/todo-app/src/Constants.js",
    "content": "/* For Best Practices https://facebook.github.io/create-react-app/docs/adding-custom-environment-variables*/\nexport const API_URL = 'http://localhost:5000'\n//export const API_URL = 'http://rest-api-in28minutes-qa.kvajmpmiiu.us-east-1.elasticbeanstalk.com'\nexport const JPA_API_URL = `${API_URL}/jpa`"
  },
  {
    "path": "05-spring-boot-react-full-stack-h2/frontend/todo-app/src/api/todo/HelloWorldService.js",
    "content": "import axios from 'axios'\nimport { API_URL } from '../../Constants'\n\nclass HelloWorldService {\n\n    executeHelloWorldService() {\n        //console.log('executed service')\n        return axios.get(`${API_URL}/hello-world`);\n    }\n\n    executeHelloWorldBeanService() {\n        //console.log('executed service')\n        return axios.get(`${API_URL}/hello-world-bean`);\n    }\n\n    executeHelloWorldPathVariableService(name) {\n        //console.log('executed service')\n        // let username = 'in28minutes'\n        // let password = 'dummy'\n\n        // let basicAuthHeader = 'Basic ' +  window.btoa(username + \":\" + password)\n\n        return axios.get(`${API_URL}/hello-world/path-variable/${name}`\n            // , \n            //     {\n            //         headers : {\n            //             authorization: basicAuthHeader\n            //         }\n            //     }\n        );\n    }\n\n}\n\nexport default new HelloWorldService()"
  },
  {
    "path": "05-spring-boot-react-full-stack-h2/frontend/todo-app/src/api/todo/TodoDataService.js",
    "content": "import axios from 'axios'\nimport { JPA_API_URL } from '../../Constants'\n\nclass TodoDataService {\n\n    retrieveAllTodos(name) {\n        //console.log('executed service')\n        return axios.get(`${JPA_API_URL}/users/${name}/todos`);\n    }\n\n    retrieveTodo(name, id) {\n        //console.log('executed service')\n        return axios.get(`${JPA_API_URL}/users/${name}/todos/${id}`);\n    }\n\n    deleteTodo(name, id) {\n        //console.log('executed service')\n        return axios.delete(`${JPA_API_URL}/users/${name}/todos/${id}`);\n    }\n\n    updateTodo(name, id, todo) {\n        //console.log('executed service')\n        return axios.put(`${JPA_API_URL}/users/${name}/todos/${id}`, todo);\n    }\n\n    createTodo(name, todo) {\n        //console.log('executed service')\n        return axios.post(`${JPA_API_URL}/users/${name}/todos/`, todo);\n    }\n\n}\n\nexport default new TodoDataService()"
  },
  {
    "path": "05-spring-boot-react-full-stack-h2/frontend/todo-app/src/bootstrap.css",
    "content": "@import url(https://unpkg.com/bootstrap@4.1.0/dist/css/bootstrap.min.css)"
  },
  {
    "path": "05-spring-boot-react-full-stack-h2/frontend/todo-app/src/components/counter/Counter.css",
    "content": "/*\nbutton {\n    background-color: green;\n    font-size : 16px;\n    padding : 15px 30px;\n    color : white;\n    width : 100px;\n}\n\n.count {\n    font-size : 50px;\n    padding : 15px 30px;\n}\n\n.reset {\n    background-color: red;\n    width : 200px;\n}\n\nbody {\n    padding : 15px 30px;\n}\n*/"
  },
  {
    "path": "05-spring-boot-react-full-stack-h2/frontend/todo-app/src/components/counter/Counter.jsx",
    "content": "import React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport './Counter.css'\n\nclass Counter extends Component {\n\n    constructor() {\n\n        super(); //Error 1\n\n        this.state = {\n            counter: 0\n        }\n\n        this.increment = this.increment.bind(this);\n        this.decrement = this.decrement.bind(this);\n        this.reset = this.reset.bind(this);\n    }\n\n    render() {\n        return (\n            <div className=\"counter\">\n                <CounterButton by={1} incrementMethod={this.increment} decrementMethod={this.decrement} />\n                <CounterButton by={5} incrementMethod={this.increment} decrementMethod={this.decrement} />\n                <CounterButton by={10} incrementMethod={this.increment} decrementMethod={this.decrement} />\n                <span className=\"count\">{this.state.counter}</span>\n                <div><button className=\"reset\" onClick={this.reset}>Reset</button></div>\n            </div>\n        );\n    }\n\n    reset() {\n        this.setState({ counter: 0 });\n    }\n\n    increment(by) {\n        //console.log(`increment from child - ${by}`)\n        this.setState(\n            (prevState) => {\n                return { counter: prevState.counter + by }\n            }\n        );\n    }\n\n    decrement(by) {\n        //console.log(`increment from child - ${by}`)\n        this.setState(\n            (prevState) => {\n                return { counter: prevState.counter - by }\n            }\n        );\n    }\n\n}\n\nclass CounterButton extends Component {\n    //Define the initial state in a constructor\n    //state => counter 0\n    //constructor() {\n    //    super(); //Error 1\n\n    //   this.state = {\n    //       counter : 0\n    //   }\n\n    //   this.increment = this.increment.bind(this);\n    //   this.decrement = this.decrement.bind(this);\n    //}\n\n    render() {\n        //render = () =>  {\n        //const style = {fontSize : \"50px\", padding : \"15px 30px\"};\n        return (\n            <div className=\"counter\">\n                <button onClick={() => this.props.incrementMethod(this.props.by)} >+{this.props.by}</button>\n                <button onClick={() => this.props.decrementMethod(this.props.by)} >-{this.props.by}</button>\n                {/*<span className=\"count\" \n            >{this.state.counter}</span>*/}\n            </div>\n        )\n    }\n\n    //   increment() { //Update state - counter++\n    //    //console.log('increment');\n    //     //this.state.counter++; //Bad Practice\n    //     this.setState({\n    //         counter: this.state.counter + this.props.by\n    //     });\n\n    //     this.props.incrementMethod(this.props.by);\n    //   }\n\n    //   decrement () {\n    //     this.setState({\n    //         counter: this.state.counter - this.props.by\n    //     });\n\n    //     this.props.decrementMethod(this.props.by);\n    //   }\n}\n\nCounterButton.defaultProps = {\n    by: 1\n}\n\nCounterButton.propTypes = {\n    by: PropTypes.number\n}\n\nexport default Counter"
  },
  {
    "path": "05-spring-boot-react-full-stack-h2/frontend/todo-app/src/components/learning-examples/FirstComponent.jsx",
    "content": "import React, { Component } from 'react'\n\n//Class Component\nclass FirstComponent extends Component {\n  render() {\n    return (\n      <div className=\"firstComponent\">\n        FirstComponent\n        </div>\n    )\n  }\n}\n\nexport default FirstComponent"
  },
  {
    "path": "05-spring-boot-react-full-stack-h2/frontend/todo-app/src/components/learning-examples/SecondComponent.jsx",
    "content": "import React, { Component } from 'react'\n\nclass SecondComponent extends Component {\n  render() {\n    return (\n      <div className=\"secondComponent\">\n        Second Component\n        </div>\n    )\n  }\n}\n\nexport default SecondComponent"
  },
  {
    "path": "05-spring-boot-react-full-stack-h2/frontend/todo-app/src/components/learning-examples/ThirdComponent.jsx",
    "content": "import React from 'react'\n\nfunction ThirdComponent() {\n  return (\n    <div className=\"thirdComponent\">\n      Third Component\n    </div>\n  )\n}\n\nexport default ThirdComponent"
  },
  {
    "path": "05-spring-boot-react-full-stack-h2/frontend/todo-app/src/components/todo/AuthenticatedRoute.jsx",
    "content": "import React, { Component } from 'react'\nimport { Route, Redirect } from 'react-router-dom'\nimport AuthenticationService from './AuthenticationService.js'\n\nclass AuthenticatedRoute extends Component {\n    render() {\n        if (AuthenticationService.isUserLoggedIn()) {\n            return <Route {...this.props} />\n        } else {\n            return <Redirect to=\"/login\" />\n        }\n\n    }\n}\n\nexport default AuthenticatedRoute"
  },
  {
    "path": "05-spring-boot-react-full-stack-h2/frontend/todo-app/src/components/todo/AuthenticationService.js",
    "content": "import axios from 'axios'\nimport { API_URL } from '../../Constants'\n\nexport const USER_NAME_SESSION_ATTRIBUTE_NAME = 'authenticatedUser'\n\nclass AuthenticationService {\n\n    executeBasicAuthenticationService(username, password) {\n        return axios.get(`${API_URL}/basicauth`,\n            { headers: { authorization: this.createBasicAuthToken(username, password) } })\n    }\n\n    executeJwtAuthenticationService(username, password) {\n        return axios.post(`${API_URL}/authenticate`, {\n            username,\n            password\n        })\n    }\n\n    createBasicAuthToken(username, password) {\n        return 'Basic ' + window.btoa(username + \":\" + password)\n    }\n\n    registerSuccessfulLogin(username, password) {\n        //let basicAuthHeader = 'Basic ' +  window.btoa(username + \":\" + password)\n        //console.log('registerSuccessfulLogin')\n        sessionStorage.setItem(USER_NAME_SESSION_ATTRIBUTE_NAME, username)\n        this.setupAxiosInterceptors(this.createBasicAuthToken(username, password))\n    }\n\n    registerSuccessfulLoginForJwt(username, token) {\n        sessionStorage.setItem(USER_NAME_SESSION_ATTRIBUTE_NAME, username)\n        this.setupAxiosInterceptors(this.createJWTToken(token))\n    }\n\n    createJWTToken(token) {\n        return 'Bearer ' + token\n    }\n\n\n    logout() {\n        sessionStorage.removeItem(USER_NAME_SESSION_ATTRIBUTE_NAME);\n    }\n\n    isUserLoggedIn() {\n        let user = sessionStorage.getItem(USER_NAME_SESSION_ATTRIBUTE_NAME)\n        if (user === null) return false\n        return true\n    }\n\n    getLoggedInUserName() {\n        let user = sessionStorage.getItem(USER_NAME_SESSION_ATTRIBUTE_NAME)\n        if (user === null) return ''\n        return user\n    }\n\n    setupAxiosInterceptors(token) {\n\n        axios.interceptors.request.use(\n            (config) => {\n                if (this.isUserLoggedIn()) {\n                    config.headers.authorization = token\n                }\n                return config\n            }\n        )\n    }\n}\n\nexport default new AuthenticationService()"
  },
  {
    "path": "05-spring-boot-react-full-stack-h2/frontend/todo-app/src/components/todo/ErrorComponent.jsx",
    "content": "import React from 'react'\n\nfunction ErrorComponent() {\n    return <div>An Error Occurred. I don't know what to do! Contact support at abcd-efgh-ijkl</div>\n}\n\nexport default ErrorComponent"
  },
  {
    "path": "05-spring-boot-react-full-stack-h2/frontend/todo-app/src/components/todo/FooterComponent.jsx",
    "content": "import React, { Component } from 'react'\n\nclass FooterComponent extends Component {\n    render() {\n        return (\n            <footer className=\"footer\">\n                <span className=\"text-muted\">All Rights Reserved 2018 @in28minutes</span>\n            </footer>\n        )\n    }\n}\n\nexport default FooterComponent"
  },
  {
    "path": "05-spring-boot-react-full-stack-h2/frontend/todo-app/src/components/todo/HeaderComponent.jsx",
    "content": "import React, { Component } from 'react'\nimport { Link } from 'react-router-dom'\nimport AuthenticationService from './AuthenticationService.js'\n\n\nclass HeaderComponent extends Component {\n    render() {\n        const isUserLoggedIn = AuthenticationService.isUserLoggedIn();\n        //console.log(isUserLoggedIn);\n\n        return (\n            <header>\n                <nav className=\"navbar navbar-expand-md navbar-dark bg-dark\">\n                    <div><a href=\"http://www.in28minutes.com\" className=\"navbar-brand\">in28Minutes</a></div>\n                    <ul className=\"navbar-nav\">\n                        {isUserLoggedIn && <li><Link className=\"nav-link\" to=\"/welcome/in28minutes\">Home</Link></li>}\n                        {isUserLoggedIn && <li><Link className=\"nav-link\" to=\"/todos\">Todos</Link></li>}\n                    </ul>\n                    <ul className=\"navbar-nav navbar-collapse justify-content-end\">\n                        {!isUserLoggedIn && <li><Link className=\"nav-link\" to=\"/login\">Login</Link></li>}\n                        {isUserLoggedIn && <li><Link className=\"nav-link\" to=\"/logout\" onClick={AuthenticationService.logout}>Logout</Link></li>}\n                    </ul>\n                </nav>\n            </header>\n        )\n    }\n}\n\nexport default HeaderComponent"
  },
  {
    "path": "05-spring-boot-react-full-stack-h2/frontend/todo-app/src/components/todo/ListTodosComponent.jsx",
    "content": "import React, { Component } from 'react'\nimport TodoDataService from '../../api/todo/TodoDataService.js'\nimport AuthenticationService from './AuthenticationService.js'\nimport moment from 'moment'\n\nclass ListTodosComponent extends Component {\n    constructor(props) {\n        console.log('constructor')\n        super(props)\n        this.state = {\n            todos: [],\n            message: null\n        }\n        this.deleteTodoClicked = this.deleteTodoClicked.bind(this)\n        this.updateTodoClicked = this.updateTodoClicked.bind(this)\n        this.addTodoClicked = this.addTodoClicked.bind(this)\n        this.refreshTodos = this.refreshTodos.bind(this)\n    }\n\n    componentWillUnmount() {\n        console.log('componentWillUnmount')\n    }\n\n    shouldComponentUpdate(nextProps, nextState) {\n        console.log('shouldComponentUpdate')\n        console.log(nextProps)\n        console.log(nextState)\n        return true\n    }\n\n    componentDidMount() {\n        console.log('componentDidMount')\n        this.refreshTodos();\n        console.log(this.state)\n    }\n\n    refreshTodos() {\n        let username = AuthenticationService.getLoggedInUserName()\n        TodoDataService.retrieveAllTodos(username)\n            .then(\n                response => {\n                    //console.log(response);\n                    this.setState({ todos: response.data })\n                }\n            )\n    }\n\n    deleteTodoClicked(id) {\n        let username = AuthenticationService.getLoggedInUserName()\n        //console.log(id + \" \" + username);\n        TodoDataService.deleteTodo(username, id)\n            .then(\n                response => {\n                    this.setState({ message: `Delete of todo ${id} Successful` })\n                    this.refreshTodos()\n                }\n            )\n\n    }\n\n    addTodoClicked() {\n        this.props.history.push(`/todos/-1`)\n    }\n\n    updateTodoClicked(id) {\n        console.log('update ' + id)\n        this.props.history.push(`/todos/${id}`)\n        // /todos/${id}\n        // let username = AuthenticationService.getLoggedInUserName()\n        // //console.log(id + \" \" + username);\n        // TodoDataService.deleteTodo(username, id)\n        //  .then (\n        //      response => {\n        //         this.setState({message : `Delete of todo ${id} Successful`})\n        //         this.refreshTodos()\n        //      }\n        //  )\n\n    }\n\n    render() {\n        console.log('render')\n        return (\n            <div>\n                <h1>List Todos</h1>\n                {this.state.message && <div class=\"alert alert-success\">{this.state.message}</div>}\n                <div className=\"container\">\n                    <table className=\"table\">\n                        <thead>\n                            <tr>\n                                <th>Description</th>\n                                <th>Target Date</th>\n                                <th>IsCompleted?</th>\n                                <th>Update</th>\n                                <th>Delete</th>\n                            </tr>\n                        </thead>\n                        <tbody>\n                            {\n                                this.state.todos.map(\n                                    todo =>\n                                        <tr key={todo.id}>\n                                            <td>{todo.description}</td>\n                                            <td>{moment(todo.targetDate).format('YYYY-MM-DD')}</td>\n                                            <td>{todo.done.toString()}</td>\n                                            <td><button className=\"btn btn-success\" onClick={() => this.updateTodoClicked(todo.id)}>Update</button></td>\n                                            <td><button className=\"btn btn-warning\" onClick={() => this.deleteTodoClicked(todo.id)}>Delete</button></td>\n                                        </tr>\n                                )\n                            }\n                        </tbody>\n                    </table>\n                    <div className=\"row\">\n                        <button className=\"btn btn-success\" onClick={this.addTodoClicked}>Add</button>\n                    </div>\n                </div>\n            </div>\n        )\n    }\n}\n\nexport default ListTodosComponent"
  },
  {
    "path": "05-spring-boot-react-full-stack-h2/frontend/todo-app/src/components/todo/LoginComponent.jsx",
    "content": "import React, { Component } from 'react'\nimport AuthenticationService from './AuthenticationService.js'\n\nclass LoginComponent extends Component {\n\n    constructor(props) {\n        super(props)\n\n        this.state = {\n            username: 'in28minutes',\n            password: '',\n            hasLoginFailed: false,\n            showSuccessMessage: false\n        }\n        // this.handleUsernameChange = this.handleUsernameChange.bind(this)\n        // this.handlePasswordChange = this.handlePasswordChange.bind(this)\n        this.handleChange = this.handleChange.bind(this)\n        this.loginClicked = this.loginClicked.bind(this)\n    }\n\n    handleChange(event) {\n        //console.log(this.state);\n        this.setState(\n            {\n                [event.target.name]\n                    : event.target.value\n            }\n        )\n    }\n\n    // handleUsernameChange(event) {\n    //     console.log(event.target.name);\n    //     this.setState(\n    //         {\n    //             [event.target.name]\n    //               :event.target.value\n    //         }\n    //     )\n    // }\n\n    // handlePasswordChange(event) {\n    //     console.log(event.target.value);\n    //     this.setState({password:event.target.value})\n    // }\n\n    loginClicked() {\n        //in28minutes,dummy\n        // if(this.state.username==='in28minutes' && this.state.password==='dummy'){\n        //     AuthenticationService.registerSuccessfulLogin(this.state.username,this.state.password)\n        //     this.props.history.push(`/welcome/${this.state.username}`)\n        //     //this.setState({showSuccessMessage:true})\n        //     //this.setState({hasLoginFailed:false})\n        // }\n        // else {\n        //     this.setState({showSuccessMessage:false})\n        //     this.setState({hasLoginFailed:true})\n        // }\n\n        // AuthenticationService\n        // .executeBasicAuthenticationService(this.state.username, this.state.password)\n        // .then(() => {\n        //     AuthenticationService.registerSuccessfulLogin(this.state.username,this.state.password)\n        //     this.props.history.push(`/welcome/${this.state.username}`)\n        // }).catch( () =>{\n        //     this.setState({showSuccessMessage:false})\n        //     this.setState({hasLoginFailed:true})\n        // })\n        AuthenticationService\n            .executeJwtAuthenticationService(this.state.username, this.state.password)\n            .then((response) => {\n                AuthenticationService.registerSuccessfulLoginForJwt(this.state.username, response.data.token)\n                this.props.history.push(`/welcome/${this.state.username}`)\n            }).catch(() => {\n                this.setState({ showSuccessMessage: false })\n                this.setState({ hasLoginFailed: true })\n            })\n\n    }\n\n    render() {\n        return (\n            <div>\n                <h1>Login</h1>\n                <div className=\"container\">\n                    {/*<ShowInvalidCredentials hasLoginFailed={this.state.hasLoginFailed}/>*/}\n                    {this.state.hasLoginFailed && <div className=\"alert alert-warning\">Invalid Credentials</div>}\n                    {this.state.showSuccessMessage && <div>Login Sucessful</div>}\n                    {/*<ShowLoginSuccessMessage showSuccessMessage={this.state.showSuccessMessage}/>*/}\n                    User Name: <input type=\"text\" name=\"username\" value={this.state.username} onChange={this.handleChange} />\n                    Password: <input type=\"password\" name=\"password\" value={this.state.password} onChange={this.handleChange} />\n                    <button className=\"btn btn-success\" onClick={this.loginClicked}>Login</button>\n                </div>\n            </div>\n        )\n    }\n}\n\nexport default LoginComponent"
  },
  {
    "path": "05-spring-boot-react-full-stack-h2/frontend/todo-app/src/components/todo/LogoutComponent.jsx",
    "content": "import React, { Component } from 'react'\n\nclass LogoutComponent extends Component {\n    render() {\n        return (\n            <>\n                <h1>You are logged out</h1>\n                <div className=\"container\">\n                    Thank You for Using Our Application.\n                </div>\n            </>\n        )\n    }\n}\n\nexport default LogoutComponent"
  },
  {
    "path": "05-spring-boot-react-full-stack-h2/frontend/todo-app/src/components/todo/TodoApp.jsx",
    "content": "import React, {Component} from 'react'\nimport {BrowserRouter as Router, Route, Switch} from 'react-router-dom'\nimport AuthenticatedRoute from './AuthenticatedRoute.jsx'\nimport LoginComponent from './LoginComponent.jsx'\nimport ListTodosComponent from './ListTodosComponent.jsx'\nimport ErrorComponent from './ErrorComponent.jsx'\nimport HeaderComponent from './HeaderComponent.jsx'\nimport FooterComponent from './FooterComponent.jsx'\nimport LogoutComponent from './LogoutComponent.jsx'\nimport WelcomeComponent from './WelcomeComponent.jsx'\nimport TodoComponent from './TodoComponent.jsx'\n\nclass TodoApp extends Component {\n    render() {\n        return (\n            <div className=\"TodoApp\">\n                <Router>\n                    <>\n                        <HeaderComponent/>\n                        <Switch>\n                            <Route path=\"/\" exact component={LoginComponent}/>\n                            <Route path=\"/login\" component={LoginComponent}/>\n                            <AuthenticatedRoute path=\"/welcome/:name\" component={WelcomeComponent}/>\n                            <AuthenticatedRoute path=\"/todos/:id\" component={TodoComponent}/>\n                            <AuthenticatedRoute path=\"/todos\" component={ListTodosComponent}/>\n                            <AuthenticatedRoute path=\"/logout\" component={LogoutComponent}/>\n                            \n                            <Route component={ErrorComponent}/>\n                        </Switch>\n                        <FooterComponent/>\n                    </>\n                </Router>\n                {/*<LoginComponent/>\n                <WelcomeComponent/>*/}\n            </div>\n        )\n    }\n}\n\nexport default TodoApp"
  },
  {
    "path": "05-spring-boot-react-full-stack-h2/frontend/todo-app/src/components/todo/TodoComponent.jsx",
    "content": "import React, { Component } from 'react'\nimport moment from 'moment'\nimport { Formik, Form, Field, ErrorMessage } from 'formik';\nimport TodoDataService from '../../api/todo/TodoDataService.js'\nimport AuthenticationService from './AuthenticationService.js'\n\nclass TodoComponent extends Component {\n    constructor(props) {\n        super(props)\n\n        this.state = {\n            id: this.props.match.params.id,\n            description: '',\n            targetDate: moment(new Date()).format('YYYY-MM-DD')\n        }\n\n        this.onSubmit = this.onSubmit.bind(this)\n        this.validate = this.validate.bind(this)\n\n    }\n\n    componentDidMount() {\n\n        if (this.state.id === -1) {\n            return\n        }\n\n        let username = AuthenticationService.getLoggedInUserName()\n\n        TodoDataService.retrieveTodo(username, this.state.id)\n            .then(response => this.setState({\n                description: response.data.description,\n                targetDate: moment(response.data.targetDate).format('YYYY-MM-DD')\n            }))\n    }\n\n    validate(values) {\n        let errors = {}\n        if (!values.description) {\n            errors.description = 'Enter a Description'\n        } else if (values.description.length < 5) {\n            errors.description = 'Enter atleast 5 Characters in Description'\n        }\n\n        if (!moment(values.targetDate).isValid()) {\n            errors.targetDate = 'Enter a valid Target Date'\n        }\n\n        return errors\n\n    }\n\n    onSubmit(values) {\n        let username = AuthenticationService.getLoggedInUserName()\n\n        let todo = {\n            id: this.state.id,\n            description: values.description,\n            targetDate: values.targetDate\n        }\n\n        if (this.state.id === -1) {\n            TodoDataService.createTodo(username, todo)\n                .then(() => this.props.history.push('/todos'))\n        } else {\n            TodoDataService.updateTodo(username, this.state.id, todo)\n                .then(() => this.props.history.push('/todos'))\n        }\n\n        console.log(values);\n    }\n\n    render() {\n\n        let { description, targetDate } = this.state\n        //let targetDate = this.state.targetDate\n\n        return (\n            <div>\n                <h1>Todo</h1>\n                <div className=\"container\">\n                    <Formik\n                        initialValues={{ description, targetDate }}\n                        onSubmit={this.onSubmit}\n                        validateOnChange={false}\n                        validateOnBlur={false}\n                        validate={this.validate}\n                        enableReinitialize={true}\n                    >\n                        {\n                            (props) => (\n                                <Form>\n                                    <ErrorMessage name=\"description\" component=\"div\"\n                                        className=\"alert alert-warning\" />\n                                    <ErrorMessage name=\"targetDate\" component=\"div\"\n                                        className=\"alert alert-warning\" />\n                                    <fieldset className=\"form-group\">\n                                        <label>Description</label>\n                                        <Field className=\"form-control\" type=\"text\" name=\"description\" />\n                                    </fieldset>\n                                    <fieldset className=\"form-group\">\n                                        <label>Target Date</label>\n                                        <Field className=\"form-control\" type=\"date\" name=\"targetDate\" />\n                                    </fieldset>\n                                    <button className=\"btn btn-success\" type=\"submit\">Save</button>\n                                </Form>\n                            )\n                        }\n                    </Formik>\n\n                </div>\n            </div>\n        )\n    }\n}\n\nexport default TodoComponent"
  },
  {
    "path": "05-spring-boot-react-full-stack-h2/frontend/todo-app/src/components/todo/WelcomeComponent.jsx",
    "content": "import React, { Component } from 'react'\nimport { Link } from 'react-router-dom'\nimport HelloWorldService from '../../api/todo/HelloWorldService.js'\n\nclass WelcomeComponent extends Component {\n\n    constructor(props) {\n        super(props)\n        this.retrieveWelcomeMessage = this.retrieveWelcomeMessage.bind(this)\n        this.state = {\n            welcomeMessage: ''\n        }\n        this.handleSuccessfulResponse = this.handleSuccessfulResponse.bind(this)\n        this.handleError = this.handleError.bind(this)\n    }\n\n    render() {\n        return (\n            <>\n                <h1>Welcome!</h1>\n                <div className=\"container\">\n                    Welcome {this.props.match.params.name}.\n                    You can manage your todos <Link to=\"/todos\">here</Link>.\n                </div>\n                <div className=\"container\">\n                    Click here to get a customized welcome message.\n                    <button onClick={this.retrieveWelcomeMessage}\n                        className=\"btn btn-success\">Get Welcome Message</button>\n                </div>\n                <div className=\"container\">\n                    {this.state.welcomeMessage}\n                </div>\n\n            </>\n        )\n    }\n\n    retrieveWelcomeMessage() {\n        // HelloWorldService.executeHelloWorldService()\n        // .then( response => this.handleSuccessfulResponse(response) )\n\n        // HelloWorldService.executeHelloWorldBeanService()\n        // .then( response => this.handleSuccessfulResponse(response) )\n\n        HelloWorldService.executeHelloWorldPathVariableService(this.props.match.params.name)\n            .then(response => this.handleSuccessfulResponse(response))\n            .catch(error => this.handleError(error))\n    }\n\n    handleSuccessfulResponse(response) {\n        console.log(response)\n        this.setState({ welcomeMessage: response.data.message })\n    }\n\n    handleError(error) {\n\n        console.log(error.response)\n\n        let errorMessage = '';\n\n        if (error.message)\n            errorMessage += error.message\n\n        if (error.response && error.response.data) {\n            errorMessage += error.response.data.message\n        }\n\n        this.setState({ welcomeMessage: errorMessage })\n    }\n\n}\n\n\nexport default WelcomeComponent"
  },
  {
    "path": "05-spring-boot-react-full-stack-h2/frontend/todo-app/src/index.css",
    "content": "body {\n  margin: 0;\n  padding: 0;\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Roboto\", \"Oxygen\",\n    \"Ubuntu\", \"Cantarell\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\",\n    sans-serif;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n\ncode {\n  font-family: source-code-pro, Menlo, Monaco, Consolas, \"Courier New\",\n    monospace;\n}\n"
  },
  {
    "path": "05-spring-boot-react-full-stack-h2/frontend/todo-app/src/index.js",
    "content": "import React from 'react';\nimport ReactDOM from 'react-dom';\nimport './index.css';\nimport App from './App';\nimport * as serviceWorker from './serviceWorker';\n\nReactDOM.render(<App />, document.getElementById('root'));\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://bit.ly/CRA-PWA\nserviceWorker.unregister();\n"
  },
  {
    "path": "05-spring-boot-react-full-stack-h2/frontend/todo-app/src/serviceWorker.js",
    "content": "// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n  window.location.hostname === 'localhost' ||\n    // [::1] is the IPv6 localhost address.\n    window.location.hostname === '[::1]' ||\n    // 127.0.0.1/8 is considered localhost for IPv4.\n    window.location.hostname.match(\n      /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n    )\n);\n\nexport function register(config) {\n  if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n    // The URL constructor is available in all browsers that support SW.\n    const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\n    if (publicUrl.origin !== window.location.origin) {\n      // Our service worker won't work if PUBLIC_URL is on a different origin\n      // from what our page is served on. This might happen if a CDN is used to\n      // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n      return;\n    }\n\n    window.addEventListener('load', () => {\n      const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n      if (isLocalhost) {\n        // This is running on localhost. Let's check if a service worker still exists or not.\n        checkValidServiceWorker(swUrl, config);\n\n        // Add some additional logging to localhost, pointing developers to the\n        // service worker/PWA documentation.\n        navigator.serviceWorker.ready.then(() => {\n          console.log(\n            'This web app is being served cache-first by a service ' +\n              'worker. To learn more, visit https://bit.ly/CRA-PWA'\n          );\n        });\n      } else {\n        // Is not localhost. Just register service worker\n        registerValidSW(swUrl, config);\n      }\n    });\n  }\n}\n\nfunction registerValidSW(swUrl, config) {\n  navigator.serviceWorker\n    .register(swUrl)\n    .then(registration => {\n      registration.onupdatefound = () => {\n        const installingWorker = registration.installing;\n        if (installingWorker == null) {\n          return;\n        }\n        installingWorker.onstatechange = () => {\n          if (installingWorker.state === 'installed') {\n            if (navigator.serviceWorker.controller) {\n              // At this point, the updated precached content has been fetched,\n              // but the previous service worker will still serve the older\n              // content until all client tabs are closed.\n              console.log(\n                'New content is available and will be used when all ' +\n                  'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\n              );\n\n              // Execute callback\n              if (config && config.onUpdate) {\n                config.onUpdate(registration);\n              }\n            } else {\n              // At this point, everything has been precached.\n              // It's the perfect time to display a\n              // \"Content is cached for offline use.\" message.\n              console.log('Content is cached for offline use.');\n\n              // Execute callback\n              if (config && config.onSuccess) {\n                config.onSuccess(registration);\n              }\n            }\n          }\n        };\n      };\n    })\n    .catch(error => {\n      console.error('Error during service worker registration:', error);\n    });\n}\n\nfunction checkValidServiceWorker(swUrl, config) {\n  // Check if the service worker can be found. If it can't reload the page.\n  fetch(swUrl)\n    .then(response => {\n      // Ensure service worker exists, and that we really are getting a JS file.\n      const contentType = response.headers.get('content-type');\n      if (\n        response.status === 404 ||\n        (contentType != null && contentType.indexOf('javascript') === -1)\n      ) {\n        // No service worker found. Probably a different app. Reload the page.\n        navigator.serviceWorker.ready.then(registration => {\n          registration.unregister().then(() => {\n            window.location.reload();\n          });\n        });\n      } else {\n        // Service worker found. Proceed as normal.\n        registerValidSW(swUrl, config);\n      }\n    })\n    .catch(() => {\n      console.log(\n        'No internet connection found. App is running in offline mode.'\n      );\n    });\n}\n\nexport function unregister() {\n  if ('serviceWorker' in navigator) {\n    navigator.serviceWorker.ready.then(registration => {\n      registration.unregister();\n    });\n  }\n}\n"
  },
  {
    "path": "05-spring-boot-react-full-stack-h2/readme.md",
    "content": "# Full Stack Application with Spring Boot and React\n\n![Architecture](react_00_architecture.png)\n\nTo understand the application\n- https://www.springboottutorial.com/spring-boot-react-full-stack-crud-maven-application\n\nTo understand JWT and Spring Security Configuration\n- https://www.springboottutorial.com/spring-boot-react-full-stack-with-spring-security-basic-and-jwt-authentication\n\n## Running the Application\n\n- REST API - Import `restful-web-services` into Eclipse as Maven Project. Run `com.in28minutes.rest.webservices.restfulwebservices.RestfulWebServicesApplication` as a Java Application. Check Authentication and REST API Sections for executing REST APIs.\n- React Application - Import `frontend/todo-app` into Visual Studio Code. Run `npm install` followed by `npm start`\n- http://localhost:4200/ with credentials in28minutes/dummy\n\n> Look at  `Creating New Users` section for creating new users.\n\n## Deploying Front End to AWS\n\n### Change /frontend/todo-app/src/Constants.js\n\n```\n/* For Best Practices https://facebook.github.io/create-react-app/docs/adding-custom-environment-variables*/\n//export const API_URL = 'http://localhost:5000'\nexport const API_URL = 'http://restfulwebservices-env.uhpev7xzpb.us-east-1.elasticbeanstalk.com'\n```\n\n### Create Production Build\n\n`npm run build`\n\n\n### S3 Access for Static Content\n\n```\n{\n    \"Version\": \"2012-10-17\",\n    \"Statement\": [\n        {\n            \"Sid\": \"AddPerm\",\n            \"Effect\": \"Allow\",\n            \"Principal\": \"*\",\n            \"Action\": \"s3:GetObject\",\n            \"Resource\": \"arn:aws:s3:::fullstack-frontend/*\"\n        }\n    ]\n}\n```\n\n## Authentication\n\nAll REST API are protected by JWT Authentication with Spring Security. \n\nPOST to http://localhost:5000/authenticate\n\n```\n{\n  \"username\":\"in28minutes\",\n  \"password\":\"dummy\"\n}\n```\n\nResponse\n```\n{\n\"token\": \"eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJpbjI4bWludXRlcyIsImV4cCI6MTU2MjIzNDM1OSwiaWF0IjoxNTYxNjI5NTU5fQ.yvkFtYAp8yGClDo7D5wtXyPSnUPtxu8A7A9YCl9FJdjR0di_yAaPcSTR6liN5bIu1SnOJuSZp94pYSYzU_BNEw\"\n}\n```\n\nUse the token in the headers for all subsequent requests.\n\n`Authorization` : `Bearer ${token}`\n\nExample \n\n`Authorization` : `Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJpbjI4bWludXRlcyIsImV4cCI6MTU2MjIzNDM1OSwiaWF0IjoxNTYxNjI5NTU5fQ.yvkFtYAp8yGClDo7D5wtXyPSnUPtxu8A7A9YCl9FJdjR0di_yAaPcSTR6liN5bIu1SnOJuSZp94pYSYzU_BNEw`\n\n\n## Creating New Users\n\nLook at /src/main/resources/data.sql for existing users.\n\nYou can create new users by encrypting password with Bcrypt - Use Rounds 10 - https://www.browserling.com/tools/bcrypt \n\n```\nINSERT INTO USER (ID, USERNAME, PASSWORD, ROLE) \nVALUES (3, 'USERNAME', 'BCRYPT_ENCRyPTED_PASSWORD','ROLE_USER');\n```\n\n\n## Hello World URLS\n\n- http://localhost:5000/hello-world\n\n```txt\nHello World\n```\n\n- http://localhost:5000/hello-world-bean\n\n```json\n{\"message\":\"Hello World - Changed\"}\n```\n\n- http://localhost:5000/hello-world/path-variable/in28minutes\n\n```json\n{\"message\":\"Hello World, in28minutes\"}\n```\n\n## TODO Resource Details\n\n- GET - http://localhost:5000/jpa/users/in28minutes/todos\n\n```\n[\n  {\n    \"id\": 10001,\n    \"username\": \"in28minutes\",\n    \"description\": \"Learn JPA\",\n    \"targetDate\": \"2019-06-27T06:30:30.696+0000\",\n    \"done\": false\n  },\n  {\n    \"id\": 10002,\n    \"username\": \"in28minutes\",\n    \"description\": \"Learn Data JPA\",\n    \"targetDate\": \"2019-06-27T06:30:30.700+0000\",\n    \"done\": false\n  },\n  {\n    \"id\": 10003,\n    \"username\": \"in28minutes\",\n    \"description\": \"Learn Microservices\",\n    \"targetDate\": \"2019-06-27T06:30:30.701+0000\",\n    \"done\": false\n  }\n]\n```\n\n#### Retrieve a specific todo\n\n- GET - http://localhost:5000/jpa/users/in28minutes/todos/10001\n\n```\n{\n  \"id\": 10001,\n  \"username\": \"in28minutes\",\n  \"description\": \"Learn JPA\",\n  \"targetDate\": \"2019-06-27T06:30:30.696+0000\",\n  \"done\": false\n}\n```\n\n#### Creating a new todo\n\n- POST to http://localhost:5000/jpa/users/in28minutes/todos with BODY of Request given below\n\n```\n{\n  \"username\": \"in28minutes\",\n  \"description\": \"Learn to Drive a Car\",\n  \"targetDate\": \"2030-11-09T10:49:23.566+0000\",\n  \"done\": false\n}\n```\n\n#### Updating a new todo\n\n- http://localhost:5000/jpa/users/in28minutes/todos/10001 with BODY of Request given below\n\n```\n{\n  \"id\": 10001,\n  \"username\": \"in28minutes\",\n  \"description\": \"Learn to Drive a Car\",\n  \"targetDate\": \"2045-11-09T10:49:23.566+0000\",\n  \"done\": false\n}\n```\n\n#### Delete todo\n\n- DELETE to http://localhost:5000/jpa/users/in28minutes/todos/10001\n\n## H2 Schema - Created by Spring Boot Auto Configuration\n\n```\nHibernate: drop table todo if exists\nHibernate: drop table user if exists\nHibernate: drop sequence if exists hibernate_sequence\nHibernate: drop sequence if exists user_seq\nHibernate: create sequence hibernate_sequence start with 1 increment by 1\nHibernate: create sequence user_seq start with 1 increment by 1\nHibernate: create table todo (id bigint not null, description varchar(255), is_done boolean not null, target_date timestamp, username varchar(255), primary key (id))\nHibernate: create table user (id bigint not null, password varchar(100) not null, role varchar(100) not null, username varchar(50) not null, primary key (id))\nHibernate: alter table user add constraint UK_sb8bbouer5wak8vyiiy4pf2bx unique (username)\n```\n\n\n## H2 Console\n\n- http://localhost:5000/h2-console\n- Use `jdbc:h2:mem:testdb` as JDBC URL \n\n"
  },
  {
    "path": "05-spring-boot-react-full-stack-h2/restful-web-services/pom.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n\txsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\">\n\t<modelVersion>4.0.0</modelVersion>\n\n\t<groupId>com.in28minutes.rest.webservices</groupId>\n\t<artifactId>05-restful-web-services-full-stack-bankend</artifactId>\n\t<version>0.0.1-SNAPSHOT</version>\n\t<packaging>jar</packaging>\n\n\t<name>restful-web-services</name>\n\t<description>Demo project for Spring Boot</description>\n\n\t<parent>\n\t\t<groupId>org.springframework.boot</groupId>\n\t\t<artifactId>spring-boot-starter-parent</artifactId>\n\t\t<version>2.1.0.RELEASE</version>\n\t\t<relativePath /> <!-- lookup parent from repository -->\n\t</parent>\n\n\t<properties>\n\t\t<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>\n\t\t<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>\n\t\t<java.version>1.8</java.version>\n\t</properties>\n\n\t<dependencies>\n\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t<artifactId>spring-boot-starter-data-jpa</artifactId>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t<artifactId>spring-boot-starter-web</artifactId>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t<artifactId>spring-boot-starter-security</artifactId>\n\t\t</dependency>\n\t\t\n\t\t<dependency>\n\t\t\t<groupId>io.jsonwebtoken</groupId>\n\t\t\t<artifactId>jjwt</artifactId>\n\t\t\t<version>0.9.1</version>\n\t\t\t\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t<artifactId>spring-boot-devtools</artifactId>\n\t\t\t<scope>runtime</scope>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>com.h2database</groupId>\n\t\t\t<artifactId>h2</artifactId>\n\t\t\t<scope>runtime</scope>\n\t\t</dependency>\n\n\n\t\t<dependency>\n\t\t\t<groupId>javax.xml.bind</groupId>\n\t\t\t<artifactId>jaxb-api</artifactId>\n\t\t\t<version>2.3.0</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>com.sun.xml.bind</groupId>\n\t\t\t<artifactId>jaxb-impl</artifactId>\n\t\t\t<version>2.3.0</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>org.glassfish.jaxb</groupId>\n\t\t\t<artifactId>jaxb-runtime</artifactId>\n\t\t\t<version>2.3.0</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>javax.activation</groupId>\n\t\t\t<artifactId>activation</artifactId>\n\t\t\t<version>1.1.1</version>\n\t\t</dependency>\n\n\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t<artifactId>spring-boot-starter-test</artifactId>\n\t\t\t<scope>test</scope>\n\t\t</dependency>\n\t</dependencies>\n\n\t<build>\n\t\t<plugins>\n\t\t\t<plugin>\n\t\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t\t<artifactId>spring-boot-maven-plugin</artifactId>\n\t\t\t</plugin>\n\t\t</plugins>\n\t</build>\n\n\t<repositories>\n\t\t<repository>\n\t\t\t<id>spring-snapshots</id>\n\t\t\t<name>Spring Snapshots</name>\n\t\t\t<url>https://repo.spring.io/snapshot</url>\n\t\t\t<snapshots>\n\t\t\t\t<enabled>true</enabled>\n\t\t\t</snapshots>\n\t\t</repository>\n\t\t<repository>\n\t\t\t<id>spring-milestones</id>\n\t\t\t<name>Spring Milestones</name>\n\t\t\t<url>https://repo.spring.io/milestone</url>\n\t\t\t<snapshots>\n\t\t\t\t<enabled>false</enabled>\n\t\t\t</snapshots>\n\t\t</repository>\n\t</repositories>\n\n\t<pluginRepositories>\n\t\t<pluginRepository>\n\t\t\t<id>spring-snapshots</id>\n\t\t\t<name>Spring Snapshots</name>\n\t\t\t<url>https://repo.spring.io/snapshot</url>\n\t\t\t<snapshots>\n\t\t\t\t<enabled>true</enabled>\n\t\t\t</snapshots>\n\t\t</pluginRepository>\n\t\t<pluginRepository>\n\t\t\t<id>spring-milestones</id>\n\t\t\t<name>Spring Milestones</name>\n\t\t\t<url>https://repo.spring.io/milestone</url>\n\t\t\t<snapshots>\n\t\t\t\t<enabled>false</enabled>\n\t\t\t</snapshots>\n\t\t</pluginRepository>\n\t</pluginRepositories>\n\n\n</project>\n"
  },
  {
    "path": "05-spring-boot-react-full-stack-h2/restful-web-services/readme.md",
    "content": "# Full Stack Application with Spring Boot and React\n\n\n<img src=\"../react_00_architecture.png\" width=\"300\">\n\nTo understand the application\n- https://www.springboottutorial.com/spring-boot-react-full-stack-crud-maven-application\n\nTo understand JWT and Spring Security Configuration\n- https://www.springboottutorial.com/spring-boot-react-full-stack-with-spring-security-basic-and-jwt-authentication\n\n## Running the Application\n\n- REST API - Import `restful-web-services` into Eclipse as Maven Project. Run `com.in28minutes.rest.webservices.restfulwebservices.RestfulWebServicesApplication` as a Java Application. Check Authentication and REST API Sections for executing REST APIs.\n- React Application - Import `frontend/todo-app` into Visual Studio Code. Run `npm install` followed by `npm start`\n- http://localhost:4200/ with credentials in28minutes/dummy\n\n> Look at  `Creating New Users` section for creating new users.\n\n## Deploying Front End to AWS\n\n### Change /frontend/todo-app/src/Constants.js\n\n```\n/* For Best Practices https://facebook.github.io/create-react-app/docs/adding-custom-environment-variables*/\n//export const API_URL = 'http://localhost:5000'\nexport const API_URL = 'http://restfulwebservices-env.uhpev7xzpb.us-east-1.elasticbeanstalk.com'\n```\n\n### Create Production Build\n\n`npm run build`\n\n\n### S3 Access for Static Content\n\n```\n{\n    \"Version\": \"2012-10-17\",\n    \"Statement\": [\n        {\n            \"Sid\": \"AddPerm\",\n            \"Effect\": \"Allow\",\n            \"Principal\": \"*\",\n            \"Action\": \"s3:GetObject\",\n            \"Resource\": \"arn:aws:s3:::full-stack-frontend-qa/*\"\n        }\n    ]\n}\n```\n\n## Authentication\n\nAll REST API are protected by JWT Authentication with Spring Security. \n\nPOST to http://localhost:5000/authenticate\n\n```\n{\n  \"username\":\"in28minutes\",\n  \"password\":\"dummy\"\n}\n```\n\nResponse\n```\n{\n\"token\": \"eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJpbjI4bWludXRlcyIsImV4cCI6MTU2MjIzNDM1OSwiaWF0IjoxNTYxNjI5NTU5fQ.yvkFtYAp8yGClDo7D5wtXyPSnUPtxu8A7A9YCl9FJdjR0di_yAaPcSTR6liN5bIu1SnOJuSZp94pYSYzU_BNEw\"\n}\n```\n\nUse the token in the headers for all subsequent requests.\n\n`Authorization` : `Bearer ${token}`\n\nExample \n\n`Authorization` : `Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJpbjI4bWludXRlcyIsImV4cCI6MTU2MjIzNDM1OSwiaWF0IjoxNTYxNjI5NTU5fQ.yvkFtYAp8yGClDo7D5wtXyPSnUPtxu8A7A9YCl9FJdjR0di_yAaPcSTR6liN5bIu1SnOJuSZp94pYSYzU_BNEw`\n\n\n## Creating New Users\n\nLook at /src/main/resources/data.sql for existing users.\n\nYou can create new users by encrypting password with Bcrypt - Use Rounds 10 - https://www.browserling.com/tools/bcrypt \n\n```\nINSERT INTO USER (ID, USERNAME, PASSWORD, ROLE) \nVALUES (3, 'USERNAME', 'BCRYPT_ENCRyPTED_PASSWORD','ROLE_USER');\n```\n\n\n## Hello World URLS\n\n- http://localhost:5000/hello-world\n\n```txt\nHello World\n```\n\n- http://localhost:5000/hello-world-bean\n\n```json\n{\"message\":\"Hello World - Changed\"}\n```\n\n- http://localhost:5000/hello-world/path-variable/in28minutes\n\n```json\n{\"message\":\"Hello World, in28minutes\"}\n```\n\n## TODO Resource Details\n\n- GET - http://localhost:5000/jpa/users/in28minutes/todos\n\n```\n[\n  {\n    \"id\": 10001,\n    \"username\": \"in28minutes\",\n    \"description\": \"Learn JPA\",\n    \"targetDate\": \"2019-06-27T06:30:30.696+0000\",\n    \"done\": false\n  },\n  {\n    \"id\": 10002,\n    \"username\": \"in28minutes\",\n    \"description\": \"Learn Data JPA\",\n    \"targetDate\": \"2019-06-27T06:30:30.700+0000\",\n    \"done\": false\n  },\n  {\n    \"id\": 10003,\n    \"username\": \"in28minutes\",\n    \"description\": \"Learn Microservices\",\n    \"targetDate\": \"2019-06-27T06:30:30.701+0000\",\n    \"done\": false\n  }\n]\n```\n\n#### Retrieve a specific todo\n\n- GET - http://localhost:5000/jpa/users/in28minutes/todos/10001\n\n```\n{\n  \"id\": 10001,\n  \"username\": \"in28minutes\",\n  \"description\": \"Learn JPA\",\n  \"targetDate\": \"2019-06-27T06:30:30.696+0000\",\n  \"done\": false\n}\n```\n\n#### Creating a new todo\n\n- POST to http://localhost:5000/jpa/users/in28minutes/todos with BODY of Request given below\n\n```\n{\n  \"username\": \"in28minutes\",\n  \"description\": \"Learn to Drive a Car\",\n  \"targetDate\": \"2030-11-09T10:49:23.566+0000\",\n  \"done\": false\n}\n```\n\n#### Updating a new todo\n\n- http://localhost:5000/jpa/users/in28minutes/todos/10001 with BODY of Request given below\n\n```\n{\n  \"id\": 10001,\n  \"username\": \"in28minutes\",\n  \"description\": \"Learn to Drive a Car\",\n  \"targetDate\": \"2045-11-09T10:49:23.566+0000\",\n  \"done\": false\n}\n```\n\n#### Delete todo\n\n- DELETE to http://localhost:5000/jpa/users/in28minutes/todos/10001\n\n## H2 Schema - Created by Spring Boot Auto Configuration\n\n```\nHibernate: drop table todo if exists\nHibernate: drop table user if exists\nHibernate: drop sequence if exists hibernate_sequence\nHibernate: drop sequence if exists user_seq\nHibernate: create sequence hibernate_sequence start with 1 increment by 1\nHibernate: create sequence user_seq start with 1 increment by 1\nHibernate: create table todo (id bigint not null, description varchar(255), is_done boolean not null, target_date timestamp, username varchar(255), primary key (id))\nHibernate: create table user (id bigint not null, password varchar(100) not null, role varchar(100) not null, username varchar(50) not null, primary key (id))\nHibernate: alter table user add constraint UK_sb8bbouer5wak8vyiiy4pf2bx unique (username)\n```\n\n\n## H2 Console\n\n- http://localhost:5000/h2-console\n- Use `jdbc:h2:mem:testdb` as JDBC URL \n\n"
  },
  {
    "path": "05-spring-boot-react-full-stack-h2/restful-web-services/src/main/java/com/in28minutes/rest/basic/auth/AuthenticationBean.java",
    "content": "package com.in28minutes.rest.basic.auth;\npublic class AuthenticationBean {\n\n    private String message;\n\n    public AuthenticationBean(String message) {\n        this.message = message;\n    }\n\n    public String getMessage() {\n        return message;\n    }\n\n    public void setMessage(String message) {\n        this.message = message;\n    }\n\n    @Override\n    public String toString() {\n        return String.format(\"HelloWorldBean [message=%s]\", message);\n    }\n\n}\n\n"
  },
  {
    "path": "05-spring-boot-react-full-stack-h2/restful-web-services/src/main/java/com/in28minutes/rest/basic/auth/BasicAuthenticationController.java",
    "content": "package com.in28minutes.rest.basic.auth;\nimport org.springframework.web.bind.annotation.GetMapping;\nimport org.springframework.web.bind.annotation.RestController;\n\n//Controller\n//@CrossOrigin(origins=\"http://localhost:4200\")Replace with global config\n@RestController\npublic class BasicAuthenticationController {\n\n    @GetMapping(path = \"/basicauth\")\n    public AuthenticationBean helloWorldBean() {\n        //throw new RuntimeException(\"Some Error has Happened! Contact Support at ***-***\");\n        return new AuthenticationBean(\"You are authenticated\");\n    }   \n}"
  },
  {
    "path": "05-spring-boot-react-full-stack-h2/restful-web-services/src/main/java/com/in28minutes/rest/basic/auth/SpringSecurityConfigurationBasicAuth.java",
    "content": "package com.in28minutes.rest.basic.auth;\nimport org.springframework.context.annotation.Configuration;\nimport org.springframework.http.HttpMethod;\nimport org.springframework.security.config.annotation.web.builders.HttpSecurity;\nimport org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;\nimport org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;\n\n@Configuration\n@EnableWebSecurity\npublic class SpringSecurityConfigurationBasicAuth extends WebSecurityConfigurerAdapter{\n    \n    @Override\n    protected void configure(HttpSecurity http) throws Exception {\n        http\n        .csrf().disable()   \n        .authorizeRequests()\n        .antMatchers(HttpMethod.OPTIONS,\"/**\").permitAll()\n                .anyRequest().authenticated()\n                .and()\n            //.formLogin().and()\n            .httpBasic();\n    }\n}"
  },
  {
    "path": "05-spring-boot-react-full-stack-h2/restful-web-services/src/main/java/com/in28minutes/rest/webservices/restfulwebservices/RestfulWebServicesApplication.java",
    "content": "package com.in28minutes.rest.webservices.restfulwebservices;\n\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boot.autoconfigure.SpringBootApplication;\nimport org.springframework.context.annotation.Bean;\nimport org.springframework.web.servlet.config.annotation.CorsRegistry;\nimport org.springframework.web.servlet.config.annotation.WebMvcConfigurer;\n\n@SpringBootApplication\npublic class RestfulWebServicesApplication {\n\n\t// AWS\n\t@Bean\n\tpublic WebMvcConfigurer corsConfigurer() {\n\t\treturn new WebMvcConfigurer() {\n\t\t\t@Override\n\t\t\tpublic void addCorsMappings(CorsRegistry registry) {\n\t\t\t\tregistry.addMapping(\"/**\").allowedMethods(\"*\").allowedOrigins(\"*\");\n\t\t\t}\n\t\t};\n\t}\n\n\tpublic static void main(String[] args) {\n\t\tSpringApplication.run(RestfulWebServicesApplication.class, args);\n\t}\n}\n"
  },
  {
    "path": "05-spring-boot-react-full-stack-h2/restful-web-services/src/main/java/com/in28minutes/rest/webservices/restfulwebservices/helloworld/HelloWorldBean.java",
    "content": "package com.in28minutes.rest.webservices.restfulwebservices.helloworld;\n\npublic class HelloWorldBean {\n\n\tprivate String message;\n\n\tpublic HelloWorldBean(String message) {\n\t\tthis.message = message;\n\t}\n\n\tpublic String getMessage() {\n\t\treturn message;\n\t}\n\n\tpublic void setMessage(String message) {\n\t\tthis.message = message;\n\t}\n\n\t@Override\n\tpublic String toString() {\n\t\treturn String.format(\"HelloWorldBean [message=%s]\", message);\n\t}\n\n}\n"
  },
  {
    "path": "05-spring-boot-react-full-stack-h2/restful-web-services/src/main/java/com/in28minutes/rest/webservices/restfulwebservices/helloworld/HelloWorldController.java",
    "content": "package com.in28minutes.rest.webservices.restfulwebservices.helloworld;\n\nimport org.springframework.web.bind.annotation.GetMapping;\nimport org.springframework.web.bind.annotation.PathVariable;\nimport org.springframework.web.bind.annotation.RestController;\n\n@RestController\npublic class HelloWorldController {\n\n\t@GetMapping(path = \"/hello-world\")\n\tpublic String helloWorld() {\n\t\treturn \"Hello World\";\n\t}\n\n\t@GetMapping(path = \"/hello-world-bean\")\n\tpublic HelloWorldBean helloWorldBean() {\n\t\treturn new HelloWorldBean(\"Hello World\");\n\t}\n\t\n\t///hello-world/path-variable/in28minutes\n\t@GetMapping(path = \"/hello-world/path-variable/{name}\")\n\tpublic HelloWorldBean helloWorldPathVariable(@PathVariable String name) {\n\t\treturn new HelloWorldBean(String.format(\"Hello World, %s\", name));\n\t}\n}\n"
  },
  {
    "path": "05-spring-boot-react-full-stack-h2/restful-web-services/src/main/java/com/in28minutes/rest/webservices/restfulwebservices/jwt/JWTWebSecurityConfig.java",
    "content": "package com.in28minutes.rest.webservices.restfulwebservices.jwt;\n\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.beans.factory.annotation.Value;\nimport org.springframework.context.annotation.Bean;\nimport org.springframework.context.annotation.Configuration;\nimport org.springframework.http.HttpMethod;\nimport org.springframework.security.authentication.AuthenticationManager;\nimport org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;\nimport org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;\nimport org.springframework.security.config.annotation.web.builders.HttpSecurity;\nimport org.springframework.security.config.annotation.web.builders.WebSecurity;\nimport org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;\nimport org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;\nimport org.springframework.security.config.http.SessionCreationPolicy;\nimport org.springframework.security.core.userdetails.UserDetailsService;\nimport org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;\nimport org.springframework.security.crypto.password.PasswordEncoder;\nimport org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;\n\n@Configuration\n@EnableWebSecurity\n@EnableGlobalMethodSecurity(prePostEnabled = true)\npublic class JWTWebSecurityConfig extends WebSecurityConfigurerAdapter {\n\n    @Autowired\n    private JwtUnAuthorizedResponseAuthenticationEntryPoint jwtUnAuthorizedResponseAuthenticationEntryPoint;\n\n    @Autowired\n    private UserDetailsService jwtInMemoryUserDetailsService;\n\n    @Autowired\n    private JwtTokenAuthorizationOncePerRequestFilter jwtAuthenticationTokenFilter;\n\n    @Value(\"${jwt.get.token.uri}\")\n    private String authenticationPath;\n\n    @Autowired\n    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {\n        auth\n            .userDetailsService(jwtInMemoryUserDetailsService)\n            .passwordEncoder(passwordEncoderBean());\n    }\n\n    @Bean\n    public PasswordEncoder passwordEncoderBean() {\n        return new BCryptPasswordEncoder();\n    }\n\n    @Bean\n    @Override\n    public AuthenticationManager authenticationManagerBean() throws Exception {\n        return super.authenticationManagerBean();\n    }\n\n    @Override\n    protected void configure(HttpSecurity httpSecurity) throws Exception {\n        httpSecurity\n            .csrf().disable()\n            .exceptionHandling().authenticationEntryPoint(jwtUnAuthorizedResponseAuthenticationEntryPoint).and()\n            .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and()\n            .authorizeRequests()\n            .anyRequest().authenticated();\n\n       httpSecurity\n            .addFilterBefore(jwtAuthenticationTokenFilter, UsernamePasswordAuthenticationFilter.class);\n        \n        httpSecurity\n            .headers()\n            .frameOptions().sameOrigin()  //H2 Console Needs this setting\n            .cacheControl(); //disable caching\n    }\n\n    @Override\n    public void configure(WebSecurity webSecurity) throws Exception {\n        webSecurity\n            .ignoring()\n            .antMatchers(\n                HttpMethod.POST,\n                authenticationPath\n            )\n            .antMatchers(HttpMethod.OPTIONS, \"/**\")\n            .and()\n            .ignoring()\n            .antMatchers(\n                HttpMethod.GET,\n                \"/\" //Other Stuff You want to Ignore\n            )\n            .and()\n            .ignoring()\n            .antMatchers(\"/h2-console/**/**\");//Should not be in Production!\n    }\n}\n\n"
  },
  {
    "path": "05-spring-boot-react-full-stack-h2/restful-web-services/src/main/java/com/in28minutes/rest/webservices/restfulwebservices/jwt/JwtInMemoryUserDetailsService.java",
    "content": "package com.in28minutes.rest.webservices.restfulwebservices.jwt;\n\nimport java.util.ArrayList;\nimport java.util.List;\nimport java.util.Optional;\n\nimport org.springframework.security.core.userdetails.UserDetails;\nimport org.springframework.security.core.userdetails.UserDetailsService;\nimport org.springframework.security.core.userdetails.UsernameNotFoundException;\n\n\n//This is not used!\n//@Service\npublic class JwtInMemoryUserDetailsService implements UserDetailsService {\n\n  static List<JwtUserDetails> inMemoryUserList = new ArrayList<>();\n\n  static {\n    inMemoryUserList.add(new JwtUserDetails(1L, \"in28minutes\",\n        \"$2a$10$3zHzb.Npv1hfZbLEU5qsdOju/tk2je6W6PnNnY.c1ujWPcZh4PL6e\", \"ROLE_USER_2\"));\n  }\n\n  @Override\n  public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {\n    Optional<JwtUserDetails> findFirst = inMemoryUserList.stream()\n        .filter(user -> user.getUsername().equals(username)).findFirst();\n\n    if (!findFirst.isPresent()) {\n      throw new UsernameNotFoundException(String.format(\"USER_NOT_FOUND '%s'.\", username));\n    }\n\n    return findFirst.get();\n  }\n\n}\n"
  },
  {
    "path": "05-spring-boot-react-full-stack-h2/restful-web-services/src/main/java/com/in28minutes/rest/webservices/restfulwebservices/jwt/JwtTokenAuthorizationOncePerRequestFilter.java",
    "content": "package com.in28minutes.rest.webservices.restfulwebservices.jwt;\n\nimport java.io.IOException;\n\nimport javax.servlet.FilterChain;\nimport javax.servlet.ServletException;\nimport javax.servlet.http.HttpServletRequest;\nimport javax.servlet.http.HttpServletResponse;\n\nimport org.slf4j.Logger;\nimport org.slf4j.LoggerFactory;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.beans.factory.annotation.Value;\nimport org.springframework.security.authentication.UsernamePasswordAuthenticationToken;\nimport org.springframework.security.core.context.SecurityContextHolder;\nimport org.springframework.security.core.userdetails.UserDetails;\nimport org.springframework.security.core.userdetails.UserDetailsService;\nimport org.springframework.security.web.authentication.WebAuthenticationDetailsSource;\nimport org.springframework.stereotype.Component;\nimport org.springframework.web.filter.OncePerRequestFilter;\n\nimport io.jsonwebtoken.ExpiredJwtException;\n\n@Component\npublic class JwtTokenAuthorizationOncePerRequestFilter extends OncePerRequestFilter {\n\n    private final Logger logger = LoggerFactory.getLogger(this.getClass());\n\n    @Autowired\n    private UserDetailsService jwtInMemoryUserDetailsService;\n    \n    @Autowired\n    private JwtTokenUtil jwtTokenUtil;\n    \n    @Value(\"${jwt.http.request.header}\")\n    private String tokenHeader;\n\n    @Override\n    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws ServletException, IOException {\n        logger.debug(\"Authentication Request For '{}'\", request.getRequestURL());\n\n        final String requestTokenHeader = request.getHeader(this.tokenHeader);\n\n        String username = null;\n        String jwtToken = null;\n        if (requestTokenHeader != null && requestTokenHeader.startsWith(\"Bearer \")) {\n            jwtToken = requestTokenHeader.substring(7);\n            try {\n                username = jwtTokenUtil.getUsernameFromToken(jwtToken);\n            } catch (IllegalArgumentException e) {\n                logger.error(\"JWT_TOKEN_UNABLE_TO_GET_USERNAME\", e);\n            } catch (ExpiredJwtException e) {\n                logger.warn(\"JWT_TOKEN_EXPIRED\", e);\n            }\n        } else {\n            logger.warn(\"JWT_TOKEN_DOES_NOT_START_WITH_BEARER_STRING\");\n        }\n\n        logger.debug(\"JWT_TOKEN_USERNAME_VALUE '{}'\", username);\n        if (username != null && SecurityContextHolder.getContext().getAuthentication() == null) {\n\n            UserDetails userDetails = this.jwtInMemoryUserDetailsService.loadUserByUsername(username);\n\n            if (jwtTokenUtil.validateToken(jwtToken, userDetails)) {\n                UsernamePasswordAuthenticationToken usernamePasswordAuthenticationToken = new UsernamePasswordAuthenticationToken(userDetails, null, userDetails.getAuthorities());\n                usernamePasswordAuthenticationToken.setDetails(new WebAuthenticationDetailsSource().buildDetails(request));\n                SecurityContextHolder.getContext().setAuthentication(usernamePasswordAuthenticationToken);\n            }\n        }\n\n        chain.doFilter(request, response);\n    }\n}\n\n\n"
  },
  {
    "path": "05-spring-boot-react-full-stack-h2/restful-web-services/src/main/java/com/in28minutes/rest/webservices/restfulwebservices/jwt/JwtTokenUtil.java",
    "content": "package com.in28minutes.rest.webservices.restfulwebservices.jwt;\n\nimport java.io.Serializable;\nimport java.util.Date;\nimport java.util.HashMap;\nimport java.util.Map;\nimport java.util.function.Function;\n\nimport org.springframework.beans.factory.annotation.Value;\nimport org.springframework.security.core.userdetails.UserDetails;\nimport org.springframework.stereotype.Component;\n\nimport io.jsonwebtoken.Claims;\nimport io.jsonwebtoken.Clock;\nimport io.jsonwebtoken.Jwts;\nimport io.jsonwebtoken.SignatureAlgorithm;\nimport io.jsonwebtoken.impl.DefaultClock;\n\n@Component\npublic class JwtTokenUtil implements Serializable {\n\n  static final String CLAIM_KEY_USERNAME = \"sub\";\n  static final String CLAIM_KEY_CREATED = \"iat\";\n  private static final long serialVersionUID = -3301605591108950415L;\n  private Clock clock = DefaultClock.INSTANCE;\n\n  @Value(\"${jwt.signing.key.secret}\")\n  private String secret;\n\n  @Value(\"${jwt.token.expiration.in.seconds}\")\n  private Long expiration;\n\n  public String getUsernameFromToken(String token) {\n    return getClaimFromToken(token, Claims::getSubject);\n  }\n\n  public Date getIssuedAtDateFromToken(String token) {\n    return getClaimFromToken(token, Claims::getIssuedAt);\n  }\n\n  public Date getExpirationDateFromToken(String token) {\n    return getClaimFromToken(token, Claims::getExpiration);\n  }\n\n  public <T> T getClaimFromToken(String token, Function<Claims, T> claimsResolver) {\n    final Claims claims = getAllClaimsFromToken(token);\n    return claimsResolver.apply(claims);\n  }\n\n  private Claims getAllClaimsFromToken(String token) {\n    return Jwts.parser().setSigningKey(secret).parseClaimsJws(token).getBody();\n  }\n\n  private Boolean isTokenExpired(String token) {\n    final Date expiration = getExpirationDateFromToken(token);\n    return expiration.before(clock.now());\n  }\n\n  private Boolean ignoreTokenExpiration(String token) {\n    // here you specify tokens, for that the expiration is ignored\n    return false;\n  }\n\n  public String generateToken(UserDetails userDetails) {\n    Map<String, Object> claims = new HashMap<>();\n    return doGenerateToken(claims, userDetails.getUsername());\n  }\n\n  private String doGenerateToken(Map<String, Object> claims, String subject) {\n    final Date createdDate = clock.now();\n    final Date expirationDate = calculateExpirationDate(createdDate);\n\n    return Jwts.builder().setClaims(claims).setSubject(subject).setIssuedAt(createdDate)\n        .setExpiration(expirationDate).signWith(SignatureAlgorithm.HS512, secret).compact();\n  }\n\n  public Boolean canTokenBeRefreshed(String token) {\n    return (!isTokenExpired(token) || ignoreTokenExpiration(token));\n  }\n\n  public String refreshToken(String token) {\n    final Date createdDate = clock.now();\n    final Date expirationDate = calculateExpirationDate(createdDate);\n\n    final Claims claims = getAllClaimsFromToken(token);\n    claims.setIssuedAt(createdDate);\n    claims.setExpiration(expirationDate);\n\n    return Jwts.builder().setClaims(claims).signWith(SignatureAlgorithm.HS512, secret).compact();\n  }\n\n  public Boolean validateToken(String token, UserDetails userDetails) {\n    JwtUserDetails user = (JwtUserDetails) userDetails;\n    final String username = getUsernameFromToken(token);\n    return (username.equals(user.getUsername()) && !isTokenExpired(token));\n  }\n\n  private Date calculateExpirationDate(Date createdDate) {\n    return new Date(createdDate.getTime() + expiration * 1000);\n  }\n}\n\n"
  },
  {
    "path": "05-spring-boot-react-full-stack-h2/restful-web-services/src/main/java/com/in28minutes/rest/webservices/restfulwebservices/jwt/JwtUnAuthorizedResponseAuthenticationEntryPoint.java",
    "content": "package com.in28minutes.rest.webservices.restfulwebservices.jwt;\n\nimport java.io.IOException;\nimport java.io.Serializable;\n\nimport javax.servlet.http.HttpServletRequest;\nimport javax.servlet.http.HttpServletResponse;\n\nimport org.springframework.security.core.AuthenticationException;\nimport org.springframework.security.web.AuthenticationEntryPoint;\nimport org.springframework.stereotype.Component;\n\n@Component\npublic class JwtUnAuthorizedResponseAuthenticationEntryPoint implements AuthenticationEntryPoint, Serializable {\n\n\tprivate static final long serialVersionUID = -8970718410437077606L;\n\n\t@Override\n\tpublic void commence(HttpServletRequest request, HttpServletResponse response,\n\t\t\tAuthenticationException authException) throws IOException {\n\t\tresponse.sendError(HttpServletResponse.SC_UNAUTHORIZED,\n\t\t\t\t\"You would need to provide the Jwt Token to Access This resource\");\n\t}\n}"
  },
  {
    "path": "05-spring-boot-react-full-stack-h2/restful-web-services/src/main/java/com/in28minutes/rest/webservices/restfulwebservices/jwt/JwtUserDetails.java",
    "content": "package com.in28minutes.rest.webservices.restfulwebservices.jwt;\n\nimport java.util.ArrayList;\nimport java.util.Collection;\nimport java.util.List;\n\nimport org.springframework.security.core.GrantedAuthority;\nimport org.springframework.security.core.authority.SimpleGrantedAuthority;\nimport org.springframework.security.core.userdetails.UserDetails;\n\nimport com.fasterxml.jackson.annotation.JsonIgnore;\n\npublic class JwtUserDetails implements UserDetails {\n\n  private static final long serialVersionUID = 5155720064139820502L;\n\n  private final Long id;\n  private final String username;\n  private final String password;\n  private final Collection<? extends GrantedAuthority> authorities;\n\n  public JwtUserDetails(Long id, String username, String password, String role) {\n    this.id = id;\n    this.username = username;\n    this.password = password;\n\n    List<SimpleGrantedAuthority> authorities = new ArrayList<SimpleGrantedAuthority>();\n    authorities.add(new SimpleGrantedAuthority(role));\n\n    this.authorities = authorities;\n  }\n\n  @JsonIgnore\n  public Long getId() {\n    return id;\n  }\n\n  @Override\n  public String getUsername() {\n    return username;\n  }\n\n  @JsonIgnore\n  @Override\n  public boolean isAccountNonExpired() {\n    return true;\n  }\n\n  @JsonIgnore\n  @Override\n  public boolean isAccountNonLocked() {\n    return true;\n  }\n\n  @JsonIgnore\n  @Override\n  public boolean isCredentialsNonExpired() {\n    return true;\n  }\n\n  @JsonIgnore\n  @Override\n  public String getPassword() {\n    return password;\n  }\n\n  @Override\n  public Collection<? extends GrantedAuthority> getAuthorities() {\n    return authorities;\n  }\n\n  @Override\n  public boolean isEnabled() {\n    return true;\n  }\n\n}\n\n\n"
  },
  {
    "path": "05-spring-boot-react-full-stack-h2/restful-web-services/src/main/java/com/in28minutes/rest/webservices/restfulwebservices/jwt/JwtUserDetailsService.java",
    "content": "package com.in28minutes.rest.webservices.restfulwebservices.jwt;\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.security.core.authority.SimpleGrantedAuthority;\nimport org.springframework.security.core.userdetails.UserDetails;\nimport org.springframework.security.core.userdetails.UserDetailsService;\nimport org.springframework.security.core.userdetails.UsernameNotFoundException;\nimport org.springframework.stereotype.Service;\n\n@Service\npublic class JwtUserDetailsService implements UserDetailsService {\n\n\t@Autowired\n\tprivate UserRepository userRepository;\n\n\t@Override\n\tpublic UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {\n\t\tUser user = userRepository.findByUsername(username);\n\n\t\tif (user == null) {\n\t\t\tthrow new UsernameNotFoundException(String.format(\"USER_NOT_FOUND '%s'.\", username));\n\t\t} else {\n\t\t\treturn create(user);\n\t\t}\n\t}\n\n\tpublic static JwtUserDetails create(User user) {\n\t\treturn new JwtUserDetails(user.getId(), user.getUsername(), user.getPassword(), user.getRole());\n\t}\n}\n"
  },
  {
    "path": "05-spring-boot-react-full-stack-h2/restful-web-services/src/main/java/com/in28minutes/rest/webservices/restfulwebservices/jwt/User.java",
    "content": "package com.in28minutes.rest.webservices.restfulwebservices.jwt;\nimport javax.persistence.Column;\nimport javax.persistence.Entity;\nimport javax.persistence.GeneratedValue;\nimport javax.persistence.GenerationType;\nimport javax.persistence.Id;\nimport javax.persistence.SequenceGenerator;\nimport javax.persistence.Table;\nimport javax.validation.constraints.NotNull;\nimport javax.validation.constraints.Size;\n\n@Entity\n@Table(name = \"USER\")\npublic class User {\n\n    @Id\n    @Column(name = \"ID\")\n    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = \"user_seq\")\n    @SequenceGenerator(name = \"user_seq\", sequenceName = \"user_seq\", allocationSize = 1)\n    private Long id;\n\n    @Column(name = \"USERNAME\", length = 50, unique = true)\n    @NotNull\n    @Size(min = 4, max = 50)\n    private String username;\n\n    @Column(name = \"PASSWORD\", length = 100)\n    @Size(min = 4, max = 100)\n    @NotNull\n    private String password;\n\n    @Column(name = \"ROLE\", length = 100)\n    @Size(min = 4, max = 100)\n    @NotNull\n    private String role;\n    \n    public Long getId() {\n        return id;\n    }\n\n    public void setId(Long id) {\n        this.id = id;\n    }\n\n    public String getUsername() {\n        return username;\n    }\n\n    public void setUsername(String username) {\n        this.username = username;\n    }\n\n    public String getPassword() {\n        return password;\n    }\n\n    public void setPassword(String password) {\n        this.password = password;\n    }\n\n\tpublic String getRole() {\n\t\treturn role;\n\t}\n\n\tpublic void setRole(String role) {\n\t\tthis.role = role;\n\t}\n    \n \n}"
  },
  {
    "path": "05-spring-boot-react-full-stack-h2/restful-web-services/src/main/java/com/in28minutes/rest/webservices/restfulwebservices/jwt/UserRepository.java",
    "content": "package com.in28minutes.rest.webservices.restfulwebservices.jwt;\n\nimport org.springframework.data.jpa.repository.JpaRepository;\n\npublic interface UserRepository extends JpaRepository<User, Long> {\n\tUser findByUsername(String username);\n}\n"
  },
  {
    "path": "05-spring-boot-react-full-stack-h2/restful-web-services/src/main/java/com/in28minutes/rest/webservices/restfulwebservices/jwt/resource/AuthenticationException.java",
    "content": "package com.in28minutes.rest.webservices.restfulwebservices.jwt.resource;\npublic class AuthenticationException extends RuntimeException {\n    public AuthenticationException(String message, Throwable cause) {\n        super(message, cause);\n    }\n}\n\n"
  },
  {
    "path": "05-spring-boot-react-full-stack-h2/restful-web-services/src/main/java/com/in28minutes/rest/webservices/restfulwebservices/jwt/resource/JwtAuthenticationRestController.java",
    "content": "package com.in28minutes.rest.webservices.restfulwebservices.jwt.resource;\n\nimport java.util.Objects;\n\nimport javax.servlet.http.HttpServletRequest;\n\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.beans.factory.annotation.Value;\nimport org.springframework.http.HttpStatus;\nimport org.springframework.http.ResponseEntity;\nimport org.springframework.security.authentication.AuthenticationManager;\nimport org.springframework.security.authentication.BadCredentialsException;\nimport org.springframework.security.authentication.DisabledException;\nimport org.springframework.security.authentication.UsernamePasswordAuthenticationToken;\nimport org.springframework.security.core.userdetails.UserDetails;\nimport org.springframework.security.core.userdetails.UserDetailsService;\nimport org.springframework.web.bind.annotation.ExceptionHandler;\nimport org.springframework.web.bind.annotation.RequestBody;\nimport org.springframework.web.bind.annotation.RequestMapping;\nimport org.springframework.web.bind.annotation.RequestMethod;\nimport org.springframework.web.bind.annotation.RestController;\n\nimport com.in28minutes.rest.webservices.restfulwebservices.jwt.JwtTokenUtil;\nimport com.in28minutes.rest.webservices.restfulwebservices.jwt.JwtUserDetails;\n\n@RestController\n//@CrossOrigin(origins=\"http://localhost:4200\")Replace with global config\npublic class JwtAuthenticationRestController {\n\n  @Value(\"${jwt.http.request.header}\")\n  private String tokenHeader;\n\n  @Autowired\n  private AuthenticationManager authenticationManager;\n\n  @Autowired\n  private JwtTokenUtil jwtTokenUtil;\n\n  @Autowired\n  private UserDetailsService jwtInMemoryUserDetailsService;\n\n  @RequestMapping(value = \"${jwt.get.token.uri}\", method = RequestMethod.POST)\n  public ResponseEntity<?> createAuthenticationToken(@RequestBody JwtTokenRequest authenticationRequest)\n      throws AuthenticationException {\n\n    authenticate(authenticationRequest.getUsername(), authenticationRequest.getPassword());\n\n    final UserDetails userDetails = jwtInMemoryUserDetailsService.loadUserByUsername(authenticationRequest.getUsername());\n\n    final String token = jwtTokenUtil.generateToken(userDetails);\n\n    return ResponseEntity.ok(new JwtTokenResponse(token));\n  }\n\n  @RequestMapping(value = \"${jwt.refresh.token.uri}\", method = RequestMethod.GET)\n  public ResponseEntity<?> refreshAndGetAuthenticationToken(HttpServletRequest request) {\n    String authToken = request.getHeader(tokenHeader);\n    final String token = authToken.substring(7);\n    String username = jwtTokenUtil.getUsernameFromToken(token);\n    JwtUserDetails user = (JwtUserDetails) jwtInMemoryUserDetailsService.loadUserByUsername(username);\n\n    if (jwtTokenUtil.canTokenBeRefreshed(token)) {\n      String refreshedToken = jwtTokenUtil.refreshToken(token);\n      return ResponseEntity.ok(new JwtTokenResponse(refreshedToken));\n    } else {\n      return ResponseEntity.badRequest().body(null);\n    }\n  }\n\n  @ExceptionHandler({ AuthenticationException.class })\n  public ResponseEntity<String> handleAuthenticationException(AuthenticationException e) {\n    return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body(e.getMessage());\n  }\n\n  private void authenticate(String username, String password) {\n    Objects.requireNonNull(username);\n    Objects.requireNonNull(password);\n\n    try {\n      authenticationManager.authenticate(new UsernamePasswordAuthenticationToken(username, password));\n    } catch (DisabledException e) {\n      throw new AuthenticationException(\"USER_DISABLED\", e);\n    } catch (BadCredentialsException e) {\n      throw new AuthenticationException(\"INVALID_CREDENTIALS\", e);\n    }\n  }\n}\n\n"
  },
  {
    "path": "05-spring-boot-react-full-stack-h2/restful-web-services/src/main/java/com/in28minutes/rest/webservices/restfulwebservices/jwt/resource/JwtTokenRequest.java",
    "content": "package com.in28minutes.rest.webservices.restfulwebservices.jwt.resource;\n\nimport java.io.Serializable;\n\npublic class  JwtTokenRequest implements Serializable {\n  \n  private static final long serialVersionUID = -5616176897013108345L;\n\n  private String username;\n    private String password;\n\n    public JwtTokenRequest() {\n        super();\n    }\n\n    public JwtTokenRequest(String username, String password) {\n        this.setUsername(username);\n        this.setPassword(password);\n    }\n\n    public String getUsername() {\n        return this.username;\n    }\n\n    public void setUsername(String username) {\n        this.username = username;\n    }\n\n    public String getPassword() {\n        return this.password;\n    }\n\n    public void setPassword(String password) {\n        this.password = password;\n    }\n}\n\n"
  },
  {
    "path": "05-spring-boot-react-full-stack-h2/restful-web-services/src/main/java/com/in28minutes/rest/webservices/restfulwebservices/jwt/resource/JwtTokenResponse.java",
    "content": "package com.in28minutes.rest.webservices.restfulwebservices.jwt.resource;\n\nimport java.io.Serializable;\n\npublic class JwtTokenResponse implements Serializable {\n\n  private static final long serialVersionUID = 8317676219297719109L;\n\n  private final String token;\n\n    public JwtTokenResponse(String token) {\n        this.token = token;\n    }\n\n    public String getToken() {\n        return this.token;\n    }\n}"
  },
  {
    "path": "05-spring-boot-react-full-stack-h2/restful-web-services/src/main/java/com/in28minutes/rest/webservices/restfulwebservices/todo/Todo.java",
    "content": "package com.in28minutes.rest.webservices.restfulwebservices.todo;\n\nimport java.util.Date;\n\nimport javax.persistence.Entity;\nimport javax.persistence.GeneratedValue;\nimport javax.persistence.Id;\n\n@Entity\npublic class Todo {\n\t@Id\n\t@GeneratedValue\n\tprivate Long id;\n\tprivate String username;\n\tprivate String description;\n\tprivate Date targetDate;\n\tprivate boolean isDone;\n\t\n\tpublic Todo() {\n\t\t\n\t}\n\n\tpublic Todo(long id, String username, String description, Date targetDate, boolean isDone) {\n\t\tsuper();\n\t\tthis.id = id;\n\t\tthis.username = username;\n\t\tthis.description = description;\n\t\tthis.targetDate = targetDate;\n\t\tthis.isDone = isDone;\n\t}\n\n\tpublic Long getId() {\n\t\treturn id;\n\t}\n\n\tpublic void setId(Long id) {\n\t\tthis.id = id;\n\t}\n\n\tpublic String getUsername() {\n\t\treturn username;\n\t}\n\n\tpublic void setUsername(String username) {\n\t\tthis.username = username;\n\t}\n\n\tpublic String getDescription() {\n\t\treturn description;\n\t}\n\n\tpublic void setDescription(String description) {\n\t\tthis.description = description;\n\t}\n\n\tpublic Date getTargetDate() {\n\t\treturn targetDate;\n\t}\n\n\tpublic void setTargetDate(Date targetDate) {\n\t\tthis.targetDate = targetDate;\n\t}\n\n\tpublic boolean isDone() {\n\t\treturn isDone;\n\t}\n\n\tpublic void setDone(boolean isDone) {\n\t\tthis.isDone = isDone;\n\t}\n\n\t@Override\n\tpublic int hashCode() {\n\t\tfinal int prime = 31;\n\t\tint result = 1;\n\t\tresult = prime * result + (int) (id ^ (id >>> 32));\n\t\treturn result;\n\t}\n\n\t@Override\n\tpublic boolean equals(Object obj) {\n\t\tif (this == obj)\n\t\t\treturn true;\n\t\tif (obj == null)\n\t\t\treturn false;\n\t\tif (getClass() != obj.getClass())\n\t\t\treturn false;\n\t\tTodo other = (Todo) obj;\n\t\tif (id != other.id)\n\t\t\treturn false;\n\t\treturn true;\n\t}\n\n\t\n}"
  },
  {
    "path": "05-spring-boot-react-full-stack-h2/restful-web-services/src/main/java/com/in28minutes/rest/webservices/restfulwebservices/todo/TodoJpaRepository.java",
    "content": "package com.in28minutes.rest.webservices.restfulwebservices.todo;\n\nimport java.util.List;\n\nimport org.springframework.data.jpa.repository.JpaRepository;\nimport org.springframework.stereotype.Repository;\n\n@Repository\npublic interface TodoJpaRepository extends JpaRepository<Todo, Long>{\n\tList<Todo> findByUsername(String username);\n}"
  },
  {
    "path": "05-spring-boot-react-full-stack-h2/restful-web-services/src/main/java/com/in28minutes/rest/webservices/restfulwebservices/todo/TodoJpaResource.java",
    "content": "package com.in28minutes.rest.webservices.restfulwebservices.todo;\n\nimport java.net.URI;\nimport java.util.List;\n\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.http.HttpStatus;\nimport org.springframework.http.ResponseEntity;\nimport org.springframework.web.bind.annotation.DeleteMapping;\nimport org.springframework.web.bind.annotation.GetMapping;\nimport org.springframework.web.bind.annotation.PathVariable;\nimport org.springframework.web.bind.annotation.PostMapping;\nimport org.springframework.web.bind.annotation.PutMapping;\nimport org.springframework.web.bind.annotation.RequestBody;\nimport org.springframework.web.bind.annotation.RestController;\nimport org.springframework.web.servlet.support.ServletUriComponentsBuilder;\n\n@RestController\npublic class TodoJpaResource {\n\t\n\t@Autowired\n\tprivate TodoJpaRepository todoJpaRepository;\n\n\t\n\t@GetMapping(\"/jpa/users/{username}/todos\")\n\tpublic List<Todo> getAllTodos(@PathVariable String username){\n\t\treturn todoJpaRepository.findByUsername(username);\n\t\t//return todoService.findAll();\n\t}\n\n\t@GetMapping(\"/jpa/users/{username}/todos/{id}\")\n\tpublic Todo getTodo(@PathVariable String username, @PathVariable long id){\n\t\treturn todoJpaRepository.findById(id).get();\n\t\t//return todoService.findById(id);\n\t}\n\n\t// DELETE /users/{username}/todos/{id}\n\t@DeleteMapping(\"/jpa/users/{username}/todos/{id}\")\n\tpublic ResponseEntity<Void> deleteTodo(\n\t\t\t@PathVariable String username, @PathVariable long id) {\n\n\t\ttodoJpaRepository.deleteById(id);\n\n\t\treturn ResponseEntity.noContent().build();\n\t}\n\t\n\n\t//Edit/Update a Todo\n\t//PUT /users/{user_name}/todos/{todo_id}\n\t@PutMapping(\"/jpa/users/{username}/todos/{id}\")\n\tpublic ResponseEntity<Todo> updateTodo(\n\t\t\t@PathVariable String username,\n\t\t\t@PathVariable long id, @RequestBody Todo todo){\n\t\t\n\t\ttodo.setUsername(username);\n\t\t\n\t\tTodo todoUpdated = todoJpaRepository.save(todo);\n\t\t\n\t\treturn new ResponseEntity<Todo>(todo, HttpStatus.OK);\n\t}\n\t\n\t@PostMapping(\"/jpa/users/{username}/todos\")\n\tpublic ResponseEntity<Void> createTodo(\n\t\t\t@PathVariable String username, @RequestBody Todo todo){\n\t\t\n\t\ttodo.setUsername(username);\n\t\t\n\t\tTodo createdTodo = todoJpaRepository.save(todo);\n\t\t\n\t\t//Location\n\t\t//Get current resource url\n\t\t///{id}\n\t\tURI uri = ServletUriComponentsBuilder.fromCurrentRequest()\n\t\t\t\t.path(\"/{id}\").buildAndExpand(createdTodo.getId()).toUri();\n\t\t\n\t\treturn ResponseEntity.created(uri).build();\n\t}\n\t\t\n}\n"
  },
  {
    "path": "05-spring-boot-react-full-stack-h2/restful-web-services/src/main/resources/application.properties",
    "content": "logging.level.org.springframework = info\n\n#spring.security.user.name=in28minutes\n#spring.security.user.password=dummy\n\njwt.signing.key.secret=mySecret\njwt.get.token.uri=/authenticate\njwt.refresh.token.uri=/refresh\njwt.http.request.header=Authorization\njwt.token.expiration.in.seconds=604800\n\nspring.jpa.show-sql=true\nspring.h2.console.enabled=true\n\n#AWS\nserver.port = 5000\n\n#eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJpbjI4bWludXRlcyIsImV4cCI6MTU2Mjg0ODAwMCwiaWF0IjoxNTYyMjQzMjAwfQ.Nmix4DqNSB13ufoy845GUETluidrp9afwafdTVtfKxr4UkUYb75mfjLHY2rD7BVDEqREoCtguTnoV3ISrdn6Eg\n"
  },
  {
    "path": "05-spring-boot-react-full-stack-h2/restful-web-services/src/main/resources/data.sql",
    "content": "/*https://www.browserling.com/tools/bcrypt Use Rounds 10*/\n\n/*in28minutes/dummy*/\nINSERT INTO USER (ID, USERNAME, PASSWORD, ROLE) \nVALUES (1, 'in28minutes', '$2a$10$3zHzb.Npv1hfZbLEU5qsdOju/tk2je6W6PnNnY.c1ujWPcZh4PL6e','ROLE_USER');\n\n/*in28minutes2/mypassword*/\nINSERT INTO USER (ID, USERNAME, PASSWORD, ROLE) \nVALUES (2, 'in28minutes2', '$2a$10$i9AckmxMkb4yKtLCdxeQheCm2pXWB3qZ2G189/Ph/DUci1DvLO.Rq','ROLE_USER');\n\n\n\n\ninsert into todo(id, username,description,target_date,is_done)\nvalues(10001, 'in28minutes', 'Learn JPA', sysdate(), false);\n\ninsert into todo(id, username,description,target_date,is_done)\nvalues(10002, 'in28minutes', 'Learn Data JPA', sysdate(), false);\n\ninsert into todo(id, username,description,target_date,is_done)\nvalues(10003, 'in28minutes', 'Learn Microservices', sysdate(), false);"
  },
  {
    "path": "05-spring-boot-react-full-stack-h2/restful-web-services/src/test/java/com/in28minutes/rest/webservices/restfulwebservices/RestfulWebServicesApplicationTests.java",
    "content": "package com.in28minutes.rest.webservices.restfulwebservices;\n\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.springframework.boot.test.context.SpringBootTest;\nimport org.springframework.test.context.junit4.SpringRunner;\n\n@RunWith(SpringRunner.class)\n@SpringBootTest\npublic class RestfulWebServicesApplicationTests {\n\n\t@Test\n\tpublic void contextLoads() {\n\t}\n\n}\n"
  },
  {
    "path": "06-todo-rest-api-h2-containerized/Dockerfile",
    "content": "FROM openjdk:8-jdk-alpine\nVOLUME /tmp\nEXPOSE 5000\nADD target/*.jar app.jar\nENV JAVA_OPTS=\"\"\nENTRYPOINT [ \"sh\", \"-c\", \"java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar\" ]"
  },
  {
    "path": "06-todo-rest-api-h2-containerized/Dockerrun.aws.json",
    "content": "{\n\t\"AWSEBDockerrunVersion\": \"1\",\n\t\"Image\": {\n\t\t\"Name\": \"in28min/todo-rest-api-h2:1.0.0.RELEASE\",\n\t\t\"Update\": \"true\"\n\t},\n\t\"Ports\": [\n\t\t{\n\t\t\t\"ContainerPort\": \"5000\"\n\t\t}\n\t]\n}"
  },
  {
    "path": "06-todo-rest-api-h2-containerized/buildx-commands.md",
    "content": "# /Ranga/git/01.udemy-course-repos/deploy-spring-boot-aws-eb/06-todo-rest-api-h2-containerized\n```\ndocker buildx build \\\n--platform linux/amd64,linux/arm64 \\\n-t in28min/todo-rest-api-h2:1.0.0.RELEASE \\\n--push \\\n.\n```"
  },
  {
    "path": "06-todo-rest-api-h2-containerized/pom.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n\txmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n\txsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\">\n\t<modelVersion>4.0.0</modelVersion>\n\n\t<groupId>com.in28minutes.rest.webservices</groupId>\n\t<artifactId>todo-rest-api-h2</artifactId>\n\t<version>1.0.0.RELEASE</version>\n\t<packaging>jar</packaging>\n\t<name>06-todo-rest-api-h2-containerized</name>\n\n\t<parent>\n\t\t<groupId>org.springframework.boot</groupId>\n\t\t<artifactId>spring-boot-starter-parent</artifactId>\n\t\t<version>2.1.0.RELEASE</version>\n\t\t<relativePath /> <!-- lookup parent from repository -->\n\t</parent>\n\n\t<properties>\n\t\t<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>\n\t\t<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>\n\t\t<java.version>1.8</java.version>\n\t</properties>\n\n\t<dependencies>\n\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t<artifactId>spring-boot-starter-data-jpa</artifactId>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t<artifactId>spring-boot-starter-web</artifactId>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t<artifactId>spring-boot-devtools</artifactId>\n\t\t\t<scope>runtime</scope>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>com.h2database</groupId>\n\t\t\t<artifactId>h2</artifactId>\n\t\t\t<scope>runtime</scope>\n\t\t</dependency>\n\n\n\t\t<dependency>\n\t\t\t<groupId>javax.xml.bind</groupId>\n\t\t\t<artifactId>jaxb-api</artifactId>\n\t\t\t<version>2.3.0</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>com.sun.xml.bind</groupId>\n\t\t\t<artifactId>jaxb-impl</artifactId>\n\t\t\t<version>2.3.0</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>org.glassfish.jaxb</groupId>\n\t\t\t<artifactId>jaxb-runtime</artifactId>\n\t\t\t<version>2.3.0</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>javax.activation</groupId>\n\t\t\t<artifactId>activation</artifactId>\n\t\t\t<version>1.1.1</version>\n\t\t</dependency>\n\n\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t<artifactId>spring-boot-starter-test</artifactId>\n\t\t\t<scope>test</scope>\n\t\t</dependency>\n\t</dependencies>\n\n\t<build>\n\t\t<plugins>\n\t\t\t<plugin>\n\t\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t\t<artifactId>spring-boot-maven-plugin</artifactId>\n\t\t\t</plugin>\n\t\t\t\n\t\t\t<!-- Docker -->\n\t\t\t<plugin>\n\t\t\t\t<groupId>com.spotify</groupId>\n\t\t\t\t<artifactId>dockerfile-maven-plugin</artifactId>\n\t\t\t\t<version>1.4.10</version>\n\t\t\t\t<executions>\n\t\t\t\t\t<execution>\n\t\t\t\t\t\t<id>default</id>\n\t\t\t\t\t\t<goals>\n\t\t\t\t\t\t\t<goal>build</goal>\n\t\t\t\t\t\t\t<!-- <goal>push</goal> --> \n\t\t\t\t\t\t</goals>\n\t\t\t\t\t</execution>\n\t\t\t\t</executions>\n\t\t\t\t<configuration>\n\t\t\t\t\t<repository>in28min/${project.artifactId}</repository>\n\t\t\t\t\t<tag>${project.version}</tag>\n\t\t\t\t\t<skipDockerInfo>true</skipDockerInfo>\n\t\t\t\t</configuration>\n\t\t\t</plugin>\n\t\t</plugins>\n\t</build>\n\n\t<repositories>\n\t\t<repository>\n\t\t\t<id>spring-snapshots</id>\n\t\t\t<name>Spring Snapshots</name>\n\t\t\t<url>https://repo.spring.io/snapshot</url>\n\t\t\t<snapshots>\n\t\t\t\t<enabled>true</enabled>\n\t\t\t</snapshots>\n\t\t</repository>\n\t\t<repository>\n\t\t\t<id>spring-milestones</id>\n\t\t\t<name>Spring Milestones</name>\n\t\t\t<url>https://repo.spring.io/milestone</url>\n\t\t\t<snapshots>\n\t\t\t\t<enabled>false</enabled>\n\t\t\t</snapshots>\n\t\t</repository>\n\t</repositories>\n\n\t<pluginRepositories>\n\t\t<pluginRepository>\n\t\t\t<id>spring-snapshots</id>\n\t\t\t<name>Spring Snapshots</name>\n\t\t\t<url>https://repo.spring.io/snapshot</url>\n\t\t\t<snapshots>\n\t\t\t\t<enabled>true</enabled>\n\t\t\t</snapshots>\n\t\t</pluginRepository>\n\t\t<pluginRepository>\n\t\t\t<id>spring-milestones</id>\n\t\t\t<name>Spring Milestones</name>\n\t\t\t<url>https://repo.spring.io/milestone</url>\n\t\t\t<snapshots>\n\t\t\t\t<enabled>false</enabled>\n\t\t\t</snapshots>\n\t\t</pluginRepository>\n\t</pluginRepositories>\n</project>"
  },
  {
    "path": "06-todo-rest-api-h2-containerized/readme.md",
    "content": "# Todo and Hello World Rest APIs Connecting to H2 In memory database running on port 5000\n\nRun com.in28minutes.rest.webservices.restfulwebservices.RestfulWebServicesApplication as a Java Application.\n\n\n## Containerization\n\n### Troubleshooting\n\n- Problem - Caused by: com.spotify.docker.client.shaded.javax.ws.rs.ProcessingException: java.io.IOException: No such file or directory\n- Solution - Check if docker is up and running!\n- Problem - Error creating the Docker image on MacOS - java.io.IOException: Cannot run program “docker-credential-osxkeychain”: error=2, No such file or directory\n- Solution - https://medium.com/@dakshika/error-creating-the-docker-image-on-macos-wso2-enterprise-integrator-tooling-dfb5b537b44e\n\n### Creating Containers\n\n\n- mvn package\n- docker run in28min/todo-rest-api-h2:0.0.1-SNAPSHOT\n- docker run -p 5000:5000 in28min/todo-rest-api-h2:0.0.1-SNAPSHOT\n- docker run -p 5000:5000 in28min/todo-rest-api-h2:1.0.0.RELEASE\n\nTo test execute API at http://localhost:5000/users/in28minutes/todos.\n\n```\ndocker login\n```\n\n\n## Hello World URLS\n\n- http://localhost:5000/hello-world\n\n```txt\nHello World\n```\n\n- http://localhost:5000/hello-world-bean\n\n```json\n{\"message\":\"Hello World - Changed\"}\n```\n\n- http://localhost:5000/hello-world/path-variable/in28minutes\n\n```json\n{\"message\":\"Hello World, in28minutes\"}\n```\n\n\n## Todo JPA Resource URLs\n\n- GET - http://localhost:5000/jpa/users/in28minutes/todos\n\n```\n[\n  {\n    \"id\": 10001,\n    \"username\": \"in28minutes\",\n    \"description\": \"Learn JPA\",\n    \"targetDate\": \"2019-06-27T06:30:30.696+0000\",\n    \"done\": false\n  },\n  {\n    \"id\": 10002,\n    \"username\": \"in28minutes\",\n    \"description\": \"Learn Data JPA\",\n    \"targetDate\": \"2019-06-27T06:30:30.700+0000\",\n    \"done\": false\n  },\n  {\n    \"id\": 10003,\n    \"username\": \"in28minutes\",\n    \"description\": \"Learn Microservices\",\n    \"targetDate\": \"2019-06-27T06:30:30.701+0000\",\n    \"done\": false\n  }\n]\n```\n\n#### Retrieve a specific todo\n\n- GET - http://localhost:5000/jpa/users/in28minutes/todos/10001\n\n```\n{\n  \"id\": 10001,\n  \"username\": \"in28minutes\",\n  \"description\": \"Learn JPA\",\n  \"targetDate\": \"2019-06-27T06:30:30.696+0000\",\n  \"done\": false\n}\n```\n\n#### Creating a new todo\n\n- POST to http://localhost:5000/jpa/users/in28minutes/todos with BODY of Request given below\n\n```\n{\n  \"username\": \"in28minutes\",\n  \"description\": \"Learn to Drive a Car\",\n  \"targetDate\": \"2030-11-09T10:49:23.566+0000\",\n  \"done\": false\n}\n```\n\n#### Updating a new todo\n\n- http://localhost:5000/jpa/users/in28minutes/todos/10001 with BODY of Request given below\n\n```\n{\n  \"id\": 10001,\n  \"username\": \"in28minutes\",\n  \"description\": \"Learn to Drive a Car\",\n  \"targetDate\": \"2045-11-09T10:49:23.566+0000\",\n  \"done\": false\n}\n```\n\n#### Delete todo\n\n- DELETE to http://localhost:5000/jpa/users/in28minutes/todos/10001\n\n\n## H2 Console\n\n- http://localhost:5000/h2-console\n- Use `jdbc:h2:mem:testdb` as JDBC URL "
  },
  {
    "path": "06-todo-rest-api-h2-containerized/src/main/java/com/in28minutes/rest/webservices/restfulwebservices/RestfulWebServicesApplication.java",
    "content": "package com.in28minutes.rest.webservices.restfulwebservices;\n\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boot.autoconfigure.SpringBootApplication;\n\n@SpringBootApplication\npublic class RestfulWebServicesApplication {\n\n\tpublic static void main(String[] args) {\n\t\tSpringApplication.run(RestfulWebServicesApplication.class, args);\n\t}\n}\n"
  },
  {
    "path": "06-todo-rest-api-h2-containerized/src/main/java/com/in28minutes/rest/webservices/restfulwebservices/helloworld/HelloWorldBean.java",
    "content": "package com.in28minutes.rest.webservices.restfulwebservices.helloworld;\n\npublic class HelloWorldBean {\n\n\tprivate String message;\n\n\tpublic HelloWorldBean(String message) {\n\t\tthis.message = message;\n\t}\n\n\tpublic String getMessage() {\n\t\treturn message;\n\t}\n\n\tpublic void setMessage(String message) {\n\t\tthis.message = message;\n\t}\n\n\t@Override\n\tpublic String toString() {\n\t\treturn String.format(\"HelloWorldBean [message=%s]\", message);\n\t}\n\n}\n"
  },
  {
    "path": "06-todo-rest-api-h2-containerized/src/main/java/com/in28minutes/rest/webservices/restfulwebservices/helloworld/HelloWorldController.java",
    "content": "package com.in28minutes.rest.webservices.restfulwebservices.helloworld;\n\nimport org.springframework.web.bind.annotation.GetMapping;\nimport org.springframework.web.bind.annotation.PathVariable;\nimport org.springframework.web.bind.annotation.RestController;\n\n@RestController\npublic class HelloWorldController {\n\n\t@GetMapping(path = \"/hello-world\")\n\tpublic String helloWorld() {\n\t\treturn \"Hello World\";\n\t}\n\n\t@GetMapping(path = \"/hello-world-bean\")\n\tpublic HelloWorldBean helloWorldBean() {\n\t\treturn new HelloWorldBean(\"Hello World\");\n\t}\n\t\n\t@GetMapping(path = \"/hello-world/path-variable/{name}\")\n\tpublic HelloWorldBean helloWorldPathVariable(@PathVariable String name) {\n\t\treturn new HelloWorldBean(String.format(\"Hello World, %s\", name));\n\t}\n}\n"
  },
  {
    "path": "06-todo-rest-api-h2-containerized/src/main/java/com/in28minutes/rest/webservices/restfulwebservices/todo/Todo.java",
    "content": "package com.in28minutes.rest.webservices.restfulwebservices.todo;\n\nimport java.util.Date;\n\nimport javax.persistence.Entity;\nimport javax.persistence.GeneratedValue;\nimport javax.persistence.Id;\n\n@Entity\npublic class Todo {\n\t@Id\n\t@GeneratedValue\n\tprivate Long id;\n\tprivate String username;\n\tprivate String description;\n\tprivate Date targetDate;\n\tprivate boolean isDone;\n\t\n\tpublic Todo() {\n\t\t\n\t}\n\n\tpublic Todo(long id, String username, String description, Date targetDate, boolean isDone) {\n\t\tsuper();\n\t\tthis.id = id;\n\t\tthis.username = username;\n\t\tthis.description = description;\n\t\tthis.targetDate = targetDate;\n\t\tthis.isDone = isDone;\n\t}\n\n\tpublic Long getId() {\n\t\treturn id;\n\t}\n\n\tpublic void setId(Long id) {\n\t\tthis.id = id;\n\t}\n\n\tpublic String getUsername() {\n\t\treturn username;\n\t}\n\n\tpublic void setUsername(String username) {\n\t\tthis.username = username;\n\t}\n\n\tpublic String getDescription() {\n\t\treturn description;\n\t}\n\n\tpublic void setDescription(String description) {\n\t\tthis.description = description;\n\t}\n\n\tpublic Date getTargetDate() {\n\t\treturn targetDate;\n\t}\n\n\tpublic void setTargetDate(Date targetDate) {\n\t\tthis.targetDate = targetDate;\n\t}\n\n\tpublic boolean isDone() {\n\t\treturn isDone;\n\t}\n\n\tpublic void setDone(boolean isDone) {\n\t\tthis.isDone = isDone;\n\t}\n\n\t@Override\n\tpublic int hashCode() {\n\t\tfinal int prime = 31;\n\t\tint result = 1;\n\t\tresult = prime * result + (int) (id ^ (id >>> 32));\n\t\treturn result;\n\t}\n\n\t@Override\n\tpublic boolean equals(Object obj) {\n\t\tif (this == obj)\n\t\t\treturn true;\n\t\tif (obj == null)\n\t\t\treturn false;\n\t\tif (getClass() != obj.getClass())\n\t\t\treturn false;\n\t\tTodo other = (Todo) obj;\n\t\tif (id != other.id)\n\t\t\treturn false;\n\t\treturn true;\n\t}\n\n\t\n}"
  },
  {
    "path": "06-todo-rest-api-h2-containerized/src/main/java/com/in28minutes/rest/webservices/restfulwebservices/todo/TodoJpaRepository.java",
    "content": "package com.in28minutes.rest.webservices.restfulwebservices.todo;\n\nimport java.util.List;\n\nimport org.springframework.data.jpa.repository.JpaRepository;\nimport org.springframework.stereotype.Repository;\n\n@Repository\npublic interface TodoJpaRepository extends JpaRepository<Todo, Long>{\n\tList<Todo> findByUsername(String username);\n}"
  },
  {
    "path": "06-todo-rest-api-h2-containerized/src/main/java/com/in28minutes/rest/webservices/restfulwebservices/todo/TodoJpaResource.java",
    "content": "package com.in28minutes.rest.webservices.restfulwebservices.todo;\n\nimport java.net.URI;\nimport java.util.List;\n\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.http.HttpStatus;\nimport org.springframework.http.ResponseEntity;\nimport org.springframework.web.bind.annotation.DeleteMapping;\nimport org.springframework.web.bind.annotation.GetMapping;\nimport org.springframework.web.bind.annotation.PathVariable;\nimport org.springframework.web.bind.annotation.PostMapping;\nimport org.springframework.web.bind.annotation.PutMapping;\nimport org.springframework.web.bind.annotation.RequestBody;\nimport org.springframework.web.bind.annotation.RestController;\nimport org.springframework.web.servlet.support.ServletUriComponentsBuilder;\n\n@RestController\npublic class TodoJpaResource {\n\t\n\t@Autowired\n\tprivate TodoJpaRepository todoJpaRepository;\n\n\t\n\t@GetMapping(\"/jpa/users/{username}/todos\")\n\tpublic List<Todo> getAllTodos(@PathVariable String username){\n\t\treturn todoJpaRepository.findByUsername(username);\n\t\t//return todoService.findAll();\n\t}\n\n\t@GetMapping(\"/jpa/users/{username}/todos/{id}\")\n\tpublic Todo getTodo(@PathVariable String username, @PathVariable long id){\n\t\treturn todoJpaRepository.findById(id).get();\n\t\t//return todoService.findById(id);\n\t}\n\n\t// DELETE /users/{username}/todos/{id}\n\t@DeleteMapping(\"/jpa/users/{username}/todos/{id}\")\n\tpublic ResponseEntity<Void> deleteTodo(\n\t\t\t@PathVariable String username, @PathVariable long id) {\n\n\t\ttodoJpaRepository.deleteById(id);\n\n\t\treturn ResponseEntity.noContent().build();\n\t}\n\t\n\n\t//Edit/Update a Todo\n\t//PUT /users/{user_name}/todos/{todo_id}\n\t@PutMapping(\"/jpa/users/{username}/todos/{id}\")\n\tpublic ResponseEntity<Todo> updateTodo(\n\t\t\t@PathVariable String username,\n\t\t\t@PathVariable long id, @RequestBody Todo todo){\n\t\t\n\t\ttodo.setUsername(username);\n\t\t\n\t\tTodo todoUpdated = todoJpaRepository.save(todo);\n\t\t\n\t\treturn new ResponseEntity<Todo>(todo, HttpStatus.OK);\n\t}\n\t\n\t@PostMapping(\"/jpa/users/{username}/todos\")\n\tpublic ResponseEntity<Void> createTodo(\n\t\t\t@PathVariable String username, @RequestBody Todo todo){\n\t\t\n\t\ttodo.setId(-1L);\n\t\t\t\t\n\t\tTodo createdTodo = todoJpaRepository.save(todo);\n\t\t\n\t\t//Location\n\t\t//Get current resource url\n\t\t///{id}\n\t\tURI uri = ServletUriComponentsBuilder.fromCurrentRequest()\n\t\t\t\t.path(\"/{id}\").buildAndExpand(createdTodo.getId()).toUri();\n\t\t\n\t\treturn ResponseEntity.created(uri).build();\n\t}\n\t\t\n}\n"
  },
  {
    "path": "06-todo-rest-api-h2-containerized/src/main/resources/application.properties",
    "content": "spring.jpa.show-sql=true\nspring.h2.console.enabled=true\nspring.h2.console.settings.web-allow-others=true\n\nlogging.level.org.springframework = info\nserver.port=5000"
  },
  {
    "path": "06-todo-rest-api-h2-containerized/src/test/java/com/in28minutes/rest/webservices/restfulwebservices/RestfulWebServicesApplicationTests.java",
    "content": "package com.in28minutes.rest.webservices.restfulwebservices;\n\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.springframework.boot.test.context.SpringBootTest;\nimport org.springframework.test.context.junit4.SpringRunner;\n\n@RunWith(SpringRunner.class)\n@SpringBootTest\npublic class RestfulWebServicesApplicationTests {\n\n\t@Test\n\tpublic void contextLoads() {\n\t}\n\n}\n"
  },
  {
    "path": "07-todo-rest-api-mysql-containerized/.ebextensions/sg-extensions.config",
    "content": "Resources:\n  sslSecurityGroupIngress: \n    Type: AWS::EC2::SecurityGroupIngress\n    Properties:\n      GroupId: {\"Fn::GetAtt\" : [\"AWSEBSecurityGroup\", \"GroupId\"]}\n      IpProtocol: tcp\n      ToPort: 5000\n      FromPort: 5000\n      CidrIp: 0.0.0.0/0"
  },
  {
    "path": "07-todo-rest-api-mysql-containerized/Dockerfile",
    "content": "FROM openjdk:8-jdk-alpine\nVOLUME /tmp\nEXPOSE 5000\nADD target/*.jar app.jar\nENV JAVA_OPTS=\"\"\nENTRYPOINT [ \"sh\", \"-c\", \"java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar\" ]"
  },
  {
    "path": "07-todo-rest-api-mysql-containerized/Dockerrun.aws.json",
    "content": "{\n  \"AWSEBDockerrunVersion\": 2,\n  \"containerDefinitions\": [\n    {\n      \"name\": \"mysql\",\n      \"image\": \"mysql:5.7\",\n      \"environment\": [\n        {\n          \"name\": \"MYSQL_ROOT_PASSWORD\",\n          \"value\": \"dummypassword\"\n        },\n        {\n          \"name\": \"MYSQL_USER\",\n          \"value\": \"todos-user\"\n        },\n        {\n          \"name\": \"MYSQL_PASSWORD\",\n          \"value\": \"dummytodos\"\n        },\n        {\n          \"name\": \"MYSQL_DATABASE\",\n          \"value\": \"todos\"\n        }        \n      ],\n      \"essential\": true,\n      \"memory\": 256,\n      \"portMappings\": [\n        {\n          \"hostPort\": 3306,\n          \"containerPort\": 3306\n        }\n      ]\n    },\n    {\n      \"name\": \"todo-rest-api\",\n      \"image\": \"in28min/todo-rest-api-mysql:1.0.0.RELEASE\",\n      \"essential\": true,\n      \"memory\": 256,\n      \"portMappings\": [\n        {\n          \"hostPort\": 5000,\n          \"containerPort\": 5000\n        }\n      ],\n      \"links\": [\n        \"mysql\"\n      ]\n    }\n  ]\n}"
  },
  {
    "path": "07-todo-rest-api-mysql-containerized/pom.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n\txmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n\txsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\">\n\t<modelVersion>4.0.0</modelVersion>\n\n\t<groupId>com.in28minutes.rest.webservices</groupId>\n\t<artifactId>todo-rest-api-mysql</artifactId>\n\t<version>1.0.0.RELEASE</version>\n\t<packaging>jar</packaging>\n\n\t<name>07-todo-rest-api-mysql-containerized</name>\n\n\t<parent>\n\t\t<groupId>org.springframework.boot</groupId>\n\t\t<artifactId>spring-boot-starter-parent</artifactId>\n\t\t<version>2.1.0.RELEASE</version>\n\t\t<relativePath /> <!-- lookup parent from repository -->\n\t</parent>\n\n\t<properties>\n\t\t<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>\n\t\t<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>\n\t\t<java.version>1.8</java.version>\n\t</properties>\n\n\t<dependencies>\n\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t<artifactId>spring-boot-starter-data-jpa</artifactId>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t<artifactId>spring-boot-starter-web</artifactId>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t<artifactId>spring-boot-devtools</artifactId>\n\t\t\t<scope>runtime</scope>\n\t\t</dependency>\n\n\t\t<!-- AWS -->\n\t\t<dependency>\n\t\t\t<groupId>com.h2database</groupId>\n\t\t\t<artifactId>h2</artifactId>\n\t\t\t<scope>test</scope>\n\t\t</dependency>\n\n\n\t\t<!-- AWS -->\n\t\t<dependency>\n\t\t\t<groupId>mysql</groupId>\n\t\t\t<artifactId>mysql-connector-java</artifactId>\n\t\t</dependency>\n\n\n\n\t\t<dependency>\n\t\t\t<groupId>javax.xml.bind</groupId>\n\t\t\t<artifactId>jaxb-api</artifactId>\n\t\t\t<version>2.3.0</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>com.sun.xml.bind</groupId>\n\t\t\t<artifactId>jaxb-impl</artifactId>\n\t\t\t<version>2.3.0</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>org.glassfish.jaxb</groupId>\n\t\t\t<artifactId>jaxb-runtime</artifactId>\n\t\t\t<version>2.3.0</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>javax.activation</groupId>\n\t\t\t<artifactId>activation</artifactId>\n\t\t\t<version>1.1.1</version>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t<artifactId>spring-boot-starter-test</artifactId>\n\t\t\t<scope>test</scope>\n\t\t</dependency>\n\t</dependencies>\n\n\t<build>\n\t\t<plugins>\n\t\t\t<plugin>\n\t\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t\t<artifactId>spring-boot-maven-plugin</artifactId>\n\t\t\t</plugin>\n\n\t\t\t<!-- Docker -->\n\t\t\t<plugin>\n\t\t\t\t<groupId>com.spotify</groupId>\n\t\t\t\t<artifactId>dockerfile-maven-plugin</artifactId>\n\t\t\t\t<version>1.4.10</version>\n\t\t\t\t<executions>\n\t\t\t\t\t<execution>\n\t\t\t\t\t\t<id>default</id>\n\t\t\t\t\t\t<goals>\n\t\t\t\t\t\t\t<goal>build</goal>\n\t\t\t\t\t\t\t<!-- <goal>push</goal> --> \n\t\t\t\t\t\t</goals>\n\t\t\t\t\t</execution>\n\t\t\t\t</executions>\n\t\t\t\t<configuration>\n\t\t\t\t\t<repository>in28min/${project.artifactId}</repository>\n\t\t\t\t\t<tag>${project.version}</tag>\n\t\t\t\t\t<skipDockerInfo>true</skipDockerInfo>\n\t\t\t\t</configuration>\n\t\t\t</plugin>\n\t\t</plugins>\n\t</build>\n\n\t<repositories>\n\t\t<repository>\n\t\t\t<id>spring-snapshots</id>\n\t\t\t<name>Spring Snapshots</name>\n\t\t\t<url>https://repo.spring.io/snapshot</url>\n\t\t\t<snapshots>\n\t\t\t\t<enabled>true</enabled>\n\t\t\t</snapshots>\n\t\t</repository>\n\t\t<repository>\n\t\t\t<id>spring-milestones</id>\n\t\t\t<name>Spring Milestones</name>\n\t\t\t<url>https://repo.spring.io/milestone</url>\n\t\t\t<snapshots>\n\t\t\t\t<enabled>false</enabled>\n\t\t\t</snapshots>\n\t\t</repository>\n\t</repositories>\n\n\t<pluginRepositories>\n\t\t<pluginRepository>\n\t\t\t<id>spring-snapshots</id>\n\t\t\t<name>Spring Snapshots</name>\n\t\t\t<url>https://repo.spring.io/snapshot</url>\n\t\t\t<snapshots>\n\t\t\t\t<enabled>true</enabled>\n\t\t\t</snapshots>\n\t\t</pluginRepository>\n\t\t<pluginRepository>\n\t\t\t<id>spring-milestones</id>\n\t\t\t<name>Spring Milestones</name>\n\t\t\t<url>https://repo.spring.io/milestone</url>\n\t\t\t<snapshots>\n\t\t\t\t<enabled>false</enabled>\n\t\t\t</snapshots>\n\t\t</pluginRepository>\n\t</pluginRepositories>\n\n</project>"
  },
  {
    "path": "07-todo-rest-api-mysql-containerized/readme.md",
    "content": "# Todo and Hello World Rest APIs Connecting to MySQL\n\nRuns on port 5000\n\nRun com.in28minutes.rest.webservices.restfulwebservices.RestfulWebServicesApplication as a Java Application.\n\n\n## Containerization\n\n### Troubleshooting\n\n- Problem - Caused by: com.spotify.docker.client.shaded.javax.ws.rs.ProcessingException: java.io.IOException: No such file or directory\n- Solution - Check if docker is up and running!\n- Problem - Error creating the Docker image on MacOS - java.io.IOException: Cannot run program “docker-credential-osxkeychain”: error=2, No such file or directory\n- Solution - https://medium.com/@dakshika/error-creating-the-docker-image-on-macos-wso2-enterprise-integrator-tooling-dfb5b537b44e\n\n### Creating Containers and Running Locally\n\nhttps://hub.docker.com/r/in28min/todo-rest-api-mysql\n\n### Run MySQL  \n\n```\ndocker run --detach --env MYSQL_ROOT_PASSWORD=dummypassword --env MYSQL_USER=todos-user --env MYSQL_PASSWORD=dummytodos --env MYSQL_DATABASE=todos --name mysql --publish 3306:3306 mysql:5.7\n```\n\n### Run REST API Container\n\n```\nmvn clean package\ndocker run --name todos-api --publish 5000:5000 --link mysql:mysql in28min/todo-rest-api-mysql:1.0.0.RELEASE\n```\n\n### Test\n\nRun http://localhost:5000/users/in28minutes/todos\n\n\n### Push Your REST API Container to Docker Repo\n\n```\ndocker login\n\ndocker push in28min/todo-rest-api-mysql:0.0.1-SNAPSHOT\n```\n\n\n## Hello World URLS\n\n- http://localhost:5000/hello-world\n\n```txt\nHello World\n```\n\n- http://localhost:5000/hello-world-bean\n\n```json\n{\"message\":\"Hello World - Changed\"}\n```\n\n- http://localhost:5000/hello-world/path-variable/in28minutes\n\n```json\n{\"message\":\"Hello World, in28minutes\"}\n```\n\n\n\n## Todo JPA Resource URLs\n\n- GET - http://localhost:5000/jpa/users/in28minutes/todos\n\n```\n[\n  {\n    \"id\": 10001,\n    \"username\": \"in28minutes\",\n    \"description\": \"Learn JPA\",\n    \"targetDate\": \"2019-06-27T06:30:30.696+0000\",\n    \"done\": false\n  },\n  {\n    \"id\": 10002,\n    \"username\": \"in28minutes\",\n    \"description\": \"Learn Data JPA\",\n    \"targetDate\": \"2019-06-27T06:30:30.700+0000\",\n    \"done\": false\n  },\n  {\n    \"id\": 10003,\n    \"username\": \"in28minutes\",\n    \"description\": \"Learn Microservices\",\n    \"targetDate\": \"2019-06-27T06:30:30.701+0000\",\n    \"done\": false\n  }\n]\n```\n\n#### Retrieve a specific todo\n\n- GET - http://localhost:5000/jpa/users/in28minutes/todos/10001\n\n```\n{\n  \"id\": 10001,\n  \"username\": \"in28minutes\",\n  \"description\": \"Learn JPA\",\n  \"targetDate\": \"2019-06-27T06:30:30.696+0000\",\n  \"done\": false\n}\n```\n\n#### Creating a new todo\n\n- POST to http://localhost:5000/jpa/users/in28minutes/todos with BODY of Request given below\n\n```\n{\n  \"username\": \"in28minutes\",\n  \"description\": \"Learn to Drive a Car\",\n  \"targetDate\": \"2030-11-09T10:49:23.566+0000\",\n  \"done\": false\n}\n```\n\n#### Updating a new todo\n\n- http://localhost:5000/jpa/users/in28minutes/todos/10001 with BODY of Request given below\n\n```\n{\n  \"id\": 10001,\n  \"username\": \"in28minutes\",\n  \"description\": \"Learn to Drive a Car\",\n  \"targetDate\": \"2045-11-09T10:49:23.566+0000\",\n  \"done\": false\n}\n```\n\n#### Delete todo\n\n- DELETE to http://localhost:5000/jpa/users/in28minutes/todos/10001\n\n\n## H2 Console\n\n- http://localhost:5000/h2-console\n- Use `jdbc:h2:mem:testdb` as JDBC URL \n\n\n## .ebextensions/sg-extensions.config\n\n```\nResources:\n  sslSecurityGroupIngress: \n    Type: AWS::EC2::SecurityGroupIngress\n    Properties:\n      GroupId: {\"Fn::GetAtt\" : [\"AWSEBSecurityGroup\", \"GroupId\"]}\n      IpProtocol: tcp\n      ToPort: 5000\n      FromPort: 5000\n      CidrIp: 0.0.0.0/0\n```\n## Error\n\nhttp://tips.stevenchu.com/tech/aws-elastic-beanstalk-invalid-yaml-or-json-error-when-uploading-zip-file-from-mac-os/\n\n```\n$ zip -d nameofyourzipfile.zip __MACOSX/\\*\n```"
  },
  {
    "path": "07-todo-rest-api-mysql-containerized/src/main/java/com/in28minutes/rest/webservices/restfulwebservices/RestfulWebServicesApplication.java",
    "content": "package com.in28minutes.rest.webservices.restfulwebservices;\n\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boot.autoconfigure.SpringBootApplication;\n\n@SpringBootApplication\npublic class RestfulWebServicesApplication {\n\n\tpublic static void main(String[] args) {\n\t\tSpringApplication.run(RestfulWebServicesApplication.class, args);\n\t}\n}\n"
  },
  {
    "path": "07-todo-rest-api-mysql-containerized/src/main/java/com/in28minutes/rest/webservices/restfulwebservices/helloworld/HelloWorldBean.java",
    "content": "package com.in28minutes.rest.webservices.restfulwebservices.helloworld;\n\npublic class HelloWorldBean {\n\n\tprivate String message;\n\n\tpublic HelloWorldBean(String message) {\n\t\tthis.message = message;\n\t}\n\n\tpublic String getMessage() {\n\t\treturn message;\n\t}\n\n\tpublic void setMessage(String message) {\n\t\tthis.message = message;\n\t}\n\n\t@Override\n\tpublic String toString() {\n\t\treturn String.format(\"HelloWorldBean [message=%s]\", message);\n\t}\n\n}\n"
  },
  {
    "path": "07-todo-rest-api-mysql-containerized/src/main/java/com/in28minutes/rest/webservices/restfulwebservices/helloworld/HelloWorldController.java",
    "content": "package com.in28minutes.rest.webservices.restfulwebservices.helloworld;\n\nimport org.springframework.web.bind.annotation.CrossOrigin;\nimport org.springframework.web.bind.annotation.GetMapping;\nimport org.springframework.web.bind.annotation.PathVariable;\nimport org.springframework.web.bind.annotation.RestController;\n\n@RestController\npublic class HelloWorldController {\n\n\t@GetMapping(path = \"/hello-world\")\n\tpublic String helloWorld() {\n\t\treturn \"Hello World\";\n\t}\n\n\t@GetMapping(path = \"/hello-world-bean\")\n\tpublic HelloWorldBean helloWorldBean() {\n\t\treturn new HelloWorldBean(\"Hello World\");\n\t}\n\t\n\t///hello-world/path-variable/in28minutes\n\t@GetMapping(path = \"/hello-world/path-variable/{name}\")\n\tpublic HelloWorldBean helloWorldPathVariable(@PathVariable String name) {\n\t\t//throw new RuntimeException(\"Something went wrong\");\n\t\treturn new HelloWorldBean(String.format(\"Hello World, %s\", name));\n\t}\n}\n"
  },
  {
    "path": "07-todo-rest-api-mysql-containerized/src/main/java/com/in28minutes/rest/webservices/restfulwebservices/todo/Todo.java",
    "content": "package com.in28minutes.rest.webservices.restfulwebservices.todo;\n\nimport java.util.Date;\n\nimport javax.persistence.Entity;\nimport javax.persistence.GeneratedValue;\nimport javax.persistence.Id;\n\n@Entity\npublic class Todo {\n\t@Id\n\t@GeneratedValue\n\tprivate Long id;\n\tprivate String username;\n\tprivate String description;\n\tprivate Date targetDate;\n\tprivate boolean isDone;\n\t\n\tpublic Todo() {\n\t\t\n\t}\n\n\tpublic Todo(long id, String username, String description, Date targetDate, boolean isDone) {\n\t\tsuper();\n\t\tthis.id = id;\n\t\tthis.username = username;\n\t\tthis.description = description;\n\t\tthis.targetDate = targetDate;\n\t\tthis.isDone = isDone;\n\t}\n\n\tpublic Long getId() {\n\t\treturn id;\n\t}\n\n\tpublic void setId(Long id) {\n\t\tthis.id = id;\n\t}\n\n\tpublic String getUsername() {\n\t\treturn username;\n\t}\n\n\tpublic void setUsername(String username) {\n\t\tthis.username = username;\n\t}\n\n\tpublic String getDescription() {\n\t\treturn description;\n\t}\n\n\tpublic void setDescription(String description) {\n\t\tthis.description = description;\n\t}\n\n\tpublic Date getTargetDate() {\n\t\treturn targetDate;\n\t}\n\n\tpublic void setTargetDate(Date targetDate) {\n\t\tthis.targetDate = targetDate;\n\t}\n\n\tpublic boolean isDone() {\n\t\treturn isDone;\n\t}\n\n\tpublic void setDone(boolean isDone) {\n\t\tthis.isDone = isDone;\n\t}\n\n\t@Override\n\tpublic int hashCode() {\n\t\tfinal int prime = 31;\n\t\tint result = 1;\n\t\tresult = prime * result + (int) (id ^ (id >>> 32));\n\t\treturn result;\n\t}\n\n\t@Override\n\tpublic boolean equals(Object obj) {\n\t\tif (this == obj)\n\t\t\treturn true;\n\t\tif (obj == null)\n\t\t\treturn false;\n\t\tif (getClass() != obj.getClass())\n\t\t\treturn false;\n\t\tTodo other = (Todo) obj;\n\t\tif (id != other.id)\n\t\t\treturn false;\n\t\treturn true;\n\t}\n\n\t\n}"
  },
  {
    "path": "07-todo-rest-api-mysql-containerized/src/main/java/com/in28minutes/rest/webservices/restfulwebservices/todo/TodoJpaRepository.java",
    "content": "package com.in28minutes.rest.webservices.restfulwebservices.todo;\n\nimport java.util.List;\n\nimport org.springframework.data.jpa.repository.JpaRepository;\nimport org.springframework.stereotype.Repository;\n\n@Repository\npublic interface TodoJpaRepository extends JpaRepository<Todo, Long>{\n\tList<Todo> findByUsername(String username);\n}"
  },
  {
    "path": "07-todo-rest-api-mysql-containerized/src/main/java/com/in28minutes/rest/webservices/restfulwebservices/todo/TodoJpaResource.java",
    "content": "package com.in28minutes.rest.webservices.restfulwebservices.todo;\n\nimport java.net.URI;\nimport java.util.List;\n\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.http.HttpStatus;\nimport org.springframework.http.ResponseEntity;\nimport org.springframework.web.bind.annotation.DeleteMapping;\nimport org.springframework.web.bind.annotation.GetMapping;\nimport org.springframework.web.bind.annotation.PathVariable;\nimport org.springframework.web.bind.annotation.PostMapping;\nimport org.springframework.web.bind.annotation.PutMapping;\nimport org.springframework.web.bind.annotation.RequestBody;\nimport org.springframework.web.bind.annotation.RestController;\nimport org.springframework.web.servlet.support.ServletUriComponentsBuilder;\n\n@RestController\npublic class TodoJpaResource {\n\t\n\t@Autowired\n\tprivate TodoJpaRepository todoJpaRepository;\n\n\t\n\t@GetMapping(\"/jpa/users/{username}/todos\")\n\tpublic List<Todo> getAllTodos(@PathVariable String username){\n\t\treturn todoJpaRepository.findByUsername(username);\n\t\t//return todoService.findAll();\n\t}\n\n\t@GetMapping(\"/jpa/users/{username}/todos/{id}\")\n\tpublic Todo getTodo(@PathVariable String username, @PathVariable long id){\n\t\treturn todoJpaRepository.findById(id).get();\n\t\t//return todoService.findById(id);\n\t}\n\n\t// DELETE /users/{username}/todos/{id}\n\t@DeleteMapping(\"/jpa/users/{username}/todos/{id}\")\n\tpublic ResponseEntity<Void> deleteTodo(\n\t\t\t@PathVariable String username, @PathVariable long id) {\n\n\t\ttodoJpaRepository.deleteById(id);\n\n\t\treturn ResponseEntity.noContent().build();\n\t}\n\t\n\n\t//Edit/Update a Todo\n\t//PUT /users/{user_name}/todos/{todo_id}\n\t@PutMapping(\"/jpa/users/{username}/todos/{id}\")\n\tpublic ResponseEntity<Todo> updateTodo(\n\t\t\t@PathVariable String username,\n\t\t\t@PathVariable long id, @RequestBody Todo todo){\n\t\t\n\t\ttodo.setUsername(username);\n\t\t\n\t\tTodo todoUpdated = todoJpaRepository.save(todo);\n\t\t\n\t\treturn new ResponseEntity<Todo>(todo, HttpStatus.OK);\n\t}\n\t\n\t@PostMapping(\"/jpa/users/{username}/todos\")\n\tpublic ResponseEntity<Void> createTodo(\n\t\t\t@PathVariable String username, @RequestBody Todo todo){\n\t\t\n\t\ttodo.setId(-1L);\n\t\t\t\t\n\t\tTodo createdTodo = todoJpaRepository.save(todo);\n\t\t\n\t\t//Location\n\t\t//Get current resource url\n\t\t///{id}\n\t\tURI uri = ServletUriComponentsBuilder.fromCurrentRequest()\n\t\t\t\t.path(\"/{id}\").buildAndExpand(createdTodo.getId()).toUri();\n\t\t\n\t\treturn ResponseEntity.created(uri).build();\n\t}\n\t\t\n}\n"
  },
  {
    "path": "07-todo-rest-api-mysql-containerized/src/main/resources/application.properties",
    "content": "spring.jpa.show-sql=true\n#spring.h2.console.enabled=true\n\nlogging.level.org.springframework = info\nserver.port=5000\n\n#AWS\nspring.jpa.hibernate.ddl-auto=update\nspring.datasource.url=jdbc:mysql://${RDS_HOSTNAME:mysql}:${RDS_PORT:3306}/${RDS_DB_NAME:todos}\nspring.datasource.username=${RDS_USERNAME:todos-user}\nspring.datasource.password=${RDS_PASSWORD:dummytodos}\nspring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL57Dialect"
  },
  {
    "path": "07-todo-rest-api-mysql-containerized/src/test/java/com/in28minutes/rest/webservices/restfulwebservices/RestfulWebServicesApplicationTests.java",
    "content": "package com.in28minutes.rest.webservices.restfulwebservices;\n\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.springframework.boot.test.context.SpringBootTest;\nimport org.springframework.test.context.junit4.SpringRunner;\n\n@RunWith(SpringRunner.class)\n@SpringBootTest\npublic class RestfulWebServicesApplicationTests {\n\n\t@Test\n\tpublic void contextLoads() {\n\t}\n\n}\n"
  },
  {
    "path": "07-todo-rest-api-mysql-containerized/src/test/resources/application.properties",
    "content": "#AWS\nspring.jpa.hibernate.ddl-auto=create-drop\nspring.datasource.driver-class-name=org.h2.Driver\nspring.datasource.url=jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1\nspring.datasource.username=sa\nspring.datasource.password=sa\n"
  },
  {
    "path": "08-spring-boot-todo-rest-api-eb-cli/.gitignore",
    "content": "\n# Elastic Beanstalk Files\n.elasticbeanstalk/*\n!.elasticbeanstalk/*.cfg.yml\n!.elasticbeanstalk/*.global.yml\n"
  },
  {
    "path": "08-spring-boot-todo-rest-api-eb-cli/pom.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n\txsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\">\n\t<modelVersion>4.0.0</modelVersion>\n\n\t<groupId>com.in28minutes.rest.webservices</groupId>\n\t<artifactId>08-spring-boot-todo-rest-api-eb-cli</artifactId>\n\t<version>0.0.1-SNAPSHOT</version>\n\t<packaging>jar</packaging>\n\n\t<description>Demo project for Spring Boot</description>\n\n\t<parent>\n\t\t<groupId>org.springframework.boot</groupId>\n\t\t<artifactId>spring-boot-starter-parent</artifactId>\n\t\t<version>2.1.0.RELEASE</version>\n\t\t<relativePath /> <!-- lookup parent from repository -->\n\t</parent>\n\n\t<properties>\n\t\t<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>\n\t\t<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>\n\t\t<java.version>1.8</java.version>\n\t</properties>\n\n\t<dependencies>\n\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t<artifactId>spring-boot-starter-data-jpa</artifactId>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t<artifactId>spring-boot-starter-web</artifactId>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t<artifactId>spring-boot-devtools</artifactId>\n\t\t\t<scope>runtime</scope>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>com.h2database</groupId>\n\t\t\t<artifactId>h2</artifactId>\n\t\t\t<scope>runtime</scope>\n\t\t</dependency>\n\n\n\n\t\t<dependency>\n\t\t\t<groupId>javax.xml.bind</groupId>\n\t\t\t<artifactId>jaxb-api</artifactId>\n\t\t\t<version>2.3.0</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>com.sun.xml.bind</groupId>\n\t\t\t<artifactId>jaxb-impl</artifactId>\n\t\t\t<version>2.3.0</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>org.glassfish.jaxb</groupId>\n\t\t\t<artifactId>jaxb-runtime</artifactId>\n\t\t\t<version>2.3.0</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>javax.activation</groupId>\n\t\t\t<artifactId>activation</artifactId>\n\t\t\t<version>1.1.1</version>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t<artifactId>spring-boot-starter-test</artifactId>\n\t\t\t<scope>test</scope>\n\t\t</dependency>\n\t</dependencies>\n\n\t<build>\n\t\t<plugins>\n\t\t\t<plugin>\n\t\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t\t<artifactId>spring-boot-maven-plugin</artifactId>\n\t\t\t</plugin>\n\t\t</plugins>\n\t</build>\n\n\t<repositories>\n\t\t<repository>\n\t\t\t<id>spring-snapshots</id>\n\t\t\t<name>Spring Snapshots</name>\n\t\t\t<url>https://repo.spring.io/snapshot</url>\n\t\t\t<snapshots>\n\t\t\t\t<enabled>true</enabled>\n\t\t\t</snapshots>\n\t\t</repository>\n\t\t<repository>\n\t\t\t<id>spring-milestones</id>\n\t\t\t<name>Spring Milestones</name>\n\t\t\t<url>https://repo.spring.io/milestone</url>\n\t\t\t<snapshots>\n\t\t\t\t<enabled>false</enabled>\n\t\t\t</snapshots>\n\t\t</repository>\n\t</repositories>\n\n\t<pluginRepositories>\n\t\t<pluginRepository>\n\t\t\t<id>spring-snapshots</id>\n\t\t\t<name>Spring Snapshots</name>\n\t\t\t<url>https://repo.spring.io/snapshot</url>\n\t\t\t<snapshots>\n\t\t\t\t<enabled>true</enabled>\n\t\t\t</snapshots>\n\t\t</pluginRepository>\n\t\t<pluginRepository>\n\t\t\t<id>spring-milestones</id>\n\t\t\t<name>Spring Milestones</name>\n\t\t\t<url>https://repo.spring.io/milestone</url>\n\t\t\t<snapshots>\n\t\t\t\t<enabled>false</enabled>\n\t\t\t</snapshots>\n\t\t</pluginRepository>\n\t</pluginRepositories>\n\n\n</project>\n"
  },
  {
    "path": "08-spring-boot-todo-rest-api-eb-cli/readme.md",
    "content": "# Elastic Bean Stalk CLI Example - Todo and Hello World Rest APIs Connecting to H2 In memory database running on port 5000 \n\nRun com.in28minutes.rest.webservices.restfulwebservices.RestfulWebServicesApplication as a Java Application.\n\n## .elasticbeanstalk/config.yml\n\n```\nbranch-defaults:\n  default:\n    environment: rest-api-in28minutes-dev\nenvironment-defaults:\n  rest-api-in28minutes-dev:\n    branch: null\n    repository: null\nglobal:\n  application_name: rest-api-in28minutes\n  default_ec2_keyname: null\n  default_platform: arn:aws:elasticbeanstalk:us-east-1::platform/Java 8 running on\n    64bit Amazon Linux/2.8.6\n  default_region: us-east-1\n  include_git_submodules: true\n  instance_profile: null\n  platform_name: null\n  platform_version: null\n  profile: eb-cli\n  sc: null\n  workspace_type: Application\ndeploy:\n  artifact: target/08-spring-boot-todo-rest-api-eb-cli-0.0.1-SNAPSHOT.jar\n```\n\n\n## Hello World Resource\n\n- http://localhost:5000/hello-world\n\n```txt\nHello World\n```\n\n- http://localhost:5000/hello-world-bean\n\n```json\n{\"message\":\"Hello World - Changed\"}\n```\n\n- http://localhost:5000/hello-world/path-variable/in28minutes\n\n```json\n{\"message\":\"Hello World, in28minutes\"}\n```\n\n\n## Todo Resource\n\n- GET - http://localhost:5000/jpa/users/in28minutes/todos\n\n```\n[\n  {\n    \"id\": 10001,\n    \"username\": \"in28minutes\",\n    \"description\": \"Learn JPA\",\n    \"targetDate\": \"2019-06-27T06:30:30.696+0000\",\n    \"done\": false\n  },\n  {\n    \"id\": 10002,\n    \"username\": \"in28minutes\",\n    \"description\": \"Learn Data JPA\",\n    \"targetDate\": \"2019-06-27T06:30:30.700+0000\",\n    \"done\": false\n  },\n  {\n    \"id\": 10003,\n    \"username\": \"in28minutes\",\n    \"description\": \"Learn Microservices\",\n    \"targetDate\": \"2019-06-27T06:30:30.701+0000\",\n    \"done\": false\n  }\n]\n```\n\n#### Retrieve a specific todo\n\n- GET - http://localhost:5000/jpa/users/in28minutes/todos/10001\n\n```\n{\n  \"id\": 10001,\n  \"username\": \"in28minutes\",\n  \"description\": \"Learn JPA\",\n  \"targetDate\": \"2019-06-27T06:30:30.696+0000\",\n  \"done\": false\n}\n```\n\n#### Creating a new todo\n\n\n\n- POST to http://localhost:5000/jpa/users/in28minutes/todos with BODY of Request given below\n\n```\n{\n  \"username\": \"in28minutes\",\n  \"description\": \"Learn to Drive a Car\",\n  \"targetDate\": \"2030-11-09T10:49:23.566+0000\",\n  \"done\": false\n}\n```\n\n#### Updating an existing todo\n\n- PUT Request to http://localhost:5000/jpa/users/in28minutes/todos/10001 with BODY of Request given below\n\n```\n{\n  \"id\": 10001,\n  \"username\": \"in28minutes\",\n  \"description\": \"Learn to Drive a Car\",\n  \"targetDate\": \"2045-11-09T10:49:23.566+0000\",\n  \"done\": false\n}\n```\n\n#### Delete todo\n\n- DELETE to http://localhost:5000/jpa/users/in28minutes/todos/10001\n\n\n## H2 Console\n\n- http://localhost:5000/h2-console\n- Use `jdbc:h2:mem:testdb` as JDBC URL \n\n## "
  },
  {
    "path": "08-spring-boot-todo-rest-api-eb-cli/src/main/java/com/in28minutes/rest/webservices/restfulwebservices/RestfulWebServicesApplication.java",
    "content": "package com.in28minutes.rest.webservices.restfulwebservices;\n\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boot.autoconfigure.SpringBootApplication;\n\n@SpringBootApplication\npublic class RestfulWebServicesApplication {\n\n\tpublic static void main(String[] args) {\n\t\tSpringApplication.run(RestfulWebServicesApplication.class, args);\n\t}\n}\n"
  },
  {
    "path": "08-spring-boot-todo-rest-api-eb-cli/src/main/java/com/in28minutes/rest/webservices/restfulwebservices/helloworld/HelloWorldBean.java",
    "content": "package com.in28minutes.rest.webservices.restfulwebservices.helloworld;\n\npublic class HelloWorldBean {\n\n\tprivate String message;\n\n\tpublic HelloWorldBean(String message) {\n\t\tthis.message = message;\n\t}\n\n\tpublic String getMessage() {\n\t\treturn message;\n\t}\n\n\tpublic void setMessage(String message) {\n\t\tthis.message = message;\n\t}\n\n\t@Override\n\tpublic String toString() {\n\t\treturn String.format(\"HelloWorldBean [message=%s]\", message);\n\t}\n\n}\n"
  },
  {
    "path": "08-spring-boot-todo-rest-api-eb-cli/src/main/java/com/in28minutes/rest/webservices/restfulwebservices/helloworld/HelloWorldController.java",
    "content": "package com.in28minutes.rest.webservices.restfulwebservices.helloworld;\n\nimport org.springframework.web.bind.annotation.GetMapping;\nimport org.springframework.web.bind.annotation.PathVariable;\nimport org.springframework.web.bind.annotation.RestController;\n\n//Controller\n@RestController\npublic class HelloWorldController {\n\n\t@GetMapping(path = \"/hello-world\")\n\tpublic String helloWorld() {\n\t\treturn \"Hello World - Change V3\";\n\t}\n\n\t@GetMapping(path = \"/hello-world-bean\")\n\tpublic HelloWorldBean helloWorldBean() {\n\t\treturn new HelloWorldBean(\"Hello World\");\n\t}\n\t\n\t///hello-world/path-variable/in28minutes\n\t@GetMapping(path = \"/hello-world/path-variable/{name}\")\n\tpublic HelloWorldBean helloWorldPathVariable(@PathVariable String name) {\n\t\t//throw new RuntimeException(\"Something went wrong\");\n\t\treturn new HelloWorldBean(String.format(\"Hello World, %s\", name));\n\t}\n}\n"
  },
  {
    "path": "08-spring-boot-todo-rest-api-eb-cli/src/main/java/com/in28minutes/rest/webservices/restfulwebservices/todo/Todo.java",
    "content": "package com.in28minutes.rest.webservices.restfulwebservices.todo;\n\nimport java.util.Date;\n\nimport javax.persistence.Entity;\nimport javax.persistence.GeneratedValue;\nimport javax.persistence.Id;\n\n@Entity\npublic class Todo {\n\t@Id\n\t@GeneratedValue\n\tprivate Long id;\n\tprivate String username;\n\tprivate String description;\n\tprivate Date targetDate;\n\tprivate boolean isDone;\n\t\n\tpublic Todo() {\n\t\t\n\t}\n\n\tpublic Todo(long id, String username, String description, Date targetDate, boolean isDone) {\n\t\tsuper();\n\t\tthis.id = id;\n\t\tthis.username = username;\n\t\tthis.description = description;\n\t\tthis.targetDate = targetDate;\n\t\tthis.isDone = isDone;\n\t}\n\n\tpublic Long getId() {\n\t\treturn id;\n\t}\n\n\tpublic void setId(Long id) {\n\t\tthis.id = id;\n\t}\n\n\tpublic String getUsername() {\n\t\treturn username;\n\t}\n\n\tpublic void setUsername(String username) {\n\t\tthis.username = username;\n\t}\n\n\tpublic String getDescription() {\n\t\treturn description;\n\t}\n\n\tpublic void setDescription(String description) {\n\t\tthis.description = description;\n\t}\n\n\tpublic Date getTargetDate() {\n\t\treturn targetDate;\n\t}\n\n\tpublic void setTargetDate(Date targetDate) {\n\t\tthis.targetDate = targetDate;\n\t}\n\n\tpublic boolean isDone() {\n\t\treturn isDone;\n\t}\n\n\tpublic void setDone(boolean isDone) {\n\t\tthis.isDone = isDone;\n\t}\n\n\t@Override\n\tpublic int hashCode() {\n\t\tfinal int prime = 31;\n\t\tint result = 1;\n\t\tresult = prime * result + (int) (id ^ (id >>> 32));\n\t\treturn result;\n\t}\n\n\t@Override\n\tpublic boolean equals(Object obj) {\n\t\tif (this == obj)\n\t\t\treturn true;\n\t\tif (obj == null)\n\t\t\treturn false;\n\t\tif (getClass() != obj.getClass())\n\t\t\treturn false;\n\t\tTodo other = (Todo) obj;\n\t\tif (id != other.id)\n\t\t\treturn false;\n\t\treturn true;\n\t}\n\n\t\n}"
  },
  {
    "path": "08-spring-boot-todo-rest-api-eb-cli/src/main/java/com/in28minutes/rest/webservices/restfulwebservices/todo/TodoJpaRepository.java",
    "content": "package com.in28minutes.rest.webservices.restfulwebservices.todo;\n\nimport java.util.List;\n\nimport org.springframework.data.jpa.repository.JpaRepository;\nimport org.springframework.stereotype.Repository;\n\n@Repository\npublic interface TodoJpaRepository extends JpaRepository<Todo, Long>{\n\tList<Todo> findByUsername(String username);\n}"
  },
  {
    "path": "08-spring-boot-todo-rest-api-eb-cli/src/main/java/com/in28minutes/rest/webservices/restfulwebservices/todo/TodoJpaResource.java",
    "content": "package com.in28minutes.rest.webservices.restfulwebservices.todo;\n\nimport java.net.URI;\nimport java.util.List;\n\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.http.HttpStatus;\nimport org.springframework.http.ResponseEntity;\nimport org.springframework.web.bind.annotation.DeleteMapping;\nimport org.springframework.web.bind.annotation.GetMapping;\nimport org.springframework.web.bind.annotation.PathVariable;\nimport org.springframework.web.bind.annotation.PostMapping;\nimport org.springframework.web.bind.annotation.PutMapping;\nimport org.springframework.web.bind.annotation.RequestBody;\nimport org.springframework.web.bind.annotation.RestController;\nimport org.springframework.web.servlet.support.ServletUriComponentsBuilder;\n\n@RestController\npublic class TodoJpaResource {\n\t\n\t@Autowired\n\tprivate TodoJpaRepository todoJpaRepository;\n\n\t\n\t@GetMapping(\"/jpa/users/{username}/todos\")\n\tpublic List<Todo> getAllTodos(@PathVariable String username){\n\t\treturn todoJpaRepository.findByUsername(username);\n\t}\n\n\t@GetMapping(\"/jpa/users/{username}/todos/{id}\")\n\tpublic Todo getTodo(@PathVariable String username, @PathVariable long id){\n\t\treturn todoJpaRepository.findById(id).get();\n\t}\n\n\t@DeleteMapping(\"/jpa/users/{username}/todos/{id}\")\n\tpublic ResponseEntity<Void> deleteTodo(\n\t\t\t@PathVariable String username, @PathVariable long id) {\n\n\t\ttodoJpaRepository.deleteById(id);\n\n\t\treturn ResponseEntity.noContent().build();\n\t}\n\t\n\n\t@PutMapping(\"/jpa/users/{username}/todos/{id}\")\n\tpublic ResponseEntity<Todo> updateTodo(\n\t\t\t@PathVariable String username,\n\t\t\t@PathVariable long id, @RequestBody Todo todo){\n\t\t\n\t\ttodo.setUsername(username);\n\t\t\n\t\tTodo todoUpdated = todoJpaRepository.save(todo);\n\t\t\n\t\treturn new ResponseEntity<Todo>(todoUpdated, HttpStatus.OK);\n\t}\n\t\n\t@PostMapping(\"/jpa/users/{username}/todos\")\n\tpublic ResponseEntity<Void> createTodo(\n\t\t\t@PathVariable String username, @RequestBody Todo todo){\n\t\t\n\t\ttodo.setId(-1L);\n\t\t\t\t\n\t\tTodo createdTodo = todoJpaRepository.save(todo);\n\t\t\n\t\t//Location\n\t\t//Get current resource url\n\t\t///{id}\n\t\tURI uri = ServletUriComponentsBuilder.fromCurrentRequest()\n\t\t\t\t.path(\"/{id}\").buildAndExpand(createdTodo.getId()).toUri();\n\t\t\n\t\treturn ResponseEntity.created(uri).build();\n\t}\n\t\t\n}\n"
  },
  {
    "path": "08-spring-boot-todo-rest-api-eb-cli/src/main/resources/application.properties",
    "content": "spring.jpa.show-sql=true\nspring.h2.console.enabled=true\nspring.h2.console.settings.web-allow-others=true\n\nlogging.level.org.springframework = info\nserver.port=5000\n"
  },
  {
    "path": "08-spring-boot-todo-rest-api-eb-cli/src/main/resources/data.sql",
    "content": "insert into todo(id, username,description,target_date,is_done)\nvalues(10001, 'in28minutes', 'Learn JPA', sysdate(), false);\n\ninsert into todo(id, username,description,target_date,is_done)\nvalues(10002, 'in28minutes', 'Learn Data JPA', sysdate(), false);\n\ninsert into todo(id, username,description,target_date,is_done)\nvalues(10003, 'in28minutes', 'Learn Microservices', sysdate(), false);"
  },
  {
    "path": "08-spring-boot-todo-rest-api-eb-cli/src/test/java/com/in28minutes/rest/webservices/restfulwebservices/RestfulWebServicesApplicationTests.java",
    "content": "package com.in28minutes.rest.webservices.restfulwebservices;\n\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.springframework.boot.test.context.SpringBootTest;\nimport org.springframework.test.context.junit4.SpringRunner;\n\n@RunWith(SpringRunner.class)\n@SpringBootTest\npublic class RestfulWebServicesApplicationTests {\n\n\t@Test\n\tpublic void contextLoads() {\n\t}\n\n}\n"
  },
  {
    "path": "09-spring-boot-worker-rest-api/pom.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n\txsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\">\n\t<modelVersion>4.0.0</modelVersion>\n\n\t<groupId>com.in28minutes.rest.webservices</groupId>\n\t<artifactId>09-spring-boot-worker-rest-api</artifactId>\n\t<version>0.0.1-SNAPSHOT</version>\n\t<packaging>jar</packaging>\n\n\t<parent>\n\t\t<groupId>org.springframework.boot</groupId>\n\t\t<artifactId>spring-boot-starter-parent</artifactId>\n\t\t<version>2.1.0.RELEASE</version>\n\t\t<relativePath /> <!-- lookup parent from repository -->\n\t</parent>\n\n\t<properties>\n\t\t<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>\n\t\t<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>\n\t\t<java.version>1.8</java.version>\n\t</properties>\n\n\t<dependencies>\n\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t<artifactId>spring-boot-starter-web</artifactId>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t<artifactId>spring-boot-devtools</artifactId>\n\t\t\t<scope>runtime</scope>\n\t\t</dependency>\n\n\n\n\t\t<dependency>\n\t\t\t<groupId>javax.xml.bind</groupId>\n\t\t\t<artifactId>jaxb-api</artifactId>\n\t\t\t<version>2.3.0</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>com.sun.xml.bind</groupId>\n\t\t\t<artifactId>jaxb-impl</artifactId>\n\t\t\t<version>2.3.0</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>org.glassfish.jaxb</groupId>\n\t\t\t<artifactId>jaxb-runtime</artifactId>\n\t\t\t<version>2.3.0</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>javax.activation</groupId>\n\t\t\t<artifactId>activation</artifactId>\n\t\t\t<version>1.1.1</version>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t<artifactId>spring-boot-starter-test</artifactId>\n\t\t\t<scope>test</scope>\n\t\t</dependency>\n\t</dependencies>\n\n\t<build>\n\t\t<plugins>\n\t\t\t<plugin>\n\t\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t\t<artifactId>spring-boot-maven-plugin</artifactId>\n\t\t\t</plugin>\n\t\t</plugins>\n\t</build>\n\n\t<repositories>\n\t\t<repository>\n\t\t\t<id>spring-snapshots</id>\n\t\t\t<name>Spring Snapshots</name>\n\t\t\t<url>https://repo.spring.io/snapshot</url>\n\t\t\t<snapshots>\n\t\t\t\t<enabled>true</enabled>\n\t\t\t</snapshots>\n\t\t</repository>\n\t\t<repository>\n\t\t\t<id>spring-milestones</id>\n\t\t\t<name>Spring Milestones</name>\n\t\t\t<url>https://repo.spring.io/milestone</url>\n\t\t\t<snapshots>\n\t\t\t\t<enabled>false</enabled>\n\t\t\t</snapshots>\n\t\t</repository>\n\t</repositories>\n\n\t<pluginRepositories>\n\t\t<pluginRepository>\n\t\t\t<id>spring-snapshots</id>\n\t\t\t<name>Spring Snapshots</name>\n\t\t\t<url>https://repo.spring.io/snapshot</url>\n\t\t\t<snapshots>\n\t\t\t\t<enabled>true</enabled>\n\t\t\t</snapshots>\n\t\t</pluginRepository>\n\t\t<pluginRepository>\n\t\t\t<id>spring-milestones</id>\n\t\t\t<name>Spring Milestones</name>\n\t\t\t<url>https://repo.spring.io/milestone</url>\n\t\t\t<snapshots>\n\t\t\t\t<enabled>false</enabled>\n\t\t\t</snapshots>\n\t\t</pluginRepository>\n\t</pluginRepositories>\n\n\n</project>\n"
  },
  {
    "path": "09-spring-boot-worker-rest-api/readme.md",
    "content": "# Task Processor\n\nRun com.in28minutes.rest.webservices.restfulwebservices.RestfulWebServicesApplication as a Java Application.\n\n\n# Task Resource\n\nSend following POST request to http://localhost:8080\n\n```\n{\n  \"id\": \"195\",\n  \"message\": \"Testing Task\"\n}\n```"
  },
  {
    "path": "09-spring-boot-worker-rest-api/src/main/java/com/in28minutes/rest/webservices/restfulwebservices/RestfulWebServicesApplication.java",
    "content": "package com.in28minutes.rest.webservices.restfulwebservices;\n\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boot.autoconfigure.SpringBootApplication;\n\n@SpringBootApplication\npublic class RestfulWebServicesApplication {\n\n\tpublic static void main(String[] args) {\n\t\tSpringApplication.run(RestfulWebServicesApplication.class, args);\n\t}\n}\n"
  },
  {
    "path": "09-spring-boot-worker-rest-api/src/main/java/com/in28minutes/rest/webservices/restfulwebservices/task/TaskController.java",
    "content": "package com.in28minutes.rest.webservices.restfulwebservices.task;\n\nimport org.slf4j.Logger;\nimport org.slf4j.LoggerFactory;\nimport org.springframework.http.ResponseEntity;\nimport org.springframework.web.bind.annotation.PostMapping;\nimport org.springframework.web.bind.annotation.RequestBody;\nimport org.springframework.web.bind.annotation.RestController;\n\n@RestController\npublic class TaskController {\n\n\tprivate static final Logger LOGGER = LoggerFactory.getLogger(TaskController.class);\n\t\n\t\n\t//Queue > POST '/' \n\n\t@PostMapping(\"/\")\n\tpublic ResponseEntity<Void> processTask(@RequestBody TaskDetails task) {\n\n\t\tif(Math.random() < 0.8) {\n\t\t\tLOGGER.info(\"Erroring Task {}\", task);\n\t\t\tthrow new RuntimeException(\"Error Task\");\n\t\t}\n\t\t\t\n\t\tLOGGER.info(\"Processing Task {}\", task);\n\n\t\treturn ResponseEntity.ok().build();//200\n\t}\n}\n"
  },
  {
    "path": "09-spring-boot-worker-rest-api/src/main/java/com/in28minutes/rest/webservices/restfulwebservices/task/TaskDetails.java",
    "content": "package com.in28minutes.rest.webservices.restfulwebservices.task;\n\npublic class TaskDetails {\n\n\tprivate String id;\n\t\n\tprivate String message;\n\n\tpublic String getId() {\n\t\treturn id;\n\t}\n\n\tpublic void setId(String id) {\n\t\tthis.id = id;\n\t}\n\n\tpublic String getMessage() {\n\t\treturn message;\n\t}\n\n\tpublic void setMessage(String message) {\n\t\tthis.message = message;\n\t}\n\n\t@Override\n\tpublic String toString() {\n\t\treturn \"TaskDetails [id=\" + id + \", message=\" + message + \"]\";\n\t}\n\n\t\n}\n"
  },
  {
    "path": "09-spring-boot-worker-rest-api/src/main/resources/application.properties",
    "content": "server.port=5000\n"
  },
  {
    "path": "09-spring-boot-worker-rest-api/src/test/java/com/in28minutes/rest/webservices/restfulwebservices/RestfulWebServicesApplicationTests.java",
    "content": "package com.in28minutes.rest.webservices.restfulwebservices;\n\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.springframework.boot.test.context.SpringBootTest;\nimport org.springframework.test.context.junit4.SpringRunner;\n\n@RunWith(SpringRunner.class)\n@SpringBootTest\npublic class RestfulWebServicesApplicationTests {\n\n\t@Test\n\tpublic void contextLoads() {\n\t}\n\n}\n"
  },
  {
    "path": "README.md",
    "content": "# Deploy Spring Boot Applications to AWS using Elastic Beanstalk\n\n[![Image](https://www.springboottutorial.com/images/Course-Deploy-Java-Spring-Boot-Apps-To-AWS.png \"Deploying Spring Boot Apps to AWS using Elastic Beanstalk\")](https://www.udemy.com/course/deploy-java-spring-boot-to-aws-amazon-web-service/)\n\n\n## Take your first steps towards cloud with AWS Elastic Beanstalk. Deploy REST APIs, Full Stack Applications, Web Applications and Containers to the cloud.\n\nSpring Boot is the No 1 Java Framework to develop REST API and Microservices. AWS (Amazon Web Services) is the No 1 Cloud Service Provider today.\n\nHow about learning AWS by deploying Spring Applications to Cloud using Elastic Beanstalk?\n\n## Getting Started\n- [Video - Docker in 5 Steps](https://youtu.be/Rt5G5Gj7RP0)\n- [Video - Spring in Steps](https://www.youtube.com/watch?v=edgZo2g-LTM)\n- [Video - Spring Boot in Steps](https://www.youtube.com/watch?v=pcdpk3Yd1EA)\n- [Video - JPA/Hibernate in Steps](https://www.youtube.com/watch?v=MaI0_XdpdP8)\n- [Video - React in Steps](https://www.youtube.com/watch?v=SWXuXhZkNQc&t=110s)\n- [Article - Getting started with React and Spring Boot - Full Stack](https://www.springboottutorial.com/spring-boot-react-full-stack-crud-maven-application)\n- [Article - Using Spring Security and JWT with React and Spring Boot](https://www.springboottutorial.com/spring-boot-react-full-stack-with-spring-security-basic-and-jwt-authentication)\n- [AWS Code Pipeline Github Repo](https://github.com/in28minutes/spring-boot-todo-rest-api-h2-aws-codepipeline)\n\n## Installation Guides\n\n#### Required Tools\n\n- Node v8+ for npm\n- Visual Studio Code - Latest Version\n- Java 8+\n- Eclipse - Oxygen+ - (Embedded Maven From Eclipse)\n- Git\n- Docker\n- ELB CLI\n\n#### Installing Guides\n\n- [Playlist - Installing Java, Eclipse & Embedded Maven](https://www.youtube.com/playlist?list=PLBBog2r6uMCSmMVTW_QmDLyASBvovyAO3)\n- [Playlist - Installing Node Js (npm) & Visual Studio Code](https://www.youtube.com/playlist?list=PLBBog2r6uMCQN4X3Aa_jM9qVjgMCHMWx6)\n\n#### Troubleshooting Installations\n- Node JS and NPM \n  - https://docs.npmjs.com/common-errors\n  - https://docs.npmjs.com/getting-started/troubleshooting\n- Visual Studio Code\n  - https://code.visualstudio.com/docs/supporting/errors\n  - https://code.visualstudio.com/docs/supporting/FAQ\n- Eclipse and Embedded Maven\n  - Troubleshooting Guide : https://github.com/in28minutes/in28minutes-initiatives/tree/master/The-in28Minutes-TroubleshootingGuide-And-FAQ#tip--troubleshooting-embedded-maven-in-eclipse\n  - PDF : https://github.com/in28minutes/SpringIn28Minutes/blob/master/InstallationGuide-JavaEclipseAndMaven_v2.pdf\n  - GIT Repository For Installation : https://github.com/in28minutes/getting-started-in-5-steps\n\n## Course Overview\n\nIn this course, we deploy a variety of Spring Boot Applications to the Cloud:\n- REST APIs - Hello World and Todo - Jar\n- Todo Web Application War\n- Full Stack Application with React and Spring Boot\n- Single Container with REST API\n- Multi Container with Todo REST API talking to MySQL\n\nThis course would be a perfect first step as an introduction to AWS and the Cloud.\n\nYou will learn about automating deployments with Elastic Beanstalk CLI and creating a continuous delivery pipeline with AWS Code Pipeline. You will learn how to Auto Scale applications based on load as well as deploy multiple instances behind a load balancer using Elastic Beanstalk.\n\nYou will be using a number of AWS Services - EC2, S3, AWS CodePipeLine, AWS CodeBuild, SQS, IAM, CloudWatch. \n\nYou will be using deploying a variety of projects to Amazon Web Services (AWS). These projects are created with  React (Frontend Framework), Spring Boot (REST API Framework), Spring (Dependency Management), Spring Security (Authentication and Authorization - Basic and JWT), BootStrap (Styling Pages), Maven (dependencies management), Node (npm), Visual Studio Code (TypeScript IDE), Eclipse (Java IDE) and Tomcat Embedded Web Server. We will help you set up each one of these.\n\n## What you'll learn\n- You will Learn the Fundamentals of Amazon Web Services from Zero, no previous experience required\n- You will learn to deploy Spring Boot REST API to AWS with AWS Elastic Beanstalk\n- You will learn to deploy Java, Spring Boot Full Stack Applications to AWS with AWS Elastic Beanstalk and S3\n- You will be using a number of AWS Services - EC2, S3, AWS CodePipeLine, AWS CodeBuild, SQS, IAM, CloudWatch. \n- You will learn to deploy containerized Java Spring Boot applications to AWS\n- You will learn to create a continuous delivery pipeline with AWS Code Pipeline\n- You will learn how to Auto Scale applications based on load as well as deploy multiple instances behind a load balancer using Elastic Beanstalk.\n- You will Join 250,000 Learners having AMAZING LEARNING Experiences with in28Minutes\n\n## Requirements\n- You have an attitude to learn while having fun :)\n- You have some programming experience with Java, Spring and Spring Boot\n- You have a valid debit or credit card to create a AWS Account\n- You DO NOT need to have any experience with AWS (Amazon Web Services)\n\n\n## Step By Step Details\n\n### Getting Started with the course\n- Step 00 - Deploying Spring Boot Applications with AWS Elastic Beanstalk - Introduction\n- Step 01 - Getting Started with the Course\n\n### Getting Started with AWS\n- Step 01 - Creating an AWS Root Account\n- Step 02 - Creating an IAM User for your AWS Account\n\n### Getting Started with AWS Elastic Beanstalk\n- Step 01 - 10000 Feet Overview of Cloud, AWS and Elastic Beanstalk\n- Step 02 - Getting started with AWS Elastic Beanstalk - Creating First Application and Environment\n- Step 03 - Quick Exploration of AWS Elastic Beanstalk\n- Step 04 - Quick Introduction to AWS Regions\n- Step 05 - AWS Resources created by Elastic Beanstalk - An Overview\n- Step 06 - Its Your Responsibility to Monitor Billing on the Cloud - 5 Recommendations\n- Step 07 - Monitor AWS Billing - Setting Billing Alerts\n\n### Deploying Java Spring Boot Hello World REST API to AWS Elastic Beanstalk\n- Step 01 - Importing Seven Spring Boot Projects from Github\n- Step 02 - Quick Tip - Use Artifacts from build artifacts folder\n- Step 03 - Running 01 Spring Boot Hello World Application in Local\n- Step 04 - Building jar for 01 Spring Boot Hello World Application\n- Step 05 - Deploy 01 Spring Boot Hello World Application to AWS Elastic Beanstalk\n\n### Deploying Java Spring Boot Todo REST API to AWS Elastic Beanstalk\n- Step 01 - Setting up 02 Spring Boot Todo REST API in Local\n- Step 02 - Testing 02 Spring Boot Todo REST API in Local\n- Step 03 - Build and Deploy 02 Spring Boot Todo REST API in AWS Elastic Beanstalk\n- Step 04 - Exploring AWS Elastic Beanstalk Application Versions\n- Step 05 - Exploring Termination of AWS Elastic Beanstalk Application Environments\n- Step 06 - Exploring Logs from AWS Elastic Beanstalk Application Java JAR Environments\n\n### Deploying Java Spring Boot H2 Web App to AWS Elastic Beanstalk\n- Step 01 - Running 03 Spring Boot H2 Web App on Local\n- Step 02 - Deploying 03 Spring Boot H2 Web App WAR to AWS Elastic Beanstalk\n- Step 03 - Testing 03 Spring Boot H2 Web App AWS Deployment\n- Step 04 - Exploring AWS Environment logs of 03 Spring Boot H2 Web App\n\n### Deploying Java Spring Boot Web App talking to MySQL with AWS Elastic Beanstalk and AWS RDS\n- Step 01 - Code Review of 04 Spring Boot MySQL Web App - Environment Variables\n- Step 02 - Running MySQL as Docker Container on Local\n- Step 03 - Connect 04 Spring Boot MySQL Web App to MySQL on Local\n- Step 04 - Deploy 04 Spring Boot MySQL Web App to AWS Elastic Beanstalk\n- Step 05 - Testing 04 Spring Boot MySQL Web App Deployment on AWS Elastic Beanstalk\n- Step 06 - Exploring AWS Relational Database Service - RDS\n- Step 07 - Exploring AWS - Understanding Security Groups\n- Step 08 - Creating AWS RDS Database outside AWS Elastic Beanstalk\n- Step 09 - Setting up 04 Spring Boot MySQL Web App to connect to RDS - Environment Variables and Security Groups\n- Step 10 - Creating new AWS Security Group for AWS Elastic Beanstalk Application\n- Step 11 - Exploring AWS Elastic Beanstalk Save Environment Configuration Feature\n\n### Deploying Java Full Stack Spring Boot React App with AWS Elastic Beanstalk and AWS S3\n- Step 01 - Exploring 05 Java Full Stack Spring Boot React App\n- Step 02 - Running React Frontend in Local\n- Step 03 - Deploying Java REST API Backend to AWS Elastic Beanstalk\n- Step 04 - Building React Frontend Code for AWS Deployment\n- Step 05 - Quick Introduction to AWS Simple Storage Service - S3\n- Step 06 - Deploying React Frontend to AWS S3 Static Website\n\n### Deploying Containerized Java Applications with AWS Elastic Beanstalk\n- Step 01 - Code Review for 06 Single Container Java Spring Boot REST API\n- Step 02 - Creating and Running Local Docker Image for 06 Java Spring Boot REST API\n- Step 03 - Pushing 06 Single Container Java Spring Boot REST API Docker Image to Docker Hub\n- Step 04 - Deploying 06 Single Container Java Spring Boot REST API Image to AWS Beanstalk\n- Step 05 - Running 07 Multi Container Java Spring Boot REST API with MySQL on Local\n- Step 06 - Deploying 07 Multi Container Java Spring Boot REST API with MySQL to AWS Beanstalk\n- Step 07 - Testing 07 Multi Container Java Spring Boot REST API with MySQL on AWS - Security Groups\n\n### AWS Elastic Beanstalk - CLI, Blue Green Deployments and Worker Apps\n- Step 01 - Introduction to AWS Elastic Beanstalk Command Line Interface EB CLI\n- Step 02 - Exploring AWS Elastic Beanstalk Command Line Interface EB CLI - Commands\n- Step 03 - Exploring AWS Elastic Beanstalk Blue Green Deployments\n- Step 04 - Creating and Deploying Java Worker App to AWS Elastic Beanstalk\n- Step 05 - Testing Java Worker App on AWS Elastic Beanstalk using SQS - Simple Queing Service\n\n### AWS Elastic Beanstalk - Creating Load Balanced Auto Scaling Environments\n- Step 01 - Creating Load Balanced Auto Scaling Environments with AWS Elastic Beanstalk\n- Step 02 - Understand Magic of AWS Elastic Beanstalk - AZ, ELB, ASG and CloudWatch Alarms\n- Step 03 - Playing with AWS Elastic Beanstalk Auto Scaling Features\n- Step 04 - Playing with AWS Elastic Beanstalk Rolling Deployment Options - 1\n- Step 05 - Playing with AWS Elastic Beanstalk Rolling Deployment Options - 2\n\n### Continuous Delivery for Java Spring Boot Applications with AWS CodePipeline and AWS CodeBuild\n- Step 01 - Getting Started with AWS CodePipeline and AWS CodeBuild\n- Step 02 - Creating Github Repo and Commit Spring Boot Java Project\n- Step 03 - Configuring AWS CodeBuild and AWS CodePipeline\n- Step 04 - Creating AWS CodeBuild Build Specification \n- Step 05 -  Testing Continuous Deployment with AWS CodePipeline\n\n## Diagrams\n\n- Courtesy http://viz-js.com/\n\n```\ngraph architecture {\n\nnode[style=filled,color=\"#59C8DE\"]\n//node [style=filled,color=\"#D14D28\", fontcolor=white];\nrankdir = TB;\nnode[shape=record]\n\nIAM -- Console\nConsole -- UserID\nConsole -- Password\nIAM -- Application\nApplication -- AccessKeyID\nApplication -- SecretAccessKey\n\nIAM[label=<IAM User>]\nAccessKeyID[label=<Access Key Id>]\nUserID[label=<User Id>]\nSecretAccessKey[label=<Secret Access Key>]\nConsole[label=<Management Console>]\nApplication[label=<APIs>]\n}\n\n\ngraph architecture {\n\nnode[style=filled,color=\"#59C8DE\"]\n//node [style=filled,color=\"#D14D28\", fontcolor=white];\nrankdir = TB;\nnode[shape=record]\n\nUsers -- RootUser\nUsers -- IAM\n\nRootUser[label=<Root User>]\nIAM[label=<IAM User>]\n\n}\n\n\n\ngraph architecture {\n\nnode[style=filled,color=\"#59C8DE\"]\n//node [style=filled,color=\"#D14D28\", fontcolor=white];\nrankdir = TB\nnode[shape=record, width=2]\nedge [width=0]\ngraph [pad=\".75\", ranksep=\"0.05\", nodesep=\"0.25\"];\n\nApplications -- Software [style=invis]\nSoftware -- OS [style=invis]\nOS -- Hardware [style=invis]\n\n}\n\n\ngraph architecture {\n\nnode[style=filled,color=\"#59C8DE\"]\n//node [style=filled,color=\"#D14D28\", fontcolor=white];\nrankdir = TB\nnode[shape=record, width=3]\n\nContainers, LocalImages [height=1]\n\nDockerClient -- Daemon\nDaemon -- Containers \nDaemon -- LocalImages\nDaemon -- ImageRegistry\n\nDockerClient[label=<Docker Client>]\nImageRegistry[label=<Image Registry <BR /><FONT POINT-SIZE=\"10\">nginx<BR />mysql<BR />eureka<BR />your-app<BR /><BR /></FONT>>];\nDaemon[label=<Docker Daemon>]\n\n\n}\n\n\ngraph architecture {\n\nnode[style=filled,color=\"#59C8DE\"]\n//node [style=filled,color=\"#D14D28\", fontcolor=white];\nrankdir = TB\nnode[shape=record, width=2]\nHypervisor,HostOS, Hardware[shape=record, width=6.5, style=filled,color=\"#D14D28\", fontcolor=white]\nedge [width=0]\ngraph [pad=\".75\", ranksep=\"0.05\", nodesep=\"0.25\"];\n\nApplication1 -- Software1 [style=invis]\nApplication2 -- Software2 [style=invis]\nApplication3 -- Software3 [style=invis]\n\nSoftware1 -- GuestOS1 [style=invis]\nSoftware2 -- GuestOS2 [style=invis]\nSoftware3 -- GuestOS3 [style=invis]\nGuestOS1 -- Hypervisor [style=invis]\nGuestOS2 -- Hypervisor [style=invis]\nGuestOS3 -- Hypervisor [style=invis]\nHypervisor -- HostOS [style=invis]\nHostOS -- Hardware [style=invis]\n\n}\n\n\ngraph architecture {\n\nnode[style=filled,color=\"#59C8DE\"]\n//node [style=filled,color=\"#D14D28\", fontcolor=white];\nrankdir = TB\nnode[shape=record, width=2]\nHostOS, CloudInfrastructure, DockerEngine[shape=record, width=6.5, style=filled,color=\"#D14D28\", fontcolor=white]\nedge [width=0]\ngraph [pad=\".75\", ranksep=\"0.05\", nodesep=\"0.25\"];\nContainer1,Container2,Container3[height=2]\n\nContainer1 -- DockerEngine [style=invis]\nContainer2 -- DockerEngine [style=invis]\nContainer3 -- DockerEngine [style=invis]\nDockerEngine -- HostOS [style=invis]\nHostOS -- CloudInfrastructure [style=invis]\n\n}\n```\n### Troubleshooting\n- Refer our TroubleShooting Guide - https://github.com/in28minutes/in28minutes-initiatives/tree/master/The-in28Minutes-TroubleshootingGuide-And-FAQ\n\n## Youtube Playlists - 500+ Videos\n\n[Click here - 30+ Playlists with 500+ Videos on Spring, Spring Boot, REST, Microservices and the Cloud](https://www.youtube.com/user/rithustutorials/playlists?view=1&sort=lad&flow=list)\n\n## Keep Learning in28Minutes\n\nin28Minutes is creating amazing solutions for you to learn Spring Boot, Full Stack and the Cloud - Docker, Kubernetes, AWS, React, Angular etc. - [Check out all our courses here](https://github.com/in28minutes/learn)\n"
  }
]