// Path: src/com/xiaomi/mitv/soundbarapp/diagnosis/data/Entry.java
// public class Entry implements Comparable<Entry>{
//     private final Node mRoot;
//     private Node mCurrentView;
// 
//     public Entry(Node root){
//         mRoot = root;
//         mCurrentView = mRoot;
//     }
// 
//     public Node getRoot(){
//         return mRoot;
//     }
// 
//     public boolean isBegin(){
//         return mCurrentView==mRoot;
//     }
// 
//     public boolean isEnd(){
//         return (mCurrentView!=null)?mCurrentView.getChildren().size()==0:true;
//     }
// 
//     public Node pre(){
//         if(isBegin()) return null;
//         return mCurrentView.getParent();
//     }
// 
//     @Override
//     public int compareTo(Entry another) {
//         return mRoot.compareTo(another.getRoot());
//     }
// }
// 
// Path: src/com/xiaomi/mitv/soundbarapp/diagnosis/data/Node.java
// public class Node implements Comparable<Node>{
//     private Node mParent;
//     private OrderedList<Node> mChildren = new OrderedList<Node>();
//     private final QAElement mElement;
//     private final int mOrder;
// 
//     public Node(QAElement e, int order){
//         mElement = e;
//         mOrder = order;
//         if(mElement==null) throw  new IllegalArgumentException();
//     }
// 
//     public Node getParent() {
//         return mParent;
//     }
// 
//     public void setParent(Node mPre) {
//         this.mParent = mPre;
//     }
// 
//     public int getOrder(){ return mOrder;}
// 
//     public List<Node> getChildren() {
//         return mChildren;
//     }
// 
//     public void addNext(Node node){
//         node.setParent(this);
//         mChildren.add(node);
//     }
// 
//     public QAElement getElement() {
//         return mElement;
//     }
// 
//     @Override
//     public int compareTo(Node another) {
//         return mOrder -another.mOrder;
//     }
// }
// 
// Path: src/com/xiaomi/mitv/soundbarapp/diagnosis/data/QAElement.java
// public abstract class QAElement{
//     public static final String TYPE_CATEGORY = "category";
//     public static final String TYPE_QUESTION = "question";
//     public static final String TYPE_ANSWER = "answer";
// 
//     protected String mType;
//     protected String mText;
//     protected String[] mImagePath; //relative
// 
//     public String getType() { return mType; }
//     public String getText() { return mText; }
//     public void setText(String text) { this.mText = trim(text); }
//     public String[] getImagePath() { return mImagePath; }
//     public void setImagePath(String[] mImagePath) { this.mImagePath = mImagePath; }
//     public boolean isCategory(){ return this instanceof Category; }
//     public boolean isQuestion(){ return this instanceof Question; }
//     public boolean isFix(){ return this instanceof Fix; }
// 
//     public static QAElement createCategory(String text) {
//         QAElement e =  new Category();
//         e.setText(text);
//         return e;
//     }
// 
//     public static QAElement createQuestion(String text) {
//         QAElement e =  new Question();
//         e.setText(text);
//         return e;
//     }
// 
//     public static QAElement createFix(String[] imgs) {
//         QAElement e =  new Fix();
//         e.setImagePath(imgs);
//         return e;
//     }
// 
//     @Override
//     public boolean equals(Object o) {
//         if(!(o instanceof QAElement)) return false;
//         QAElement q = (QAElement)o;
//         return mType.equals(q.mType) && mText.equals(q.mText);
//     }
// 
//     public static class Category extends QAElement{
//         Category(){mType = TYPE_CATEGORY;}
//     }
//     public static class Question extends QAElement{
//         Question(){mType= TYPE_QUESTION;}
//     }
//     public static class Fix extends QAElement{
//         Fix(){mType= TYPE_ANSWER;}
//     }
// 
//     private String trim(String text){
//         return text.trim()
//                 .replaceFirst("\n", "").replaceFirst("\n", "")
//                 .replaceFirst("\t", "");
//     }
// }


import android.content.Context;
import android.content.res.AssetManager;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.util.JsonWriter;
import android.view.View;
import android.widget.Toast;
import com.xiaomi.mitv.soundbarapp.diagnosis.data.Entry;
import com.xiaomi.mitv.soundbarapp.diagnosis.data.Node;
import com.xiaomi.mitv.soundbarapp.diagnosis.data.QAElement;
import com.xiaomi.mitv.utils.IOUtil;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.StringWriter;
import java.util.*;
    private String loadConfig() {
        AssetManager asm = mContext.getAssets();
        InputStream in = null;
        try {
            in = asm.open(CONF_DIR + File.separator + CONF_FILE);
            return new String(IOUtil.readInputAsBytes(in), "utf-8");
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if(in!=null)try {in.close();}catch (IOException e){}
        }
        return null;
    }

    private Drawable loadResource(String imageName){
        if(imageName == null) return null;

        AssetManager asm = mContext.getAssets();
        InputStream input = null;
        try {
            input = asm.open(CONF_DIR+File.separator+imageName);
            return new BitmapDrawable(mContext.getResources(), input);
        }catch (IOException e){
            e.printStackTrace();
            if(input!=null)try {input.close();}catch (IOException ei){}
        }
        return null;
    }

    //core function to switch the UI
// Path: src/com/xiaomi/mitv/soundbarapp/diagnosis/data/Entry.java
// public class Entry implements Comparable<Entry>{
//     private final Node mRoot;
//     private Node mCurrentView;
// 
//     public Entry(Node root){
//         mRoot = root;
//         mCurrentView = mRoot;
//     }
// 
//     public Node getRoot(){
//         return mRoot;
//     }
// 
//     public boolean isBegin(){
//         return mCurrentView==mRoot;
//     }
// 
//     public boolean isEnd(){
//         return (mCurrentView!=null)?mCurrentView.getChildren().size()==0:true;
//     }
// 
//     public Node pre(){
//         if(isBegin()) return null;
//         return mCurrentView.getParent();
//     }
// 
//     @Override
//     public int compareTo(Entry another) {
//         return mRoot.compareTo(another.getRoot());
//     }
// }
// 
// Path: src/com/xiaomi/mitv/soundbarapp/diagnosis/data/Node.java
// public class Node implements Comparable<Node>{
//     private Node mParent;
//     private OrderedList<Node> mChildren = new OrderedList<Node>();
//     private final QAElement mElement;
//     private final int mOrder;
// 
//     public Node(QAElement e, int order){
//         mElement = e;
//         mOrder = order;
//         if(mElement==null) throw  new IllegalArgumentException();
//     }
// 
//     public Node getParent() {
//         return mParent;
//     }
// 
//     public void setParent(Node mPre) {
//         this.mParent = mPre;
//     }
// 
//     public int getOrder(){ return mOrder;}
// 
//     public List<Node> getChildren() {
//         return mChildren;
//     }
// 
//     public void addNext(Node node){
//         node.setParent(this);
//         mChildren.add(node);
//     }
// 
//     public QAElement getElement() {
//         return mElement;
//     }
// 
//     @Override
//     public int compareTo(Node another) {
//         return mOrder -another.mOrder;
//     }
// }
// 
// Path: src/com/xiaomi/mitv/soundbarapp/diagnosis/data/QAElement.java
// public abstract class QAElement{
//     public static final String TYPE_CATEGORY = "category";
//     public static final String TYPE_QUESTION = "question";
//     public static final String TYPE_ANSWER = "answer";
// 
//     protected String mType;
//     protected String mText;
//     protected String[] mImagePath; //relative
// 
//     public String getType() { return mType; }
//     public String getText() { return mText; }
//     public void setText(String text) { this.mText = trim(text); }
//     public String[] getImagePath() { return mImagePath; }
//     public void setImagePath(String[] mImagePath) { this.mImagePath = mImagePath; }
//     public boolean isCategory(){ return this instanceof Category; }
//     public boolean isQuestion(){ return this instanceof Question; }
//     public boolean isFix(){ return this instanceof Fix; }
// 
//     public static QAElement createCategory(String text) {
//         QAElement e =  new Category();
//         e.setText(text);
//         return e;
//     }
// 
//     public static QAElement createQuestion(String text) {
//         QAElement e =  new Question();
//         e.setText(text);
//         return e;
//     }
// 
//     public static QAElement createFix(String[] imgs) {
//         QAElement e =  new Fix();
//         e.setImagePath(imgs);
//         return e;
//     }
// 
//     @Override
//     public boolean equals(Object o) {
//         if(!(o instanceof QAElement)) return false;
//         QAElement q = (QAElement)o;
//         return mType.equals(q.mType) && mText.equals(q.mText);
//     }
// 
//     public static class Category extends QAElement{
//         Category(){mType = TYPE_CATEGORY;}
//     }
//     public static class Question extends QAElement{
//         Question(){mType= TYPE_QUESTION;}
//     }
//     public static class Fix extends QAElement{
//         Fix(){mType= TYPE_ANSWER;}
//     }
// 
//     private String trim(String text){
//         return text.trim()
//                 .replaceFirst("\n", "").replaceFirst("\n", "")
//                 .replaceFirst("\t", "");
//     }
// }


// Path: src/com/xiaomi/mitv/soundbarapp/diagnosis/Engine.java
import android.content.Context;
import android.content.res.AssetManager;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.util.JsonWriter;
import android.view.View;
import android.widget.Toast;
import com.xiaomi.mitv.soundbarapp.diagnosis.data.Entry;
import com.xiaomi.mitv.soundbarapp.diagnosis.data.Node;
import com.xiaomi.mitv.soundbarapp.diagnosis.data.QAElement;
import com.xiaomi.mitv.utils.IOUtil;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.StringWriter;
import java.util.*;

    private String loadConfig() {
        AssetManager asm = mContext.getAssets();
        InputStream in = null;
        try {
            in = asm.open(CONF_DIR + File.separator + CONF_FILE);
            return new String(IOUtil.readInputAsBytes(in), "utf-8");
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if(in!=null)try {in.close();}catch (IOException e){}
        }
        return null;
    }

    private Drawable loadResource(String imageName){
        if(imageName == null) return null;

        AssetManager asm = mContext.getAssets();
        InputStream input = null;
        try {
            input = asm.open(CONF_DIR+File.separator+imageName);
            return new BitmapDrawable(mContext.getResources(), input);
        }catch (IOException e){
            e.printStackTrace();
            if(input!=null)try {input.close();}catch (IOException ei){}
        }
        return null;
    }

    //core function to switch the UI
    private void go2(Node node, int viaAction){